![]() |
Datenbank: MySQL • Zugriff über: ADO
SQL Datensatz wird nicht richtig ausgelesen
Wie schon aus dem Thema zu erkennen versuche ich grad einen Datensatz aus einer Tabelle zu lesen. Das Datenfeld ist als Float(10,2) formatiert und soll in ein TEdit eingetragen werden. Das, was man is edit eingetragen wird, wird im Frontend eingeschrenkt (zwecks Fehler & so).
Auch wenn ich versuche den Datensatz zu überschreiben (UPDATE - Befehl) wird dieser nicht richtig eingetragen. Um euch die ganze Sache mal ein bischen begreiflicher zu machen schreib ich euch mal den Code dazu auf: Fürs Auslesen:
Delphi-Quellcode:
EdtPreis = TEdit
EdtPreis.Text := FieldByName('preis').AsString;
preis = Feld der Datenbank Aber selbst wenn ich das Feld als ....AsFloat auslese bekomme ich da nicht vernünftiges raus. (z.B. schneidet er bei 2.50 die Null ab und dan steht so da: 2,5) Bein Eintragen bzw. Updaten sihts dan so aus:
Delphi-Quellcode:
Davor halt die richtigen Angaben für die Felder und so weiter.
...+''','''+EdtPreis.Text+''','''+...
|
Re: SQL Datensatz wird nicht richtig ausgelesen
Hallo Barret,
überlege mal, ob du Währungsbeträge nicht lieber in einer Spalte vom Typ MONEY speichern willst - es gibt dann keine Rundungsfehler.
Delphi-Quellcode:
Grüße vom marabu
EdtPreis.Text := CurrToStr(FloatToCurr(FieldByName('preis').AsFloat));
|
Re: SQL Datensatz wird nicht richtig ausgelesen
Schau dir mal das Property DisplayFormat an. Damit wird gesteuert wie Zahlwerte anzuzeigen sind.
Jedoch würde ich lieber die Übergabe in den Queries per Parameter steuen (Stichwort SQL-Injection). Denn dort kannst du konfigurieren das es als Float-Wert ankommen soll. Im Query als String zu übergeben ist eh schlecht. |
Re: SQL Datensatz wird nicht richtig ausgelesen
Ich hab die Sache mal ein bischen umgeschrieben und jetzt siht es so aus:
Delphi-Quellcode:
fürs speichern (wider mit den entsprechenden Parametern davor)
FloatToStrF(...'''+StrToFloat(EdtPreis.Text), ffFixed, 10, 2)'''...
und für das auslesen so:
Delphi-Quellcode:
Beim Anzeigen der Formen (Auslesen) funktioniert jetzt alles so wie es soll aber beim eintragen hab ich immer noch meine Probleme. Ich kann einfach nicht den Wert hinter dem KOMMA speichern.
EdtPreis.Text := FloatToStrF(FieldByName('preis').AsFloat, ffFixed, 10, 2);
|
Re: SQL Datensatz wird nicht richtig ausgelesen
Hi Barret,
wenn du das Feld in der DB als money/currency abändern würdest, würden die Daten auch richtig übernommen/angezeigt werden. Greets |
Re: SQL Datensatz wird nicht richtig ausgelesen
Zitat:
|
Re: SQL Datensatz wird nicht richtig ausgelesen
Das hab ich mir auch schon gedacht. Aber verklicker mal dem User, dass es nich komma sondern Punkt zu nehmen hat. Im Frontent kann man das ja ganz einfach regulieren, was er eintippen darf bzw. kann aber es is doch irgenwie eine abweichung von dem was man im normalen Leben macht.
EDIT: Mit nem Punkt kann ich es auch nicht machen weil, er mir dan anzeigt, dass es kein gültiger Gleitkomma Wert ist. MONEY / CURRENT ???? Also was ihr damit meint is mir schon klar aber einstelen kann ich es nicht in meiner DB (MySql mit MySql-Front). |
Re: SQL Datensatz wird nicht richtig ausgelesen
Kennst du StringReplace?
-> Du nimmst nicht EdtPreis.Text sondern StringReplace(EdtPreis.Text, ',', '.') [Nachtrag] Wobei ich eigentlich denke, dass das nicht dein Problem ist, da StrToFloat usw. alle mit den aktuellen Locale-Einstellungen arbeiten. Problem wird sein, dass die Umwandlung für den SQL-String ein Komma statt eines Punktes erzeugt. |
Re: SQL Datensatz wird nicht richtig ausgelesen
solche Eingabefehler MUSS man abfangen. Ihr würdet euch wundern was manche Benutzer so eintippen :shock:
für das beschriebene Problem z.B. damit:
Delphi-Quellcode:
function ValMaske(t: string): real;
var x,n:integer; g:real; {Konvertiert einen String -auch mit Komma- in einen Real-Typ} {enthaltene Leerzeichen, Unterstriche usw. werden entfernt} begin t := '0' + t; {sonst Laufzeitfehler, wenn Leerstring} while pos(' ',t) > 0 do begin delete(t,pos(' ',t),1); end; while pos('_',t) > 0 do begin delete(t,pos('_',t),1); end; n := pos(',',t); {Komma suchen} if n>0 then t[n] := '.'; {Komma durch Punkt ersetzen} val(t,g,x); {in Fließkomma konvertieren} if x=0 then Result := g else begin MessageDlg('Ungültiges Zahlenformat', mtError, [mbOk], 0); ValMaske := 0; end; end; |
Re: SQL Datensatz wird nicht richtig ausgelesen
Ich hab es jetzt über das "StringReplace" realisiert. Uns alles andere hab ich über das KeyPress-Ereignis eingeschrenkt.
@all: Danke für die hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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