Entwickler-Ecke

Datenbanken - Problem mit Filter


foxy - Fr 31.01.03 09:30
Titel: Problem mit Filter
Moin all :lol:
also kurze beschreibeung.... ich hab eine Paradox7 DB, mit einer Table natürlich .... jetzt hätt ich ma ne frage, wie ich filtern kann??? .....
Filtern definier ich so, das wenn ich f eingebe dann in meinem DB grid nur die Datesätze mit F ausgegeben werden oder??
Also ich habe das bisher so aber es geht nicht richtig


Quelltext
1:
2:
3:
4:
5:
6:
7:
if Checkbox1.Checked then
    begin
      Table1.Filter:= Edit3.Text;
      Table1.Filtered:=True;
    end
  else
    Table1.Filtered:=False;


smiegel - Fr 31.01.03 10:36

Hallo,

Dein Ansatz ist fast richtig. Du musst aber in dem Filter schon angeben, auf welches Feld er sich bezieht.


Quelltext
1:
2:
3:
  Table1.Filtered:=False; 
  Table1.Filter:='[VORNAME]="'+Edit3.Text+'"'; 
  Table1.Filtered:=True;


foxy - Fr 31.01.03 10:38

ahhhh das wars :think:
deswegen hat der immer gesagt Feld nicht gefunden :lol:

danke :D

NAchtrag:

Der sagt aber immer ungültiges Zeichen im Filterausdruck "
.... die Anführungszeichen bringt er da.... wenn ich die weglasse, nomma das das feld nicht gefunden wurde...


bis11 - Fr 31.01.03 14:06

Haste es schonmal mit einem einfachen Anführungszeichen probiert ?


foxy - Fr 31.01.03 14:14

wenn ich es so schreibe

Quelltext
1:
 Table1.Filter:='[Firma]='+Edit3.Text;                    

dann kommt immer das Feld xxx wurde nicht gefunden

was kann das sein ?? :/ ich weis echt nich weiter hab schon alle varianten durch mit anführungszeichen :D


bis11 - Fr 31.01.03 14:18

Probiere es mal so :

Quelltext
1:
Table1.Filter:='[Firma]='+QuotedStr(Edit3.Text);                    


Ich habe schon eine ewigkeit nichtmehr mit Table gearbeitet. Also ich bin mir nicht ganz so sicher.


foxy - Fr 31.01.03 14:22

Wunderbar et schnaggelt :rofl:
dank dir aber was bedeutet QuotedStr???


bis11 - Fr 31.01.03 14:25

QuotedStr setzt den String den Du übergibst in einfache Anführungszeichen. Hier Edit3.text.


foxy - Fr 31.01.03 14:33

noch ne frage wie kann ich filter wieder rückgängig machen... also das wieder alle datensätze angezeigt werden???? einfach

Quelltext
1:
Table1.Filter:='[Firma]='+QuotedStr('');                    


bis11 - Fr 31.01.03 14:39

Ich nehme mal an mit table1.filtered := false. Bin mir aber nicht sicher.


smiegel - Fr 31.01.03 14:40

Hallo,

normalerweise mit Table1.Filtered:=False;


foxy - Fr 31.01.03 14:41

:think: :autsch: danke


foxy - Fr 31.01.03 14:48

so nun zum abschluss nur noch ne kleine Frage, wie kann ich das machen, das der nicht auf Gross und Kleinschreibung achten soll?


foxy - Fr 31.01.03 16:09

also ich meine damit, das er das icht beachten soll und so ne arte autovervollständigung macht ... wenn ich eingebe Proz
dann soll er alle datensätze mit proz die mit proz anfangen filtern geht das ... und wie???


smiegel - Fr 31.01.03 17:13

Hallo,

folgend ein Ausschnitt aus der Delphi-Hilfe zu Deinem Problem:

Zitat:

Mit der Eigenschaft Filter können Sie den Text des aktuellen Filters für eine Datenmenge festlegen.

Delphi-Syntax:

property Filter: String;

C++ Syntax:

__property System::AnsiString Filter = {read=FFilterText, write=SetFilterText};

Beschreibung

Mit Filter können Sie einen Filter für eine Datenmenge festlegen. Wird der Filter für eine Datenmenge aktiviert, sind in einer Anwendung nur die Datensätze verfügbar, die die Filterbedingungen erfüllen. Filter enthält den String, der die Filterbedingung beschreibt. Die folgende Filterbedingung zeigt beispielsweise nur die Datensätze an, deren Feld STATE den Wert 'CA' oder 'MA' enthält.

State = 'CA' or State = 'MA'


Achten Sie darauf, dass Sie in Filterausdrücken einfache Anführungszeichen verwenden, anstelle der doppelten Anführungszeichen für normale Strings.
Beim programmgesteuerten Erstellen eines Filterstrings können Sie die Funktion QuotedStr verwenden, um den Einsatz von Leerzeichen zu ermöglichen:

Table1.Filter := 'State = ' + QuotedStr('M*');

Bei Vergleichen mit Teilstrings verwenden Sie ein Sternchen als Platzhalter. Ein Beispiel:

State = 'M*'


Bei Feldern mit ungewöhnlichen oder nicht kompatiblen Feldnamen (beispielsweise mit Leerzeichen) können Sie den Feldnamen in eckigen Klammern angeben.

[Species Name] = 'Gymnothorax mordax'


Eine umfassende Liste der Operatoren für Filterstrings finden Sie unter Eigenschaft Filter einstellen.

Hinweis: In Anwendungen kann die Eigenschaft Filter zur Laufzeit eingestellt und somit die Filterbedingung für eine Datenmenge geändert werden (z.B. als Reaktion auf eine Benutzereingabe).


foxy - Di 04.02.03 09:40

ich poste noch schnell lösung für andere
so hab ich es gelöst

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
case cmbFilter.ItemIndex of
      0:   begin
                Table1.Filtered:=False;
                Table1.Filter:='[Firma]='+QuotedStr(Edit3.Text);
                Table1.Filtered:=True;
                PageControl1.ActivePageIndex:=2;
           end;
      1:   Begin
                Table1.Filtered:= False;
                Table1.Filter:='[Produktarten]='+QuotedStr(Edit3.Text);
                Table1.Filtered:=true;
                Pagecontrol1.ActivePageIndex:=2;
           end;