Hallo,
ich habe zurzeit Schwierigkeiten Datensätze in eine Tabelle zu schreiben, wenn der Datensatz double-Werte mit Nachkommastellen enthält.
Als Betriebssystem benutze ich Linux, über ODBC greife ich auf die Postgres-Datenbank zu. Bei der Erzeugung des Insert-Befehls benutze ich zum Befüllen der Spalten den SQLBindParameter-Befehl. Bei den Spalten, die mir Schwierigkeiten bereiten, verwende ich als Typ SQL_FLOAT.
Die Ausführung des Befehls funktioniert ohne Probleme, solange ich nur Datensätze mit Werten einfüge, die keine Nachkommastellen haben. Sobald ich aber Werte mit Nachkommastellen einfügen will, bekomme ich beim Einfügen folgende Fehlermeldung:
SQLSTATE=HY000, native error code=7 'FEHLER: ungültige Eingabesyntax für Typ double precision: „-31078,9“.
Habe ich irgendwo etwas vergessen?
Für jeden Tipp bin ich dankbar. Falls etwas unklar ist, fragt mich einfach.
Viele Grüße
Kai
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas,
vielen Dank für Deinen Tipp!
Die Datensätze versuche ich einzufügen, indem ich einerseits einen SQL-Befehl mit Platzhalter zusammensetze und einem SQLHANDLE mit SQLBindParameter mitteile, wie die Platzhalter beim anschließenden SQLExecDirect zu ersetzen sind. Diesen Befehl rufe ich für die Spalten, die mir Schwierigkeiten bereiten, nur einmal auf, außerdem bekomme ich keinen Fehler zurück.
Es ist mir jetzt nicht klar, wie ich auf diese Weise versuchen kann, mehrere Werte in einer Spalte einzufügen. Hättest Du vielleicht noch eine Idee?
Viele Grüße
Kai
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ergänzend: Intern arbeitet die meiste SW mit dem international gebräuchlichen '.' als Dezimaltrenner. In Ländern, die ein Komma nutzen übernimmt meist die Ländereinstellung und/oder die GUI die richtige Interpretation, so das man als Nutzer nichts damit zu tun hat (sofern die SW das auch richtig nutzt). Wenn man aber nun mit Postgres direkt kommunizirt, dann muß man da selbst aufpassen.
Gruß Uwe
Have a lot of fun!
Außer man nutzt den MONEY-Datentyp, der importiert das richtig, wenn man LC_* passend gesetzt hat.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo,
vielen Dank Eure Mails.
Vielleicht habe ich in meiner ersten Anfrage aber etwas unklar ausgedrückt: Zum Zugriff auf die Postgres-Db via ODBC benutze die C-Funktionen: Ich erzeuge mir also ein Handle, erzeuge einen SQL-Befehl mit Platzhaltern (z.B. insert into mydb.addressen (name, vorname) values(?,?) und teile dem Handle mit SQLBindParameter mit, wie die Platzhalter zu interpretieren sind. Wenn ich einen Platzhalter mit einem double-Wert verbinde, übergebe ich SQLBindParameter einen entsprechenden (gecasteten) double-Wert und keine Zeichenkette. Wenn für alle Platzhalter festgelegt ist, wie sie zu interpretieren sind, rufe ich die Funktion SQLExecDirect auf (wo ich auch keinen Einfluss darauf nehme, wie die übergebenen double-Werte formatiert werden).
Diese Vorgehensweise habe ich auch schon im anderen Umfeld verwendet und es gab nie Probleme. Unter Linux bekomme ich die besagte Fehlermeldung, ohne dass ich eine Idee habe warum. Für jeden Tipp bin ich daher dankbar.
Viele Grüße
Kai
Noch mal: Floats werden mit einem Punkt getrennt.
Ich weiß nicht, wie und wo du die Werte in deinem Programm castest, aber offensichtlich gibt es an dieser Stelle ein Problem.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen