AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Datensatz wird nicht richtig ausgelesen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Datensatz wird nicht richtig ausgelesen

Ein Thema von Barret · begonnen am 28. Jun 2005 · letzter Beitrag vom 29. Jun 2005
Antwort Antwort
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#1

SQL Datensatz wird nicht richtig ausgelesen

  Alt 28. Jun 2005, 15:54
Datenbank: MySQL • Zugriff über: ADO
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:
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:
...+''','''+EdtPreis.Text+''','''+... Davor halt die richtigen Angaben für die Felder und so weiter.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 28. Jun 2005, 16:56
Hallo Barret,

überlege mal, ob du Währungsbeträge nicht lieber in einer Spalte vom Typ MONEY speichern willst - es gibt dann keine Rundungsfehler.

  EdtPreis.Text := CurrToStr(FloatToCurr(FieldByName('preis').AsFloat)); Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 28. Jun 2005, 17:02
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#4

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 09:04
Ich hab die Sache mal ein bischen umgeschrieben und jetzt siht es so aus:
FloatToStrF(...'''+StrToFloat(EdtPreis.Text), ffFixed, 10, 2)'''... fürs speichern (wider mit den entsprechenden Parametern davor)
und für das auslesen so:
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.
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 09:18
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
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 09:48
Zitat von Barret:
Ich kann einfach nicht den Wert hinter dem KOMMA speichern.
Könnte das das Problem sein (KOMMA statt PUNKT)?
Volker
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#7

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 09:52
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).
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 09:55
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.
Volker
  Mit Zitat antworten Zitat
Ulf346C

Registriert seit: 15. Okt 2003
Ort: Magdeburg
85 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 10:03
solche Eingabefehler MUSS man abfangen. Ihr würdet euch wundern was manche Benutzer so eintippen

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;
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#10

Re: SQL Datensatz wird nicht richtig ausgelesen

  Alt 29. Jun 2005, 10:19
Ich hab es jetzt über das "StringReplace" realisiert. Uns alles andere hab ich über das KeyPress-Ereignis eingeschrenkt.

@all: Danke für die hilfe.
  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 18:59 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