Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Filterproblem mit TTable (https://www.delphipraxis.net/82055-filterproblem-mit-ttable.html)

Grolle 10. Dez 2006 20:27

Re: Filterproblem mit TTable
 
Hi,
hier der Text:
Delphi-Quellcode:
procedure TForm1.AdsTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  //if not AdsTable1.FieldByName('def3').IsNull then
  Accept := Form6.Match(VarToStr(DataSet['def3']),Form6.sMatch);
end;

procedure TForm6.Button1Click(Sender: TObject);
begin
  sMatch := MatchStr(Edit1.Text);
  Form1.AdsTable1.Filtered := true;
  edit1.Text := '';
  Close;
end;
Die anderen Filter rufe ich aus einem PopUp-Menü auf:
Delphi-Quellcode:
procedure TForm1.MenuItemClick(sender : TObject);
var
s, g : string;
begin
  with Sender as TMenuItem do
    if count = 0 then
      begin
        s := Caption;
        s := StringReplace(s,'&','',[rfReplaceAll]);
        g := parent.Caption;
        g := StringReplace(g,'&','',[rfReplaceAll]);
        if s = lng.GetValue('topitem') then ADSTable1.Filtered := False
        else if s = 'Special Filter' then Form6.Show
        else if s = lng.GetValue('nodeitem') then
          begin
            AdsTable1.Filter := 'node = "'+g+'"';
            AdsTable1.Filtered := true;
          end
        else
          begin
            if g = '' then
            begin
              AdsTable1.Filter := 'node="'+s+'"';
              AdsTable1.Filtered := true;
            end
            else
            begin
              AdsTable1.Filter := 'node = "'+g+'" .AND. tree="'+s+'"';
              AdsTable1.Filtered := true;
            end;
          end;
      end;
end;

marabu 10. Dez 2006 22:04

Re: Filterproblem mit TTable
 
Hallo Stefan,

bevor du den Filter neu setzt, solltest du Filtered auf False setzen. Und schau mal hier:

Delphi-Quellcode:
//  s := Caption;
//  s := StringReplace(s, '&', '', [rfReplaceAll]);
s := Menus.StripHotKey(Caption);
Gute Nacht

Grolle 11. Dez 2006 10:25

Re: Filterproblem mit TTable
 
Hallo,
habe jetzt jedesmal bevor der filter neu gesetzt wird fltered auf false gesetzt.
Aber es geht immer noch durcheinander. Wird onfilterrecord bei jedem filtern aus-
gelöst? Kann das der Fehler sein?

marabu 11. Dez 2006 10:54

Re: Filterproblem mit TTable
 
Hallo,

ich kann mir gar nichts darunter vorstellen, wenn du schreibst "Aber es geht immer noch durcheinander". Auch wüsste ich nicht, wie die Auswertung des Filterkriteriums im Ereignis OnFilterRecord() ein wechselndes Ergebnis liefern könnte, je nachdem wie oft die Routine durchlaufen wird. Ich fürchte du musst das alles etwas besser beschreiben, damit ich verstehe.

Freundliche Grüße

Grolle 11. Dez 2006 11:05

Re: Filterproblem mit TTable
 
Hi,
einmal geschieht ja eine Filterzuweisung durch das PopUpMenü.
Unabhängig davon soll aber auch wenn der User es wünscht über
eine andere Maske (im onfilterrecord) die Daten filtern können.
Ich meine, dass die Daten zusammengewürfelt werden (onfilterrecord
und der eigentliche filter). das geht soweit, bis ich gar nix mehr
angezeigt bekomme. :gruebel:

marabu 11. Dez 2006 11:15

Re: Filterproblem mit TTable
 
Okay, verstehe.

Die Kombination der beiden Filtertechniken (OnFilterRecord() und Filter/ed) ist zulässig. Die entsprechende Hilfeseite in der Online Hilfe hast du sicher gelesen. Ich bin sicher, dass du den Fehler irgendwo in deinem Code stecken hast. Wenn du nicht weiter kommst, dann kannst du eine Demo erstellen mit der man dein Problem sehen kann. Fehler die ich reproduzieren kann, kann ich auch beseitigen - oder zumindest erklären.

Freundliche Grüße

Grolle 19. Dez 2006 09:21

Re: Filterproblem mit TTable
 
Hallo Marabu,
habe nochmal ein bischen rumprobiert und alles läuft einwandfrei.
Es lag einfach daran, dass ich den Filter bzw. sMatch nicht an der
richtigen Stelle zurückgesetzt hatte. Jetzt klappt alles einwandfrei!
Besten Dank nochmal :-D

Grolle 21. Aug 2007 16:41

Re: Filterproblem mit TTable
 
Hallo,

ich habe zu diesem alten Thema nochmal eine Frage:
Im Moment suche ich ja so mit onfilterrecord():
Delphi-Quellcode:
Accept := Match(VarToStr(DataSet['JAHRE']), sMatch);
Der übergebene String lautet dann z. B.: %2%45%
Das Ergebnis ist dann z. B.: 123456 - also alles, was diese 3 Ziffern enthält.
Nun die Frage: Ist das auch möglich, über eine oder-Verknüpfung zu suchen? also
enthalten sein muss 2 oder 4 oder 5? (Mit einer Ziffer (%2%) geht das ja schon).

Viele Grüße,
Stefan Göppert

hoika 22. Aug 2007 08:06

Re: Filterproblem mit TTable
 
Hallo,

glaube ich nicht,
dazu brauchst du dann ne Query.


Heiko

Grolle 22. Aug 2007 11:32

Re: Filterproblem mit TTable
 
Hallo,

eine Query kommt leider nicht in Frage. Bei normalen Filtern kann
man doch auch eine oder-Verknüpfung für ein Feld einbauen? Irgendwie
muss das doch gehen. Ich habe leider auch die Delphi-Hilfe nicht
parat. Vielleicht kann mir jemand schreiben was sie zu onfilterrecord()
sagt.

Viele Grüße ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz