![]() |
Datenbank: MySQL • Version: 5,1 • Zugriff über: OBDC
Interne Umwandlung von String zu Float?
Tag,
meine relationale Datenbank funktioniert soweit gut, ich kann neue Datensätze erstellen, löschen, aber selbstverständlich auch speichern - speichern aber nur eingeschränkt. Ein Tabellenfeld einer Tabelle ist vom Typ FLOAT. Das Problem ist, dass ich keine Kommawerte ein die Datenbank einspeißen kann, ich bekomme immer folgende Fehlermeldung, wenn ich einen Dezimalwert, mit Komma getrennt, speichern will.: [MySQL][ODBC 5.1 Driver][mysqld-5.1.47-community]Incorrect decimal value: '5,5' for column 'Honorarsatz' at row 1". Jetzt meine Frage: Woran liegt das? Etwa das Delphi intern von String nach FLOAT (ich habe auch schon DOUBLE und DECIMAL erfolglos ausprobiert) umwandelt wie die Funktion Val? Wenn ja, wie kann ich den Fehler beheben? Der Dezimalpunkt ist gesperrt, ich habe auch schon erfolglos probiert das Komma in einen Punkt beim OnPressKey-Ereignis umzuwandeln. mfg. |
AW: Interne Umwandlung von String zu Float?
Das liegt daran, dass StrToFloat in den Wert mit Komma zurückgibt, das DBMS aber einen Punkt als Trennzeichen verlangt. Du musst also nur das Komma durch den Punkt ersetzen.
Gruß |
AW: Interne Umwandlung von String zu Float?
Ein Float ist ein Float, da gibt es keinen Punkt und kein Komma. Wie sieht denn das Insert-Statement aus?
|
AW: Interne Umwandlung von String zu Float?
Hallo,
du darfst den Float-Wert nicht per AsString übergeben, sondern als AsFloat. D.h. Parameter benutzen. Heiko |
AW: Interne Umwandlung von String zu Float?
Zitat:
Ach ja bedenke auch: Wenn du über diesen Weg ein Apps schreibst die nur mit MySQL arbeitet sind für jede Verteilung bei einem Closed Source-Programm eine MySQL-Lizenz fällig! |
AW: Interne Umwandlung von String zu Float?
@angos:
Zitat:
Zitat:
@DeddyH: Zitat:
@hoika: Zitat:
Delphi-Quellcode:
Und die Parameter-Zuweisung so:
Sql := 'UPDATE auftraggeber SET ... Honorarsatz=:12 ... WHERE AuftraggeberID= :ID';
Delphi-Quellcode:
Ich glaube, man kann kritisieren, dass ich als Parameter Zahlen verwende, aber ich habe auf meiner Form 14 DBEdits, es werden relativ viele Daten erfasst. Dies gestalte ich aber alles mit Schleifen, die Datenerfassung so:
AdoQuery3.Parameters.ParamByName('12').Value := DBText12.Text;
Delphi-Quellcode:
Und dann fülle ich die Parameter auch per Schleife:
for i := 2 to Max do Texts[i] := (FindComponent('DBEdit' + IntToStr(i)) as TDBEdit).Text;
Delphi-Quellcode:
Ich bin mir nicht 100%ig sicher, aber die TAdoQuery-Komponente bietet doch nicht die Möglichkeit, wie z.B. TQuery (wenn ich mich da richtig entsinne) den Typ mit anzugeben, also AsString, AsFloat etc.
for i := 2 to Max do AdoQuery3.Parameters.ParamByName(IntToStr(i)).Value := Texts[i];
|
AW: Interne Umwandlung von String zu Float?
Zitat:
Vermutung: Das Property Value ist ein Variant und merkt sich den Typ der übergeben wurde. Deshalb ist hier eine interne String nach Float-Wandlung nötig die nicht nötig wäre wenn du eine Float-Variable an das Value-Property übergibst. |
AW: Interne Umwandlung von String zu Float?
Nicht die Float hat ein Trennzeichen, sondern deren Darstellung. Und Du übergibst einen String an ein Float-Feld. Wie ist es so?
Delphi-Quellcode:
AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text);
|
AW: Interne Umwandlung von String zu Float?
Delphi-Quellcode:
Das ist einleuchtend! Das Problem bei der Sache ist ja nur, dass ich bisher alles schön per Schleife übergeben konnte, das ist ja so nicht mehr möglich, weil ich ja String-, Float- und andere Feldtypen habe. Gibt es eine Funktion, mit der ich den Tabellentyp ermitteln kann, sodass ich in etwa so was verwenden kann: ?
AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text);
Delphi-Quellcode:
Und wenn ich diese Typumwandlung bei der Parameterzuweisung weglassen - was für (gravierende) Nachteile hat dies? Denn momentan läuft es einwandfrei ohne.
if Typ = Float then AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text)
|
AW: Interne Umwandlung von String zu Float?
probier mal:
Delphi-Quellcode:
Sollte ungefähr so gehen ;)
DBText12.Datasource.Dataset.FieldByName(DBText12.FieldName).FieldType //(oder DataType?)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz