Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Summen in TClientDataSet (https://www.delphipraxis.net/87566-summen-tclientdataset.html)

Old M 2. Mär 2007 11:13

Datenbank: DBase • Zugriff über: MIDAS TClientDataSet

Summen in TClientDataSet
 
Ich habe in einem CDS 2 Felder (Menge und Artikel).
Da einige Artikel mit der selben Bezeichnung aber verschiedenen Mengen mehrmals auftreten möchte ich die
Gesamtmenge je Artikel berechnen.

Jetzt habe ich bei Neue Felder hinzufügen zwei neue Feldtypen entdeckt INTERNALCALC und SUMMENFELDER


kann man eines dazu benutzen um Summen je Artikel zu berechnen ?
und wenn ja wie :gruebel:

daddy 2. Mär 2007 11:49

Re: Summen in TClientDataSet
 
Wie wäre es mit folgendem Ansatz, bei dem die Daten direkt über das Select ermittelt werden und die Summenspalte somit direkt an das ClientDataSet übermittelt würde:

SQL-Code:
Select Artikel, Menge, (Select Sum(Menge) from Tabelle where ArtikelBez = T.ArtikelBez) as Summe
from Tabelle T where ...

Old M 2. Mär 2007 12:56

Re: Summen in TClientDataSet
 
das geht leider nicht da ich die Werte aus einem Textfile auslese
ist etwa so aufgebaut
Artikel Menge Info
Zusatz
Artikel Menge Info
Zusatz
...
(wenn in zeile[i] ein Artikel gefunden wird dann Append und post ins CDS)
und weil die Daten nur im Speicher liegen kann ich kein select erzeugen.

aber vielleicht sollte ich die Daten erst mal in einen "echten table schreiben"
was mich :wall:

ich frage mich nur was denn das für felder sind die man zusätzlich in Neue Felder
erstellen kann :gruebel:


in der Onlinehilfe habe ich nur häppchen gefunden wenn ich nach InternalCalc gesucht habe
bei felde hinzufügen gar nix in bezug auf InternalCalc und Summenfelder

daddy 2. Mär 2007 14:18

Re: Summen in TClientDataSet
 
Also, Du kannst über den Feld-Editor des ClientDataSets ein Feld (z.B. "MeinFeld" vom Typ Integer) zufügen, legst den Datentyp fest und markierst das Feld als "InternalCalc". Anschließend musst Du im Ereignis "OnCalcFields" des ClientDataSets folgenden Code einfügen:

Delphi-Quellcode:
if ClientDataSet.State = dsInternalCalc then
begin
  ... Wert berechnen ...
  ClientDataSetMeinFeld.AsInteger := <berechneter Wert>;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 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