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
TDBGrid Summenspalte führen
- 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TDBGrid Summenspalte führen
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;
- 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
Anbei ein Beispiel wie es aussehen soll.
- Dateianhänge
-
- 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).
-
- 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
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/
- 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
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 SchuleMichl hat geschrieben:... Mir sagt mein Bauchgefühl, dass die Abfrage (Summierung) per SQL schneller...

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).
Re: TDBGrid Summenspalte führen
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.
Allerdings wird diese SQL-Lösung performance-mäßig weit hinter einer lokalen Berechnung zurückbleiben.
- 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
Korrekt, bin momentan bei folgenden Statement gelandet. Halt das übliche mit einer Selbstverknüpfung.
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.
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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).