Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Datensatz wird nicht richtig ausgelesen (https://www.delphipraxis.net/48648-sql-datensatz-wird-nicht-richtig-ausgelesen.html)

Barret 28. Jun 2005 14:54

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.Text := FieldByName('preis').AsString;
EdtPreis = TEdit
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:
...+''','''+EdtPreis.Text+''','''+...
Davor halt die richtigen Angaben für die Felder und so weiter.

marabu 28. Jun 2005 15:56

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:
  EdtPreis.Text := CurrToStr(FloatToCurr(FieldByName('preis').AsFloat));
Grüße vom marabu

Bernhard Geyer 28. Jun 2005 16:02

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.

Barret 29. Jun 2005 08:04

Re: SQL Datensatz wird nicht richtig ausgelesen
 
Ich hab die Sache mal ein bischen umgeschrieben und jetzt siht es so aus:
Delphi-Quellcode:
FloatToStrF(...'''+StrToFloat(EdtPreis.Text), ffFixed, 10, 2)'''...
fürs speichern (wider mit den entsprechenden Parametern davor)
und für das auslesen so:
Delphi-Quellcode:
EdtPreis.Text := FloatToStrF(FieldByName('preis').AsFloat, ffFixed, 10, 2);
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.

Luciano 29. Jun 2005 08:18

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

Flocke 29. Jun 2005 08:48

Re: SQL Datensatz wird nicht richtig ausgelesen
 
Zitat:

Zitat von Barret
Ich kann einfach nicht den Wert hinter dem KOMMA speichern.

Könnte das das Problem sein (KOMMA statt PUNKT)?

Barret 29. Jun 2005 08:52

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).

Flocke 29. Jun 2005 08:55

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.

Ulf346C 29. Jun 2005 09:03

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;

Barret 29. Jun 2005 09:19

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