Autor Beitrag
J.Borchert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: 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.

ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
with ADOQuery16 do
          begin Close;
                SQL.Clear;
                SQL.Text := 'SELECT * FROM FUNK'//Habe jetzt extra gekürzt zur Fehlersuche
                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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: So 25.08.19 14:40 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: So 25.08.19 14:57 
Also so wie jetzt oben gekürzt kommt ein SQL-Fehler:

ausblenden Quelltext
1:
2:
3:
4:
5:
---------------------------
Die Datei SELECT * FROM FUNK

 kann nicht gefunden werden.
---------------------------
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: So 25.08.19 20:16 
Hmm..
ausblenden Delphi-Quelltext
1:
2:
WITH ADOQuery16 DO
  BEGIN LoadFromFile('last_Funk.db');

-> Die Datenmenge wird ins Query geladen und 'geöffnet'...

ausblenden 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 user profile iconTh69: Delphi-Tags hinzugefügt
J.Borchert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Procedure FunkOfflineFiltern(s:string);
begin
 with Form1, ADOQuery16 do
  begin Edit113.Text := s;  // Zur Anzeige, was da gerade passiert
        Filtered := False;
        Filter := s;        // 'Team LIKE ' + QuotedStr('%' + ComboBox3.Text + '%')
        Filtered := True;
  end;
end;


Fehlt da noch was ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 27.08.19 18:42 
Jede Spalte (DbGrids.TColumn) hat die Eigenschaften Visible und Index.

Für diesen Beitrag haben gedankt: J.Borchert