Entwickler-Ecke
Datenbanken - ADOQuery aus Datei gefüllt, dann damit arbeiten
J.Borchert - So 25.08.19 12:23
Titel: ADOQuery aus Datei gefüllt, dann damit arbeiten
Hallo zusammen,
ich habe in meinem Programm einen Offline-Modus. Hier werden die Daten der letzen Sitzung, welche zuvor beim Beenden immer in einer Datei gespeichert werden, geladen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if fileexists('last_Funk.db') then WITH ADOQuery16 DO BEGIN LoadFromFile('last_Funk.db'); Last; First; LabeL509.Caption := IntToStr(RecordCount); END; |
Jetzt wird die gesamte Datenmenge im verknüpften DBGrid angezeigt.
Danach möchte ich mit einem Select die Datenmenge filtern, aber ich habe irgendwas vergessen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| with ADOQuery16 do begin Close; SQL.Clear; SQL.Text := 'SELECT * FROM FUNK'; Prepared := False; Open; Last; First; LabeL509.Caption := IntToStr(RecordCount); end; |
Jetzt wird nichts mehr im verknüpften DBGrid angezeigt...und ich weiß nicht warum ?
Th69 - So 25.08.19 13:18
Du solltest einen SQL-Fehler zur Laufzeit erhalten, denn der Filter muß in einfachen Anführungszeichen stehen.
J.Borchert - So 25.08.19 14:40
Th69 hat folgendes geschrieben : |
Du solltest einen SQL-Fehler zur Laufzeit erhalten, denn der Filter muß in einfachen Anführungszeichen stehen. |
Sorry, das ist es nicht, ich habe das Select hier nur falsch zusammenkopiert. Es muß so sein:
Delphi-Quelltext
1:
| SQL.Text := 'SELECT * FROM FUNK WHERE TEAM LIKE ''%GSM%'' ORDER BY User'; |
Wenn ich die Datenbankverbindung habe, geht es und es kommt kein SQL-Fehler.
J.Borchert - So 25.08.19 14:57
Also so wie jetzt oben gekürzt kommt ein SQL-Fehler:
Quelltext
1: 2: 3: 4: 5:
| --------------------------- Die Datei SELECT * FROM FUNK
kann nicht gefunden werden. --------------------------- |
Holgerx - So 25.08.19 20:16
Hmm..
Delphi-Quelltext
1: 2:
| WITH ADOQuery16 DO BEGIN LoadFromFile('last_Funk.db'); |
-> Die Datenmenge wird ins Query geladen und 'geöffnet'...
Delphi-Quelltext
1: 2:
| with ADOQuery16 do begin Close; |
-> Die Datenmenge wird geschlossen und deren Inhalt 'weggeworfen'....
Ein Filtern auf einer geöffneten Datenmenge ohne DB geht nur noch mit '.Filter' des ADOQuery.
Wenn die 'Offline' Datenmenge durch Close geschlossen wird, greift ein nachfolgender SQL auf die eventuell vorhandenen Connection, aber nicht mehr auf die eben geladene und wieder weggeworfene Datenmenge zu...
Moderiert von Th69: Delphi-Tags hinzugefügt
J.Borchert - So 25.08.19 21:00
Ok, super. Danke für deine Hilfe. Habe versucht, das Ganze umzusetzen. Leider gibt es nach dem Filtern nur einen einzigen Datensatz (leer) im Grid:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Procedure FunkOfflineFiltern(s:string); begin with Form1, ADOQuery16 do begin Edit113.Text := s; Filtered := False; Filter := s; Filtered := True; end; end; |
Fehlt da noch was ?
jaenicke - Di 27.08.19 07:15
Im Filter ist nicht jede SQL Klausel erlaubt, eventuell funktioniert dort LIKE schlicht nicht.
Falls es sich um eine Enterprise Edition handelt, wäre auch FireDAC mit Local SQL im Speicher möglich. Da kann man dann sogar joins im Speicher auf den Offline-Daten machen, auch auf selbst im Speicher komplett neu erstellte Tabellen.
Holgerx - Di 27.08.19 09:26
Hmm..
Hab da ein Testprogramm für ClientDataset mit ADOQuery.
Damit läst sich ein neues DataSet erstellen, dieses bearbeiten, speichern, laden.
Bei aktivierung des Filters wird dessen Edit eingefärbt, ob das ADOQuery den Filter verwendet oder mit einer Exception ablehnt.
Zu beachten ist, das ein führendes '%' nur geht, wenn auch ein abschließendes '%' nach einem Text folgt...
(Erstellt mit D6, ja und ich will nicht wechseln...)
J.Borchert - Di 27.08.19 18:29
Zitat: |
Zu beachten ist, das ein führendes '%' nur geht, wenn auch ein abschließendes '%' nach einem Text folgt... |
Das war der entscheidende Hinweis. Danke Euch allen.
Letzte Bitte:
Wie kann ich im DBGrid, wenn ich Select nicht benutzen kann, Spalten nach meiner gewünschten Reihenfolge anordnen bzw. nur einzelne Spalten anzeigen lassen ?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!