AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Interne Umwandlung von String zu Float?
Thema durchsuchen
Ansicht
Themen-Optionen

Interne Umwandlung von String zu Float?

Ein Thema von Mysterio08 · begonnen am 29. Jun 2010 · letzter Beitrag vom 29. Jun 2010
Antwort Antwort
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#1

Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 10:55
Datenbank: MySQL • Version: 5,1 • Zugriff über: OBDC
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.
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 11:09
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ß
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 11:15
Ein Float ist ein Float, da gibt es keinen Punkt und kein Komma. Wie sieht denn das Insert-Statement aus?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 11:58
Hallo,

du darfst den Float-Wert nicht per AsString übergeben,
sondern als AsFloat.

D.h. Parameter benutzen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:03
[MySQL][ODBC 5.1 Driver][mysqld-5.1.47-community]
Verwendest du evtl. auch noch BDE oder ADO? Falls ja: in den untiefen der MySQL-Webseite steht Beschrieben wie man mit diesen Zugriffswegen halbwegs auf MySQL zugreifen kann (Einstellungen im MyODBC-Treiber).

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!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#6

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:17
@angos:
Zitat:
"Das liegt daran, dass StrToFloat in den Wert mit Komma zurückgibt, das DBMS aber einen Punkt als Trennzeichen verlangt."
Das habe ich mir schon gedacht.
Zitat:
Du musst also nur das Komma durch den Punkt ersetzen.
Das habe ich jetzt gemacht mit der "Stringbearbeitung", einfach nach dem Komma und gesucht, und dann die Prozeduren DELETE und INSERT benutzt. Das klappt, danke!


@DeddyH:
Zitat:
Ein Float ist ein Float, da gibt es keinen Punkt und kein Komma. Wie sieht denn das Insert-Statement aus?
Mhm, da scheine ich deine ersten Satz misszuverstehen: Float = Gleitkommawert, also zwangsläufig mit Punkt und/oder Komma. Insert-Statement:

@hoika:
Zitat:
du darfst den Float-Wert nicht per AsString übergeben,
sondern als AsFloat.

D.h. Parameter benutzen.
Parameter benutze ich natürlich, mein SQL-String sieht gekürzt so aus:
Sql := 'UPDATE auftraggeber SET ... Honorarsatz=:12 ... WHERE AuftraggeberID= :ID'; Und die Parameter-Zuweisung so:
AdoQuery3.Parameters.ParamByName('12').Value := DBText12.Text; 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:
for i := 2 to Max do Texts[i] := (FindComponent('DBEdit' + IntToStr(i)) as TDBEdit).Text; Und dann fülle ich die Parameter auch per Schleife:
for i := 2 to Max do AdoQuery3.Parameters.ParamByName(IntToStr(i)).Value := Texts[i]; 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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:33
Und dann fülle ich die Parameter auch per Schleife:
for i := 2 to Max do AdoQuery3.Parameters.ParamByName(IntToStr(i)).Value := Texts[i]; 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.
Weis den Wert erstmal einer Delphi-Float-Variable zu befor du es an Value übergibst.
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:34
Nicht die Float hat ein Trennzeichen, sondern deren Darstellung. Und Du übergibst einen String an ein Float-Feld. Wie ist es so?
AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#9

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:41
AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text); 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: ?

if Typ = Float then AdoQuery3.Parameters.ParamByName('12').Value := StrToFloat(DBText12.Text) Und wenn ich diese Typumwandlung bei der Parameterzuweisung weglassen - was für (gravierende) Nachteile hat dies? Denn momentan läuft es einwandfrei ohne.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#10

AW: Interne Umwandlung von String zu Float?

  Alt 29. Jun 2010, 12:52
probier mal:

DBText12.Datasource.Dataset.FieldByName(DBText12.FieldName).FieldType //(oder DataType?) Sollte ungefähr so gehen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz