TDBGrid daten werden mehrfach angezeigt

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Luckner »

Jetzt habe ich gelesen, dass die Procedure OnCalcFields mit einigen wenigen Datenbanken wohl Probleme hat. Möglicherweise auch mit Firebird 2.5. Weiß Jemand, welche Möglichkeit besteht die fortlaufende Nummerierung der Datensätze in ein TDBGrid einzutragen. Mit einer while-Schleife?

Gruß, Luckner

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Joh »

Wenn du das Projekt eh gerade umstellst...
Was hindert dich, eine aktuelle Firebird-Version (4.03) zu testen?
Das letzte Release von Firebird 2.5 scheint über 4 Jahre auf dem Buckel zu haben. => Final release: v2.5.9 (End of Series) June 24, 2019
just my two Beer

Soner
Beiträge: 624
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Soner »

Ich verwende auch immer noch FB 2.5, ich glaube es hat einen Bug manchmal zeigt es Einträge doppelt an obwohl es eindeutig ist. Das ist extrem selten meistens ist die SQL-Anweisung fehlerhaft.
Ich füge bei so einem Fall als erstes "distinct" nach der Select-Anweisung. Wenn das nicht hilft baue ich SQL um bis es nicht mehr doppelt angezeigt wird.

Versuche OnCalcFields zu meiden, sie werden bei jedem Scrollen neu berechnet. Ich mache dafür so etwas:

Code: Alles auswählen

SELECT *, 0 AS ONCALCFIELDXY FROM TABLE X WHERE ...
Dann ändere ich den Wert von ONCALCFIELDXY wenn es benötigt wird. Dein Query muss natürlich CachedUpdates unterstützen.
Man muss natürlich beim Feld "ONCALCFIELDXY" die TField.ProviderFlags anpassen, damit es nicht als Änderung des Datensatzes angesehen wird oder gleich TField.Fildkind zu fkInternalCalc ändern.
fkInternalCalc wird von SQLDB ignoriert(Stand ca 2018) ZEOS unterstützt es.

Was programmierst du Sportstatistik-Programm?
Ich hatte auch so etwas mit Delphi programmiert. Ich wollte es auch zu Lazarus konvertieren, aber hatte nie Zeit dazu.

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Luckner »

Hallo Soner,

ich werde mal FB 4.03 ausprobieren. Mal Schauen, welche Probleme ich dort bekomme. Was mich jedoch stutzig macht, dass ich das Problem im April hatte und irgendwie gelöst hatte. Leider ohne Dokumentation. Echt blöd von mir. Meine laufenden Anwendungn, die ich für unsere Fa. programmiert hatte, laufen gut mit FB 1.5.. . Auch dort ohne Probleme. Jetzt fällt mir ein, ich könnte einen Test mit der FB 1.5.. machen. Da ich nur standart SQL benutze, dürfte es funktionieren.

Diese Anwendung ist für mein Tischtennis-Verein und ist eine Hilfe für die Mannschaftsaufstellung. Existiert schon seit einigen Jahren und ist mit Delphi programmiert. Jetzt wollte ich, mit einigen Verbesserungen nach Lazarus portieren.

Gruß, Luckner

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von charlytango »

Luckner hat geschrieben:
So 15. Okt 2023, 18:18
Werde jetzt mal rumschauen, ob Firebird da eine Möglichkeit bietet.
Liest du auch was ich schreibe? Ich habe dir hier schon zwei Möglichkeiten gelinked um das DB-Seitig zu lösen. Obwohl du noch immer nicht explizit gesagt hast ob du tartsächlich eine Durchnumerierung der Zeilen erreichen willst.

Im gleichen Post habe ich dir beschrieben wie du SQL-Statements monitierst die an die DB geschickt werden. Hast du das gegenständliche Statement schon mal von außerhalb des Lazarus-Programmes gegen die DB getestet um zu ermitteln ob das Problem nicht auch in der DB liegen könnte ?
Luckner hat geschrieben:
Mo 16. Okt 2023, 09:35
Jetzt fällt mir ein, ich könnte einen Test mit der FB 1.5.. machen. Da ich nur standart SQL benutze, dürfte es funktionieren.
Diese Anwendung ist für mein Tischtennis-Verein und ist eine Hilfe für die Mannschaftsaufstellung
Teste doch einfach mal SQLite, das sollte für den Verein allemal reichen und braucht bloß die richtige DLL um zu funktionieren.

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Luckner »

hallo charlytango,
ich lese was Du schreibst. Diese kleine Anwendung für meinen Verein, ist auch ein Test der Möglichkeit, die anderen Programme, die ich unter Delphi geschrieben habe, ebenfalls unter Lazarus zu konvertieren und da weiter zu machen. Deshalb Firebird weiter als Server. Desgleichen überlege ich, wenn ich hier die post's lese, wie groß der Aufwand bei den anderen Programmen wäre. Für mich sind, bei dem gesamten Aufwand den ich dann betreiben muß, die simplen Wege interessanter. Hier überlege ich, welche Probleme erwarten mich noch, wenn schon die gewöhnlichen Routinen nicht funktionieren.

Ah ja, es soll nur eine einfache Durchnummerierung der Zeilen in DBGrid sein.

Gruß, Luckner

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Luckner »

Hallo,
habe gerade die FB 4.03 installiert und die alte Datenbank in diese eingespielt und das Ergebnis ist, dass der Fehler identisch ist. An der FB Version kann es dann nicht mehr liegen, weil unter Delphi funktioniert es auch mit FB 2.5. :oops:

Gruß, Luckner

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von gladio »

Werden denn die Datensätze so angezeigt, wie sie sollen, wenn du den Firlefanz mit der Nummerierung über OnCalcField weg lässt?
Im Normalfall macht ein DBGrid genau das, was es soll. Meine Erfahrung.
Es werden die Datensätze angezeigt, die in der Datenquelle bereit gestellt werden.

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Luckner »

Hallo gladio,

wenn ich den Firlefanz mit der Nummerierung über OnCalcField weg lasse, dann sieht der Inhalt von dem Grid korrekt aus.

gruß, Luckner

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von Joh »

Also, noch mal von ganz vorne:

du hast eine Tabelle und rufst die Felder ab mit

Code: Alles auswählen

 DataModuleTT.ZQueryMannschaftGrid.SQL.Add('select ID, NAME FROM MANNSCHAFT ORDER BY NAME');
Danach gehst du hin und weist einem Feld deines Grid

Code: Alles auswählen

ZQueryMannschaftGrid.FieldValues['NR'] := ZQueryMannschaftGrid.RecNo;
die RecordNumber zu...

Was ist der Sinn des ganzen? Möchtest du da eine (theoretische) Reihenfolge nach dem Namen einbringen, oder nur einen Zähler?

Wenn du das ganze selber Firlefanz nennst, kannst du es auch weglassen.
just my two Beer

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TDBGrid daten werden mehrfach angezeigt

Beitrag von charlytango »

Luckner hat geschrieben:
Mo 16. Okt 2023, 13:35
wie groß der Aufwand bei den anderen Programmen wäre
Der Aufwand ist deswegen so groß weil du nur Teilinformationen gibst und auf Fragen nicht antwortest.
Der Empfehlung ein Beispielprojekt zu zeigen bist du auch nicht nachgekommen (Wenn dann mit SQLite, denn nicht jeder will sich FB auf den Rechner holen)
Luckner hat geschrieben:
Mo 16. Okt 2023, 13:35
die simplen Wege interessanter
Was bitte ist simpler als das SQL Statement anzupassen, zumal FB die gesuchte Funktionalität ja anbietet?

Code: Alles auswählen

select
    id,
    salary,
    row_number() over (order by salary),
  from employee
  order by salary;
Ach ja -- ich bin raus

Antworten