Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Problem beim Einfügen von double-Werten mit Nachkommastellen

  1. #1
    ksiegele ist offline Neuer Benutzer
    Registriert seit
    21.01.2009
    Beiträge
    6

    Standard Problem beim Einfügen von double-Werten mit Nachkommastellen

    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

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ksiegele Beitrag anzeigen
    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
    Code:
     „-31078,9“
    Du versuchst, in ein Feld für ein Double 2 Zahlen einzugeben, -31078 und 9. Das geht natürlich nicht. Vermutlich willst Du -31078.9 da eingeben, stimmts? Also, tue es einfach...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ksiegele ist offline Neuer Benutzer
    Registriert seit
    21.01.2009
    Beiträge
    6

    Standard

    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

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ksiegele Beitrag anzeigen
    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
    Ich erkläre es Dir noch mal laaaaangsam: tausche das Komma in der Zahl gegen einen Punkt.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    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!

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  7. #7
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Außer man nutzt den MONEY-Datentyp, der importiert das richtig, wenn man LC_* passend gesetzt hat.
    Stimmt:

    Code:
    test=# create table ads (geld money);
    CREATE TABLE
    test=# set lc_monetary='de_DE';
    SET
    test=# insert into ads values ('12,23');
    INSERT 0 1
    test=# select * from ads;
       geld
    ----------
     EUR12,23
    (1 row)
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  8. #8
    ksiegele ist offline Neuer Benutzer
    Registriert seit
    21.01.2009
    Beiträge
    6

    Standard

    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

  9. #9
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  10. #10
    ksiegele ist offline Neuer Benutzer
    Registriert seit
    21.01.2009
    Beiträge
    6

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    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.
    Die Funktion SQLBindParameter rufe ich genauso auf, wie's bei Geiger beschrieben ist. Wo soll das Problem sein?

    Viele Grüsse
    Kai

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum