TDBGrid Summenspalte führen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

TDBGrid Summenspalte führen

Beitrag von af0815 »

Ich habe ein DBGrid welches aus einer DB (ua. SQLite3) Daten bezieht. In einer Spalte sind Werte (positiv und negativ) die Aufsummiert gehören und zwar je Reihe.

Beispiel ist ein Kontoauszug, wo ich Buchungszeilen habe und am Ende jeder Zeile die Balance des Kontos sehe.

Muß ich das programmtechnisch per Cursor (DB) oder durch iterieren durch das Grid lösen oder kann ich das am Dataset oder Grid direkt (einfach) lösen?

af
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TDBGrid Summenspalte führen

Beitrag von Michl »

In der Hoffnung, dass ich die Frage richtig verstanden habe: Mir sagt mein Bauchgefühl, dass die Abfrage (Summierung) per SQL schneller (da von Datenbank direkt bezogen) schneller aber weniger flexibel ist. Somit ist die Frage eher eine des persönlichen Geschmacks oder Anspruchs. Ich würde Abfragen mittels "SQL direkt" bevorzugen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TDBGrid Summenspalte führen

Beitrag von af0815 »

Anbei ein Beispiel wie es aussehen soll.
Dateianhänge
Beispiel für Summenspalte
Beispiel für Summenspalte
Spalte.JPG (18.19 KiB) 1158 mal betrachtet
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TDBGrid Summenspalte führen

Beitrag von Christian »

Mein Bauchgefühl sagt das Gegenteil. Der Server braucht die selbe Rechenkapazität dafür wenns richtig implementiert ist zudem muss die Abfrage und die Antwort übers Netzwerk. Warum sollte das aufm Server schneller sein ? Weiterhin blockiert man auf den Server dabei resourcen die andere Nutzer vllt sinnvoller verwenden könnten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TDBGrid Summenspalte führen

Beitrag von af0815 »

Michl hat geschrieben:... Mir sagt mein Bauchgefühl, dass die Abfrage (Summierung) per SQL schneller...
Kein Thema, nur die Summenspalte kann ich nicht auf SQL-Ebene abhandeln (ausser serverseitiges Programmieren). Da die Datenbank auf Desktop beschränkt sein soll und womöglich SQL-Dialektunabhängig sein soll, ist das für mich aktuell nicht so zu machen. Ich habe kein Problem mit Datenbanken, Datenmengen etc. nur mit der (selbstgestellten) Aufgabe. Ist also KEINE Aufgabe für die Schule ;-)

Momentan ist mein Ansatz, das ganze doch nicht mit DBGrid zu machen sondern nur mit Grid und das Datenset programmtechnisch zu befüllen und dabei die Summenspalte gleich mitzuberechnen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: TDBGrid Summenspalte führen

Beitrag von wp_xyz »

Dieses Beispiel dürfte ähnlich zu deinem Problem sein: http://www.office-loesung.de/ftopic305290_0_0_asc.php
Allerdings wird diese SQL-Lösung performance-mäßig weit hinter einer lokalen Berechnung zurückbleiben.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TDBGrid Summenspalte führen

Beitrag von af0815 »

Korrekt, bin momentan bei folgenden Statement gelandet. Halt das übliche mit einer Selbstverknüpfung.

Code: Alles auswählen

 
SELECT v.TransID,
             v.TransCode,
             v.TransDate,
             v.STATUS,
             v.Notes,
             v.ToTransAmount,
             v.CategID,
             v.Transactionnumber,
             v.rowid,
             SUM(a.ToTransAmount) AS RunningTotal
             FROM CHECKINGACCOUNT_V1 v CROSS JOIN CHECKINGACCOUNT_V1 a
             WHERE (a.rowid <= v.rowid)
             GROUP BY v.rowid, v.ToTransAmount
             ORDER BY  v.rowid , v.ToTransAmount  
 
Macht mir aber momentan Ärger mit dem Speicher. Ist auch vollkommen klar wieso es Ärger mit der Performance UND dem Speicher gibt. Der Ansatz ist lieb aber langfristig unbrauchbar. Das war mir aber vorher schon klar. Wird also NICHT weiterverfolgt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten