INSERT INTO Befehl speichert keine Fliesskommazahlen!

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Rumcajs.

    INSERT INTO Befehl speichert keine Fliesskommazahlen!

    Hallo zusammen, Brauche dringend Hilfe! ;(

    Aufgabe:
    Eine beliebige Zahl soll in einer SQL-Datenbank (Datentyp: decimal) gespeichert werden.

    Mit diesem Befehl funktioniert es einwandfrei:
    sql = "INSERT INTO tblArtikel (Preis) VALUES (40.59)"

    Wenn ich den Preis mit einer Variable übergebe, funktioniert es nicht :
    DIM Zahl AS Double
    Zahl = 40.59
    sql = "INSERT INTO tblArtikel (Preis) VALUES (" & Zahl & ")"


    Diese Fehlermeldung wird ausgegeben:
    In der INSERT-Anweisung sind weniger Spalten angegeben als Werte in der VALUES-Klausel. Die Anzahl von Werten in der VALUES-Klausel und die Anzahl von in der INSERT-Anweisung angegebenen Spalten müssen übereinstimmen.

    Bei Ganzahlen z.B. Zahl=41 funktionert es Einwandfrei.

    Mit freundlichen Grüßen
    Andreas
    Du musst den Wert in Hochkommas setzten:

    DIM Zahl AS Double
    Zahl = 40.59
    sql = "INSERT INTO tblArtikel (`Preis`) VALUES ('" & Zahl & "')"


    Weil der die beiden Zahlen nicht als eine Interpretiert. Kannst dir generell angewöhnen alle Werte in Hochkommas zu setzten und die Spalten namen in Apostoph ` das erspart oftmals fehler. Weil dann klar definiert ist, alles zwischen zwei ` ist eine Spalte und zwischen ' ein Wert.

    Edit: @doci dein Vorschlag geht ebenso wenig. Da SQL nach dem englisch amerikanischen System arbeitet, da gibs kein Komma zwischen 2 Zahlen und so würde er 2 Werte erkennen aber nur eine Spalte angegeben und es würde wieder zum Fehler kommen.
    Es klappt nicht zum verrecken, ob mit oder ohne Apostroph, ob mit oder ohne Hochkomma.
    Nur wenn ich in SQL-Server den Datentyp von Zahl auf Text ändere werden die Zahlen zunächst richtig abgespeichert. Eine richtige Sortierung der Daten ist dann allerdings ausgeschlossen.

    Jahre lange hat es in VB6 ohne Ärger funktioniert. Jetzt hat man mir VB2008 installiert, und schon gibt es die ersten Probleme.

    Trotzdem vielen Dank für die Mühe :whistling:

    Gruss
    Andreas
    Hochkommas darfst du bei Zahlen nicht nehmen, die braucht man bei String und evtl Datum.

    Dein erster Versuch:

    VB.NET-Quellcode

    1. sql = "INSERT INTO tblArtikel (Preis) VALUES (" & Zahl & ")"
    ist da schon richtig, aber du mußt auf das Dezimaltrennzeichen achten!
    INSERT INTO will zwingend einen Punkt als Dezimaltrennzeichen, die automatische Konvertierung von vb nimmt jedoch das aus den Ländereinstellungen, bei DE idR das Komma.
    Ein Replace(Zahl, ",", ".") hilft da.
    Also wenn du dir deine Variable "Zahl" in einer MsgBox ausgeben lässt, wird 40,59 angezeigt.
    Ich denke das Format Double konvertiert deine Zahl in eine Deutsche Kommazahl mit Komma statt Punkt.

    Versuche mal deine Zahl als String zu Deklarieren. Ist zwar nicht schön aber es könnte funktionieren!

    VB.NET-Quellcode

    1. Dim Zahl As String
    2. Zahl = "40.59"
    3. sql = "INSERT INTO tblArtikel (Preis) VALUES ('" & Zahl & "')"


    Unter Vb ist es ein String aber es werden keine Typen an SQL übergeben, für die SQL Spalte ist es dann eine Decimalzahl.
    Danke schön an alle, es klappert :D

    Mit dieser Methode FUNKTIONIERT ES!!! :thumbsup:
    DIM Zahl as Double
    Zahl=40.59
    sql = "INSERT INTO tblArtikel (Preis) VALUES (" & Replace(Zahl,",",".") & ")"


    Mit dieser Methode wird eine Fehlermeldung ausgegeben
    :cursing: Fehler beim Konvertieren des Varchar-Datentyps in Numeric :cursing:
    DIM Zahl as String
    Zahl="40.59"
    sql = "INSERT INTO tblArtikel (Preis) VALUES ('" & Zahl & "')"


    Ganz schön Stur der SQL-Server!

    Gruss
    Andreas

    Gaga schrieb:

    Hochkommas darfst du bei Zahlen nicht nehmen, die braucht man bei String und evtl Datum.

    Dein erster Versuch:

    VB.NET-Quellcode

    1. sql = "INSERT INTO tblArtikel (Preis) VALUES (" & Zahl & ")"
    ist da schon richtig, aber du mußt auf das Dezimaltrennzeichen achten!
    INSERT INTO will zwingend einen Punkt als Dezimaltrennzeichen, die automatische Konvertierung von vb nimmt jedoch das aus den Ländereinstellungen, bei DE idR das Komma.
    Ein Replace(Zahl, ",", ".") hilft da.
    Hallo Gaga,
    das ist die Lösung :thumbsup:

    Gruss
    Andreas