Hallo zusammen,
Ich greife via DBX auf meine
MSSQL Tabellen zu
Delphi-Quellcode:
MyConnection : TDBXConnection;
// Die DB Verbindung (wird übergeben)
MyCommand : TDBXCommand;
// Der Befehl (wird erstellt)
MyReader : TDBXReader;
// Der Datensatzzeiger (wird erstellt)
Ich habe schon öfters Probleme gehabt, wenn ich auf Tabellen zugreife und Werte in der Tabelle den Wert NULL haben.
Heute wieder.
Ich will folgenden Befehl abschicken:
Delphi-Quellcode:
procedure TTblVkUmsatzMaWi_FV.SelGruppiertAllesEinesMonats(iUnternehmen, iMonat, iJahr: integer);
begin
with MyCommand do
begin
Text := 'SELECT ' +
'SUM(BetragMW) AS Sum_BetragMW, ' +
'SUM(MengeBasis) AS Sum_MengeBasis, ' +
'SUM(Nettogewicht) AS Sum_Nettogewicht, ' +
'SUM(Rohstoffeinsatz) AS Sum_Rohstoffeinsatz, ' +
'SUM(Verpackungseinsatz) AS Sum_Verpackungseinsatz, ' +
'SUM(Prozesskosten) AS Sum_Prozesskosten, ' +
'SUM(Energiekosten) AS Sum_Energiekosten, ' +
'SUM(Entsorgungsgebuehr) AS Sum_Entsorgungsgebuehr, ' +
'UnternehmenNr_ID, VerkanDebNr, Nr, Debitorhauptgruppencode, Debitoruntergruppencode, KostentraegerCode' +
' FROM '+ GetTblName + ' WHERE ' +
'(UnternehmenNr_ID = ?) AND ' +
'(Buchungsdatum BETWEEN ? and ?) AND' +
'(Belegart <> '''') ' + // NICHT FRACHTKOSTEN --> RECHNUNG + GUTSCHRIFT
'GROUP BY UnternehmenNr_ID, VerkanDebNr, Nr, Debitorhauptgruppencode, Debitoruntergruppencode, KostentraegerCode';
AddParameterInt32(iUnternehmen);
AddParameterDate(GetVonDatumAusMonatUndJahr(iMonat,iJahr));
AddParameterDate(GetBisDatumAusMonatUndJahr(iMonat,iJahr));
end;
MyReader := MyCommand.ExecuteQuery;
end;
wenn ich dann später die Daten abgreife:
Delphi-Quellcode:
with MyCommand, iRec do
begin
BetragMW := BcdToDouble(MyReader.Value['Sum_BetragMW'].GetBcd); // Summe!
MengeBasis := BcdToDouble(MyReader.Value['Sum_MengeBasis'].GetBcd); // Summe!
Nettogewicht := BcdToDouble(MyReader.Value['Sum_Nettogewicht'].GetBcd); // Summe!
Rohstoffeinsatz := BcdToDouble(MyReader.Value['Sum_Rohstoffeinsatz'].GetBcd); // Summe!
Verpackungseinsatz := BcdToDouble(MyReader.Value['Sum_Verpackungseinsatz'].GetBcd); // Summe!
Prozesskosten := BcdToDouble(MyReader.Value['Sum_Prozesskosten'].GetBcd); // Summe!
Energiekosten := BcdToDouble(MyReader.Value['Sum_Energiekosten'].GetBcd); // Summe!
Entsorgungsgebuehr := BcdToDouble(MyReader.Value['Sum_Entsorgungsgebuehr'].GetBcd); // Summe!
UnternehmenNr_ID := MyReader.Value['UnternehmenNr_ID'].GetInt32;
Debitorhauptgruppencode := Trim(MyReader.Value['Debitorhauptgruppencode'].GetAnsiString);
Debitoruntergruppencode := Trim(MyReader.Value['Debitoruntergruppencode'].GetAnsiString);
VerkanDebNr := Trim(MyReader.Value['VerkanDebNr'].GetAnsiString);
KostentraegerCode := Trim(MyReader.Value['KostentraegerCode'].GetAnsiString);
Nr := Trim(MyReader.Value['Nr'].GetAnsiString);
end;
bekomme ich bei
Rohstoffeinsatz := BcdToDouble(MyReader.Value['Sum_Rohstoffeinsatz'].GetBcd); // Summe!
eine BCD-überlauf.
Ich bin dann hergegangen und habe auf der
SQL Console mit
SQL-Code:
UPDATE VkUmsatzMaWi_FV
SET Prozesskosten = 0
WHERE (UnternehmenNr_ID = 0) AND (Prozesskosten IS NULL)
Alle Felder auf 0 gesetzt welche vorher NULL waren. und danach hat es geklappt.
Aber das ist natürlich keine Lösung!
Weiß jemand wo das Problem liegt?
Grüße
Thomas