DBGRID und Daten laden

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 366
Registriert: Mo 13. Jan 2025, 12:11

Re: DBGRID und Daten laden

Beitrag von Andy Nightingale »

Hallo Zvoni zwischen durch eine Verständnisfrage. Damit ich nichts falsch mache. Wenn ich per Scroll immer wieder 50 Datensätze lade.- und das von den mindestens ca. 100 Laborassistenten sagen wir 50 auch machen.- ist da die Überlastung nicht schon vorprogrammiert? Weil alle hier sagen: ist doch bescheuert keiner braucht soviel Daten im Frontend.....bei meiner alten Datenbank .-war das aber so.- da die Hauptaufgabe der Arbeit Daten suche ist.-Jetzt meine Frage.-wenn nicht alle Datensätze geladen sind.-wie kann man dann in allen Datensätzen suche?? Vielleicht verstehe ich euch ja nicht richtig.
Ich habe jetzt mal einen Test gemacht.
Wenn ich mit ZQuery in der Eigenschaft SQL folgendes eingebe: SELECT FIRST 100 SKIP 0 * FROM PATIENT ORDER BY PatientID dann ladet die Grid enorm schnell. Dann habe ich einen Button gemacht mit folgender Anweisung:

Code: Alles auswählen

procedure TFPatient.ButtonWeiterClick(Sender: TObject);
var
  OriginalCaption: string;
begin
  // Fenstertitel sichern und ändern
  OriginalCaption := Self.Caption;
  Self.Caption := 'Einen Moment bitte die Daten werden geladen dauert ein paar Sekunden :-)...';
  Application.ProcessMessages; // Sofort anzeigen

  // Query ausführen
  zQueryPatient.Close;
  zQueryPatient.SQL.Text := 'SELECT FIRST 1000000 SKIP 100 * FROM PATIENT ORDER BY PatientID';
  zQueryPatient.Open;

  // Fenstertitel zurücksetzen
  Self.Caption := OriginalCaption;
end;    
....dann ladet es alle Daten und ich kann .--wie es die Leute wollen.-- nach allem suchen und in der Zwischenzeit ist nichts mehr blockiert. Verstehe ich das so richtig? Weil jedes Grid (Tabelle) hat oben an die 10 Suche Buttons die aber in allen Daten suchen müssen.- das ist das wichtigste für meinen Kunden.

Andy Nightingale
Beiträge: 366
Registriert: Mo 13. Jan 2025, 12:11

Re: DBGRID und Daten laden

Beitrag von Andy Nightingale »

charlytango post_id=154842 time=1773388193 user_id=4352

Auch wenn ich ich wiederhole, solche Datenmengen in einem Frontend sind absolut unbrauchbar. Da muss unbedingt der Geschäftsfall bzw Anwendungsfall und die angedachte Nutzung hinterfragt werden.



Hallo Charly Tango,
in meiner letzten integrierten Datenbank Software ist aber genau dies der Fall. Es geht meinem Kunden genau darum aus "Allen"Daten suchen zu können und nicht nur Häppchenweise. Wie kann man in einer Datenbank komplett suchen wenn nicht alle Daten vorhanden sind. In meinem letzten Tool konnte mein Kunde genau das. (Siehe meine jetzige Lösung an Zvoni ).- vielleicht verstehe ich ja die Suchoption bei Lazarus falsch....was wahrscheinlich ist.-aber wie geht es dann??? :D

Benutzeravatar
Zvoni
Beiträge: 586
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: DBGRID und Daten laden

Beitrag von Zvoni »

Dir ist aber klar, dass in deinem zweiten Query, die ersten 100 Sätze fehlen?

Und was verstehst du mit "Suchen"?
geben die Leute in einem Textfeld ein Suchkriterium ein?

Zum Verständnis:
Ein DBGrid ist per se zum Anzeigen (!!) des darunterliegenden DataSets.
In einem DBGrid wird aber nicht gesucht, sondern im darunterliegenden DataSet.

Test:
1) Setze PacketRecords auf 100
2) Führe dein SELECT aus OHNE EINSCHRÄNKUNGEN!! --> SELECT * FROM Tabelle ORDER BY Irgendwas (Kein FIRST, kein SKIP)
Und nein: SELECT * FROM werde ich nicht mehr diskutieren.
3) Führe eine "Suche" auf das Dataset aus, und zwar mit einem Suchkriterium, wo du genau weisst, dass es erst bei Satz 500 auftaucht
Siehe hierzu auch "Locate"-Funktion des Dataset
4) Wird der Satz gefunden? Ja/Nein
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7202
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: DBGRID und Daten laden

Beitrag von af0815 »

Gesucht wird immer über die WHERE Klausel.

Beispiel "SELECT Datum1, DatenFeld1, DatenFeld2 FROM Tabelle WHERE Datenfeld1 like '%was%ich%suche' ORDER BY Datum1 ASC"

Bei höheren Firebird Versionen gibt es IMHO schon die Möglichkeit mit RegEx ähnlichen zu suchen (SIMILAR TO https://www.firebirdsql.org/refdocs/lan ... ar-to.html )

Die meisten großen Serverhersteller haben da so ihre Möglichkeiten eingebaut, natürlich jeder mit einer komplett anderen Syntax :-)
Bsp: https://www.mssqltips.com/sqlservertip/ ... ql-server/

Like ist natürlich auch eine Geschwindigkeitsbremse am Server, daher ist es günstig die where Klausel soweit wie möglich Einschränkend zu verwenden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 366
Registriert: Mo 13. Jan 2025, 12:11

Re: DBGRID und Daten laden

Beitrag von Andy Nightingale »

Test:
1) Setze PacketRecords auf 100
2) Führe dein SELECT aus OHNE EINSCHRÄNKUNGEN!! --> SELECT * FROM Tabelle ORDER BY Irgendwas (Kein FIRST, kein SKIP)
Und nein: SELECT * FROM werde ich nicht mehr diskutieren.
3) Führe eine "Suche" auf das Dataset aus, und zwar mit einem Suchkriterium, wo du genau weisst, dass es erst bei Satz 500 auftaucht
Siehe hierzu auch "Locate"-Funktion des Dataset
4) Wird der Satz gefunden? Ja/Nein
[/quote]

Hallo Zvoni,
komme einfach nicht voran. Es gibt einfach kein Beispiel mit dem Bufdataset....das mit dem was ich ja schon mein Grid und meine Datenbank verbinde zeigt wie das geht...Ich habe beim ZQuery das mit der ZConnection verbunden ist...dann hab ich Datasource das mit ZQuery verbunden ist....und dann hab ich das Grid das mit der Datasource verbunden ist. Das Bufdataset kann ich mit nichts verbinden.-kann zwar PacketRecords auf 100 setzen...aber ist ja mit nichts verbunden. Ich finde das ist der größte Nachteil von Lazarus.-einfach keine umfangreiche Dokumentation und nur sehr wenig Beispiele.. Man verbringt die meiste ZEit eigentlich mit "Ausprobieren". Kannst du mir sagen wie das geht? Grüße

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7202
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: DBGRID und Daten laden

Beitrag von af0815 »

Andy Nightingale hat geschrieben: Fr 13. Mär 2026, 18:23 Ich finde das ist der größte Nachteil von Lazarus.-einfach keine umfangreiche Dokumentation und nur sehr wenig Beispiele.. Man verbringt die meiste ZEit eigentlich mit "Ausprobieren".
Ich vermute anhand deiner Schnippsel, das du ZEOS verwendest. ZEOS ist nicht Lazarus, sondern ein extra eigenständiges Projekt. Die Doku findet man u.a. hier https://sourceforge.net/projects/zeosli ... f/download
Falls meine Annahme richtig ist, würde es auch schön sein, zu wissen ob SQLdb oder ZEOS. Die beiden Produkte unterscheiden sich optisch nicht besonders, dafür aber in der Tiefe.

Nur so nebenbei, wenn man nach Doku sucht. Auch die Lazarus Wiki ist genaugenommen ein wüster Schatz an Information, auch zu Empfehlen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7202
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: DBGRID und Daten laden

Beitrag von af0815 »

Andy Nightingale hat geschrieben: Fr 13. Mär 2026, 13:23 Weil alle hier sagen: ist doch bescheuert keiner braucht soviel Daten im Frontend.....bei meiner alten Datenbank .-war das aber so.- da die Hauptaufgabe der Arbeit Daten suche ist.-Jetzt meine Frage.-wenn nicht alle Datensätze geladen sind.-wie kann man dann in allen Datensätzen suche?? Vielleicht verstehe ich euch ja nicht richtig.
Eine Frage die sich mir stellt - wie wird was gesucht ?

Normalerweise fragt man den User in welchen Feld er suchen will und was er sucht. Damit habe ich 2 Sachen erreicht - Der User sagt mir in welchen Feld in der Datenbank er suchen will und auch was er erwartet zu finden. Vielleicht auch noch einen Zeitraum wo gesucht wird. Weil oft sind die Daten vom vorigen Jahr (oder Monat / Quartal) ja "Schnee von gestern".

Weil man kann auf viele Arten in unterschiedlichen Datentype suchen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten