AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Rechnen mit Numeric Werten aus DB
Thema durchsuchen
Ansicht
Themen-Optionen

Rechnen mit Numeric Werten aus DB

Ein Thema von TankWart · begonnen am 18. Jan 2007 · letzter Beitrag vom 22. Jan 2007
Antwort Antwort
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#1

Rechnen mit Numeric Werten aus DB

  Alt 18. Jan 2007, 12:01
Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS
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:
//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));
Soweit klappt ja alles, bis auf das es ziemlich umständlich ist.

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:
//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;
Jetzt kommt aber eine Meldung, "4.879' is not a valid floationg point value.

Kann mir bitte jemand erklären wie ich richtig vorgehen muss??

Ich danke schon mal im Voraus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Rechnen mit Numeric Werten aus DB

  Alt 18. Jan 2007, 12:05
Warum ersetzt du das Komma mit einem Punkt?
Markus Kinzler
  Mit Zitat antworten Zitat
peteress

Registriert seit: 6. Sep 2004
49 Beiträge
 
#3

Re: Rechnen mit Numeric Werten aus DB

  Alt 18. Jan 2007, 12:41
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 ...
  Mit Zitat antworten Zitat
TankWart

Registriert seit: 25. Feb 2005
46 Beiträge
 
#4

Re: Rechnen mit Numeric Werten aus DB

  Alt 18. Jan 2007, 12:55
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:
menge := dmSnuffer.ZQContest.FieldByName('bFirstScale').AsFloat -
         dmSnuffer.ZQContest.FieldByName('bLastScale').AsFloat;
Möchte ich aber jetzt das Ergebnis wieder in die Datenbank schreiben,
kommt eine Meldung über einen Stack overflow.
Delphi-Quellcode:
ZQContest.RequestLive := True;
ZQContest.FieldByName('amount').AsFloat := menge;
ZQContest.RequestLive := False;
Wo könnte da das Problem liegen?
  Mit Zitat antworten Zitat
marabu

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

Re: Rechnen mit Numeric Werten aus DB

  Alt 18. Jan 2007, 14:57
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:
with Query do
begin
  Edit;
  FieldByName('amount').AsFloat := menge;
  // ...
  try
    Post
  except
    Cancel;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
hoika

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

Re: Rechnen mit Numeric Werten aus DB

  Alt 22. Jan 2007, 11:02
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
Heiko
  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 10:01 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