AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADOCommand Parameter - ich werde bekoppt
Thema durchsuchen
Ansicht
Themen-Optionen

ADOCommand Parameter - ich werde bekoppt

Ein Thema von süden · begonnen am 6. Jan 2014 · letzter Beitrag vom 7. Jan 2014
Antwort Antwort
Seite 1 von 2  1 2      
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#1

ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 20:04
Datenbank: Access / SQL Server • Version: 2010/2005 • Zugriff über: ADO
Hallo,
ich hoffe Ihr seit meine Rettung.

a) Ich hole aus einer Tabelle Q eine Summe (ADODataset)
b) Das Ergebnis ist 416,66666666666666.
c) Mittels ADOConmmand und SQL UPDATE will ich dieses Ergebnis in eine andere Tabelle einfügen.
Ich verwende brav Parameter. Es können viele Datensätze werden.

Code:
   dKost := FieldByName('intern').AsFloat;
   ...
   Parameters.ParamByName('I').Value := dKost;
Ergebnis in der neuen Tabelle = 41666666666666666
Ich dachte, weil dKost mit Komma ist.

Umgebaut zu Stingvariable sKost.
Code:
   sKost := FieldByName('intern').AsSting;
   ...
   Parameters.ParamByName('I').Value := StringReplace(sKost, ',', '.', [rfReplaceAll]);
Ergebnis der Variable = '416.66666666666666' mit Punkt
Ergebnis in der neuen Tabelle = 41666666666666666

Sowohl mit Komma als auch mit Punkt als auch als Float/Double immer das Gleiche.

Was passiert da?
Ich dachte eigentlich mit Parametern gibt es die Probleme nicht?
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 20:33
Was passiert bei:
Parameters.ParamByName('I').Value := FieldByName('intern').AsFloat; Value ist, soweit ich weiß, vom Typ Variant, da wird (glaub' ich) der Typ des übergebenen Wertes interpretiert.
Parameters.ParamByName('I').Value := FieldByName('intern').Value; Wenn Du die Daten von "Hand" in die Datenbank eingibst, musst Du dann als Dezimaltrenner das Komma oder den Punkt eingeben?

Ist das bei beiden Tabellen gleich?

Meine momentane Vermutung wäre, dass das Komma als Tausendertrenner erkannt wird und ist nicht für die Speicherung erforderlich. Daher wird's einfach entfernt.

Was passiert denn, wenn Du bei der Stringverarbeitung den Punkt drinne läßt?
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#3

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 20:53
In der DB Oberfläche kann ich die Zahlen mit Komma eingeben,
und sie werden auch mit Komma angezeigt und ausgewertet.

Mit Komma werden die Zahlen falsch interpretiert,
bei dem StringReplace wechsel ich ja das Komma zu einem Punkt.

Somit habe ich beide Varianten probiert.

Mit:
Code:
sqlText := 'UPDATE tSN_Budget SET [ist] = '+sKosti+', istEx = '+sKoste+' WHERE ( '
                       +'(Proj_Ident = '+QuotedStr(sProj_Ident)+') '
                       +' AND (LeistungsKlasse = '+QuotedStr(sLK)+') '
                       +' AND (Leistung = '+QuotedStr(sLeistung)+'))';
Gehts!!!
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 21:00
Woher soll ADO wissen, was für ein Typ der Parameter ist? Da stopfst Du irgendwas rein und das geht auch mal schief. Abhilfe: Definiere den Parametertyp explizit. Entweder im Objektinspektor, oder (wenn Du die Query zur Laufzeit zuweist)

Delphi-Quellcode:
Parameters.ParamByName('I').DataType := ftFloat;
Parameters.ParamByName('I').Value := 1.234;
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#5

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 22:10
Ist fest verdrahtet im Objektexplorer als ftFloat.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 07:54
Hast Du es mal mit ftBCD statt float versucht?
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 08:09
Ist fest verdrahtet im Objektexplorer als ftFloat.
Access oder SQL-Server?
Zitat:
Delphi-Quellcode:
dKost := FieldByName('intern').AsFloat;
...
Parameters.ParamByName('I').Value := dKost;
Welcher Datentyp ist dKost ? Jetzt sag nicht 'Double'

Hmm..
Delphi-Quellcode:
Post(TheCodeSchnipselThatMakesDieProbleme)
IF DB=Access then
  Append(TheBeispielAccessDB)
else
  Append(TheBeispielSchemaSkript)
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#8

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 11:02
Klar Double, wird ja als Float gelesen, und es funktioniert ja auch - bis auf die Kommaverschiebung.
Ich habe ja auch beides getestet, Float und String (mit '.' und mit ','.

Direkt in den SQL-Commandtext gehts ja.

Datenbanken: Für Access und SQL Server (ab 2005).

Habe ich da irgendwas nicht auf dem Schirm?
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 11:31
Wenn du mit Feldinhalten ein Problem hast dann darfst du nur dem MS SQL Management Studio vertrauen wenn du den Inhalt prüfen möchtest.
Ich wollt's nur mal gesagt haben weil wenn man sich nur auf ADO Komponenten verlässt die Ursachen nur schwer finden kann.

Eine weitere Quelle von Problemen sind verschiedene Datenbanken zur Design- und Runtime.
Sobald man in Delphi eine ADOQuery oder ADOCommand ändert wird im Hintergrund die ADOConnection geöffnet, der SQL-Text analysiert und daraus die Datentypen der Parameter abgeleitet.
Verweisst z.B. die Connection zur Designtime auf eine lokale Accessdatenbank während zur Laufzeit ein SQL Server verwendet wird passen die Parametertypen in manchen Fällen nicht so richtig zusammen.
Nach meinen Erfahrungen ist es besser zur Designtime eine SQL Server DB zuverwenden als eine Accessdatenbank.
fork me on Github
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#10

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 11:39
Ich entwickle erstmal Datenbank unabhängig mit ADO,
dann teste ich mit Accsess + SQL Server (oder umgekehrt).

Hier habe ich zuerst mit Access getestet -> und bin nicht weiter gekommen.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz