Float in Datenbank
-
Hallo.
Ich habe eine InterBase-Datenbank. Da gitbt es ein Datenfeld mit dem Typ Float. Wie kriege ich nun eine Floatzahl in die Datenbank?
Mit folgendem SQL-Statement schreibt er nur die Zahlen OHNE komma hintereinander da rein. In diesem Beispiel: 1234
INSERT INTO "TBL_USER" ("IP", "NAME", "VORNAME", "GUTHABEN", "PWD") VALUES (3, 'Schültke', 'André', '12,34', '0');Bitte helft mir.
MfG
Muecke
-
Vermutlich möchte die DB gerne floats mit nem Punkt statt Komma haben. Und weil du das Ganze in Hochkomma gepackt hattest, hat die DB von String nach Float gecastet, festgestellt, das "," kein gültiges float-Zeichen ist und an der Stelle das casten abgebrochen. ALso besser:
INSERT INTO TBL_USER (IP, NAME, VORNAME, GUTHABEN, PWD) VALUES (3, 'Schültke', 'André', 12.34, '0');
(Was ist mit der 0 am Ende? Zahl, NULL oder Text?)
-
Hallo.
Danke, das Stimmt.
Aber ich habe nun folgendes Problem:
Die DB erwartet den "." Doch das Programm erwartet zum rechnen das ","
Wie kann ich nun den Punkt im String durch das Komma ersetzen?MfG
Muecke
-
intern rechnet auch dein Programm mit '.', nur die Eingabe in ein Editfeld oder ähnliches muss bei einem "deutschen" System mit ',' erfolgen
z.B. aus C++:
Eingabe Editfeld: 5,44
Umwandeln in Float: float wert1 = StrToFloat(Edit->Text);Zuweisung im Quellcode: float wert2 = 15.34;
Ausgabe in EditFeld: Edit->Text = FloatToStr(wert2); //oder FloatToStrF
was das Ersetzen von Punkt in Komma angeht mußt du uns mal die Programmiersprache verraten
-
Die Programmiersprache ist C++.
Ich habe jetzt ein TMaskEdit Feld mit folgendem Format:
990,00;1;_Wenn ich da jetzt was eingebe, holt sich das Programm einen Wert aus der DB, soll die beiden Werte addieren und in der DB ersetzen.
Wie löse ich das Problem nun mit dem . und ,MfG
Muecke
-
indem du einfach den Wert des Editfeldes in eine Floatvariable gibst und diese mit dem Select-Ergebnis (siehe FAQ) addierst und mit UPDATE in die DB zurückschreibst
Punkt und Komma spielen hier ausser für die Edit-Eingabe keine Rolle
-
Danke für den Tip,
aber das Funktioniert auch nicht. Ich weiß aber woran es definitif liegt:
Sobald ich eine Floatvariable in einen String konvertiere, bzw. nur in das SQL-Statement einfüge, wird aus dem "." automatisch ein "," erzeugt.
Wie kann ich diese ungewollte Konvertierung umgehen?
Ich arbeite mit dem Borland C++ Builder 6MfG
Muecke
-
QD-Lösung:
AnsiString floatToMysql(AnsiString f) { f=AnsiReplaceText(f,ThousandSeparator,""); return AnsiReplaceText(f,DecimalSeparator,"."); } AnsiString mysqlToFloat(AnsiString f) { return AnsiReplaceText(f,".",DecimalSeparator); }
-
Muecke schrieb:
Danke für den Tip,
aber das Funktioniert auch nicht. Ich weiß aber woran es definitif liegt:
Sobald ich eine Floatvariable in einen String konvertiere, bzw. nur in das SQL-Statement einfüge, wird aus dem "." automatisch ein "," erzeugt.
Wie kann ich diese ungewollte Konvertierung umgehen?wie sieht denn dein SQL-Befehl aus?
Mit welchen Komponenten arbeitest du?ein Beispiel mit TQuery, TIBQuery ohne Konvertierungen
float wert1 = 5.2233; float wert2 = 6.3333; Query->SQL->Clear(); Query->SQL->Add("UPDATE table SET wert = :Wert1"); Query->SQL->Add("WHERE wert = :Wert2); Query->ParamByName("Wert1")->Value = wert1; Query->ParamByName("Wert2")->Value = wert2; Query->ExecSQL();
Kannst auch im VCL-Forum mal suchen, da gibst auch schon einige Beiträge in ähnliche Richtung
-
Danke es geht...