![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS
Rechnen mit Numeric Werten aus DB
Hallo zusammen,
wie muss ich es anstellen das ich mit Numeric Werten aus einer Datenbank rechnen kann. Das Problem ist, das die Werte immer mit Komma statt einem Punkt ausgegeben werden, also zum Beispiel 4,879 statt 4.879. Im Moment mache ich das noch so:
Delphi-Quellcode:
Soweit klappt ja alles, bis auf das es ziemlich umständlich ist.
//Wert 1
bLastScale := ZQContest.FieldByName('bLastScale').AsString; //Wert 2 bFirstScale := ZQContest.FieldByName('bFirstScale').AsString; //**Kommas durch Punkt ersetzen StringReplace(bLastScale, ',', '.', [rfReplaceAll]); StringReplace(bFirstScale, ',', '.', [rfReplaceAll]); //Wert 1 - Wert 2 menge := (StrToFloat(bFirstScale) - StrToFloat(bLastScale)); Wenn ich aber jetzt das Ergebnis wieder in die Datenbank in ein Numericfeld zurückschreiben möchte, dann gibt es Probleme, Stacoverflow und so.
Delphi-Quellcode:
Jetzt kommt aber eine Meldung, "4.879' is not a valid floationg point value.
//Punkt durch komma ersetzen, sonnst Stack overflow
mengeStr := StringReplace(FloatToStr(menge), ',', '.', [rfReplaceAll]); menge := StrToFloat(mengeStr); ZQContest.RequestLive := True; ZQContest.FieldByName('amount').AsFloat := menge; ZQContest.RequestLive := False; panAmount.Caption := ZQContest.FieldByName('amount').AsString; panContestTotalAmount.Caption := ZQContest.FieldByName('amount').AsString; Kann mir bitte jemand erklären wie ich richtig vorgehen muss?? Ich danke schon mal im Voraus |
Re: Rechnen mit Numeric Werten aus DB
Warum ersetzt du das Komma mit einem Punkt?
|
Re: Rechnen mit Numeric Werten aus DB
Warum behandelst du die Werte als String. Es sind doch numerische Werte, also ruf sie auch so ab. Die Konvertierung in und von Strings zurück in numerische Werte ist nicht eindeutig, wird durch eine Vielzahl von Einstellungen in Datenbank, System und Delphicompiler beinflusst, und schreit nach Problemen únd unnötiger Arbeit.
Delphi stellt hierfür ja auch die benötigten Abrufmethoden zur Verfügung: asfloat, asinteger, ascurrency ... |
Re: Rechnen mit Numeric Werten aus DB
Danke erst mal für die schnellen Antworten.
Da habt ihr schon recht, das ganze ist schon überflüssig, da hab ich wohl zu viel rumprobiert, weil es einfach nicht so klappt, wie es soll. Ich hab die Berechnung noch einmal geändert:
Delphi-Quellcode:
Möchte ich aber jetzt das Ergebnis wieder in die Datenbank schreiben,
menge := dmSnuffer.ZQContest.FieldByName('bFirstScale').AsFloat -
dmSnuffer.ZQContest.FieldByName('bLastScale').AsFloat; kommt eine Meldung über einen Stack overflow.
Delphi-Quellcode:
Wo könnte da das Problem liegen?
ZQContest.RequestLive := True;
ZQContest.FieldByName('amount').AsFloat := menge; ZQContest.RequestLive := False; |
Re: Rechnen mit Numeric Werten aus DB
Hallo,
RequestLive musst du schon vor dem Öffnen und Auslesen der Query auf True setzen - wenn deine Query das zulässt. Um Feldwerte zu aktualisieren gehst du dann so vor:
Delphi-Quellcode:
Grüße vom marabu
with Query do
begin Edit; FieldByName('amount').AsFloat := menge; // ... try Post except Cancel; end; end; |
Re: Rechnen mit Numeric Werten aus DB
Hallo,
welchen Typ hat das Feld in der Tabelle ? Falls du Numeric(x,y) nimmst, ist das der Fehlöer. Double Precision musst du nehmen. Numeric-Typen werden von Firebird bis x=8 als Integer gespeichert. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 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