Entwickler-Ecke

Datenbanken - [MSSQL] Fehler bei Gleitkommakonvertierung.


baka0815 - Mi 20.05.09 10:54
Titel: [MSSQL] Fehler bei Gleitkommakonvertierung.
Hallo zusammen,

sporadisch tritt bei einem Kunden der folgende Fehler auf:


Quelltext
1:
2:
General SQL error.
Fehler bei Gleitkommakonvertierung. Die Quelle ist ungültig.


Die Abfrage ist ein Standard TQuery. Im (INSERT) SQL werden Parameter übergeben und dann mittels ParamByName() gesetzt - dabei sind natürlich auch Gleitkommawerte.
Ab und zu tritt dabei bei einem Kunden mit dem Microsoft SQL Server 2005 (Express Edition) der oben genannte Fehler auf, den ich nicht reproduzieren kann. Auch Onkel Google und die Forumssuche helfen hier nicht weiter. Insgesamt habe ich bei Google zwei Leidensgenossen (von 2004 und 2006) gefunden, die aber leider keine hilfreiche Antwort bekommen haben.

Hat von euch vielleicht wer 'ne Idee?


bummi - Mi 20.05.09 11:01

irgendwelche Trigger auf der Tabelle ?


baka0815 - Mi 20.05.09 11:08

Nein, wir haben da keine Trigger in der Datenbank - höchstens dass der Kunde selbst welche angelegt hat, halte ich aber für unwahrscheinlich.


ffgorcky - Mi 20.05.09 17:57

Ich weiß da leider auch nicht weiter, aber vielleicht könnte Dir der Kontakt mit dem
Ersteller des Threads 82954 [http://www.delphi-forum.de/viewtopic.php?t=82954], also user profile iconGericasS weiterhelfen.
Der scheint ja eine Lösung gefunden zu haben.
- Oder habe ich Dein Problem jetzt falsch verstanden?


baka0815 - Do 21.05.09 15:39

Danke für die Info, aber das Problem ist kein Gleitkommaüberlauf in Delphi, sondern "irgendwo" im MS-SQL Server.

Die Werte die übergeben werden sind jedoch nicht außerhalb eines Bereichs, sondern Beträge wie "19,57".

Meine Vermutung ist, dass es etwas mit der Lokalisierung zu tun haben könnte, da wir aber Parameter nutzen, sollte es da eigentlich kein Problem geben.


baka0815 - Mo 25.05.09 10:10

*pusch*

Habe bisher leider keine neue Erkenntniss, sonst keiner 'ne Idee?


Martok - Mo 25.05.09 17:52

user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
Die Werte die übergeben werden sind jedoch nicht außerhalb eines Bereichs, sondern Beträge wie "19,57".

Da hast du den Fehler ja: Datenbanken wollen in Queries eigentlich immer '.' als Dezimaltrenner sehen.


ffgorcky - Mo 25.05.09 20:06

Sprich: Du solltest Deinen einzufügenen Wert erst mal diesem hier aussetzen:

Delphi-Quelltext
1:
2:
DeinEinzufuegenerWertAlsString:=StringReplace(DeinEinzufuegenerWertAlsString,'.','', [rfReplaceAll]); //um die 1.000-er Punkte wegzubekommen.
DeinEinzufuegenerWertAlsString:=StringReplace(DeinEinzufuegenerWertAlsString,',','.', [rfReplaceAll]); //um die Kommas als Punkte zu setzen


baka0815 - Di 26.05.09 09:30

Ich glaube, ihr habt mich falsch verstanden. :)

Wir schreiben die Parameter wie folgt: Query.ParamByName('ParamX').AsCurrency := CurrencyVariable;

Wüsste nicht, wo ich da beeinflussen kann ob ich in der Currency-Variable nun einen "." oder ein "," habe.


Martok - Di 26.05.09 16:00

Oh.

Nur sporadisch, wie sporadisch denn? Eventuell ist das eine andere Query, die über 3 Ecken erst aufgerufen wird?


baka0815 - Di 26.05.09 16:22

Wir haben das Open in einem Try-Except Block und schreiben beim Fehler sämtliche Informationen des fehlgeschlagenen Queries (also inkl. Parameter) in eine Datei. Daher kann ich bestimmen, welches Query es tatsächlich ist, ein querschlagendes Query kann ich also ausschließen.

So sporadisch, dass es bisher keinem meiner Kollegen (und mir bisher auch nicht) aufgefallen ist, weder in der Entwicklung noch beim Support und wohl auch nur bei einem Kunden.
Ich habe hier nur die Info, dass die Meldung beim Kunden kam, bei welchem SQL und welche Werte die Parameter hatten. Demnach ist jedoch alles ok...


Delete - Di 26.05.09 16:56

Vielleicht ist auch eine Fremdsoftware im Spiel, die global mal eben temporär den Decimalseparator umstellt (hab ich schon erlebt).


Bernhard Geyer - Di 26.05.09 17:14

Sind eigentlich alle MS SQL Server Updates installiert? Ab und zu kommt es vor das sich Updates für den MS SQL Server nicht korrekt installieren lassen so das eine alte DB-Version läuft die noch (mehr) Fehler hat.


baka0815 - Mi 27.05.09 11:21

Das mit der Fremdsoftware kann ich prüfen, aber da es sich um die Express-Version handelt, vermute ich nicht, dass auf die DB noch andere Programme zugreifen.

Was die Updates angeht, weiß ich nicht genau, welche installiert sind.
Der SQL-Server zeigt Version 9.00.1399.06 und es gibt ein SP2 [http://www.microsoft.com/downloads/details.aspx?FamilyID=31711d5d-725c-4afa-9d65-e4465cdff1e7&DisplayLang=de], leider weiß ich nicht, ob das SP2 die genannte Version hat.
Sehe gerade, dass das SP ein Datum vom 18.02.2007 hat, der SQL-Server jedoch den 14.10.2005 liefert - ich werd' denen also mal empfehlen, dass SP2 einzuspielen.


Martok - Mi 27.05.09 14:45

Sehr interessante Fehler hatte ich mal (wenn auch bei Oracle), wenn Server und Client zu unterschiedliche Versionen haben.

Eventuell sind die Client-Libs neuer als der Server?