AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi BCD-Überlauf bei Felder mit NULL
Thema durchsuchen
Ansicht
Themen-Optionen

BCD-Überlauf bei Felder mit NULL

Ein Thema von GroHae · begonnen am 27. Aug 2008 · letzter Beitrag vom 20. Okt 2008
 
GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#8

Datentyp Real im Vergleich zu Decimal

  Alt 20. Okt 2008, 11:31
weil ich gerade 4 Stunden für die Fehlersuche benötigt habe:

Auch wenn die Daten in der Tabelle keine NULL enthalten, habe ich das Problem, dass bei Summen im SQL Befehl Vorsicht ratsam ist:

Ist der Datentyp des Feldes über das man summiert Real würde folgendes fehlerfrei laufen auch wenn ich durch die WHERE Einschränkung keine Daten zurück bekomme

Delphi-Quellcode:
  // SQL Befehl
  MyCommandVorbereitung;
  with MyCommand do
  begin
    Text := 'SELECT SUM(Nettogewicht) AS Sum_Nettogewicht ' +
      ' FROM '+ GetTblName + ' WHERE ' +
      '(UnternehmenNr_ID = ?) AND ' +
      '(Belegdatum BETWEEN ? AND ?) AND ' +
      '(Markenstamm = ?)';
    AddParameterInt32(iUnternehmen);
    AddParameterDate(iVonDatum);
    AddParameterDate(iBisDatum);
    AddParameterString(iMarke);
  end;
  MyCommandExecuteQuery;

  // Daten holen
  ioGewicht := 0;
  while Next do
  begin
    ioGewicht := MyReader.Value['Sum_Nettogewicht'].GetDouble; // hier wird 0 zurückgegeben wenn KEINE Daten da sind.
  end;

Ist der Datentyp des Feldes über das man summiert Decimal würde folgendes NICHT fehlerfrei laufen wenn ich durch die WHERE Einschränkung keine Daten zurück bekomme



Delphi-Quellcode:

  // SQL Befehl
  MyCommandVorbereitung;
  with MyCommand do
  begin
    Text := 'SELECT SUM(Nettogewicht) AS Sum_Nettogewicht ' +
      ' FROM '+ GetTblName + ' WHERE ' +
      '(UnternehmenNr_ID = ?) AND ' +
      '(Belegdatum BETWEEN ? AND ?) AND ' +
      '(Markenstamm = ?)';
    AddParameterInt32(iUnternehmen);
    AddParameterDate(iVonDatum);
    AddParameterDate(iBisDatum);
    AddParameterString(iMarke);
  end;
  MyCommandExecuteQuery;

  // Daten holen
  ioGewicht := 0;
  while Next do
  begin
    ioGewicht := BcdToDouble(MyReader.Value['Sum_Nettogewicht'].GetBcd); // Fehler: "BCD-Überlauf" möglich
  end;
In dem Moment wo GetBcd aufgerufen wird bekomme ich die Meldung "BCD-Überlauf"

ich muss also in diesem Fall mit


Delphi-Quellcode:
    Text := 'SELECT ISNULL(SUM(Nettogewicht),0) AS Sum_Nettogewicht, ' +
      'ISNULL(SUM(BetragMW),0) AS Sum_BetragMW FROM '+ GetTblName + ' WHERE ' +
      '(UnternehmenNr_ID = ?) AND ' +
      '(Belegdatum BETWEEN ? AND ?) AND ' +
      '(Markenstamm = ?)';
arbeiten. Dann klapp es immer.


Oder anders gesagt: Nutze immer ISNULL bei Summenberechnung
Grüße

Thomas
  Mit Zitat antworten Zitat
 


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:15 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