Autor |
Beitrag |
J.Borchert
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: So 25.08.19 12:23
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 ?
Zuletzt bearbeitet von J.Borchert am So 25.08.19 14:55, insgesamt 2-mal bearbeitet
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: So 25.08.19 14:40
|
|
J.Borchert
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: 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
Beiträge: 63
Erhaltene Danke: 27
Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
|
Verfasst: 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
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: 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
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: J.Borchert
|
|
Holgerx
Beiträge: 63
Erhaltene Danke: 27
Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
|
Verfasst: 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...)
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: J.Borchert
|
|
J.Borchert
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: 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 ?
_________________ Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 27.08.19 18:42
Jede Spalte ( DbGrids.TColumn) hat die Eigenschaften Visible und Index.
Für diesen Beitrag haben gedankt: J.Borchert
|
|