[Gelöst] Filter funktioniert nicht

23. November 2006 15:04

Hi zusammen,

ich möchte in einer Sub-Form Kontaktdaten ausgeben. Um nur relevante Kontakte darzustellen, habe ich eine Funktion erstellt, die in einer einer Tabelle einen Filter setzt. Das Ergebnis der Suche soll dann in einem anderen Filter als Kriterium dienen. Hier ein Teil des Codes:

Code:

CASE Gliederung."Organization Type" OF
  Gliederung."Organization Type"::State:BEGIN
 
  Kontakte.SETFILTER(Kontakte."Organization Type",'City');
  Kontakte.SETFILTER(Kontakte."Show as Contact Person",'Ja');
  VerteilerCode := Kontakte."Mailing Group";
  SETFILTER("Mailing Group Code",'%1',VerteilerCode);


Dazu muss ich noch sagen, dass das Feld "Organizatio Type" ein Optionsfeld ist. Ich habe auch schon diese Schreibweise ausprobiert:

Code:
Kontakte.SETFILTER(Kontakte."Organization Type",'%1',Kontakte."Organization Type"::City);


Irgend etwas funktioniert nicht. Ich nehme an, dass die Variable "VerteilerCode" leer ist, da die SubForm immer noch alle Kontakte anzeigt.

Hat jemand eine Idee? Danke und Gruß

Markus
Zuletzt geändert von mgerhartz am 23. November 2006 16:48, insgesamt 1-mal geändert.

23. November 2006 15:12

Irgend etwas funktioniert nicht - Was genau funktioniert denn nicht?

23. November 2006 15:24

Führst du die Filter-Funktion im SubForm aus? Also in einer Funktion, die du auf der Form hinterlegt hast? Dann versuch doch mal, nach der Filterung CurrForm.UPDATE auszuführen.

23. November 2006 15:37

Der Filter funktioniert nicht. Es werden einfach alle Kontakte zur gewählten Gliederung ausgegeben.

@Rotsch

Ja, die Funktion ist in der Sub-Form hinterlegt und wird dort ausgeführt. Am Ende vom Code mache ich auch CurrForm.UPDATE;

Code:
Gliederung."Organization Type"::City:BEGIN
           
Kontakte.SETFILTER(Kontakte."Organization Type",'%1',Kontakte."Organization Type"::City);
  Kontakte.SETFILTER(Kontakte."Show as Contact Person",'Ja');
  VerteilerCode := VerbandKontakte."Mailing Group";
  SETFILTER("Mailing Group Code",'%1',VerteilerCode);
 
IF "Alternative Gliederung" = '' THEN
    SETRANGE("Structure No.",GliederungsNr)
  ELSE
    SETRANGE("Alternative Gliederung",GliederungsNr);
 
END;
 
  ELSE BEGIN
  SETRANGE("Structure No.",'');
  END;
END;
FILTERGROUP(0);
CurrForm.UPDATE;


Der SETRANGE auf die Gliederungsnummer (im unteren Teil des Codes) wird ausgeführt. Allerdings wird der SETFILTER ignoriert.

23. November 2006 15:43

Versuch mal, nach der Filterung ein FIND('-'). Wahrscheinlich greift der Filter erst dann?

23. November 2006 16:08

OK, jetzt scheint er zumindest zu funktionieren. Allerdings stoppt er, wenn keinen Datensatz findet, den in die Filterkriterien hinein passt.

"Kein Kontakt innerhalb des Filters gefunden"

23. November 2006 16:19

Sehr seltsam, wenn ich
Code:
  Gliederung."Organization Type"::City:BEGIN
           
  VerbandKontakte.SETFILTER(VerbandKontakte."Organization Type",'%1',VerbandKontakte."Organization Type"::City);
  FIND('-');
  SETFILTER("Mailing Group Code",VerbandKontakte."Mailing Group");
  SETRANGE("Structure No.",GliederungsNr);
END;


Den Find-Befehl an dieser Stelle, dann kommt der Hinweis: "Datensatz bereits vorhanden, wollen Sie diesen umbenennen?

Code:
  Gliederung."Organization Type"::City:BEGIN
           
  VerbandKontakte.SETFILTER(VerbandKontakte."Organization Type",'%1',VerbandKontakte."Organization Type"::City);
  SETFILTER("Mailing Group Code",VerbandKontakte."Mailing Group");
  SETRANGE("Structure No.",GliederungsNr);
  FIND('-');
END;


Und an dieser Stelle kommt der besagte Hinweis, dass kein entsprechender Datensatz gefunden wurde?

Ich raff das nicht. Vor allem nicht, dass ich bei der ersten Variante angeblich versuche einen Wert zu überschreiben. Ich fülle keine Variable, oder setze einen Modify ab.

23. November 2006 16:25

Ich war etwas knapp mit meiner letzten Antwort. FIND('-') ist zu wenig. Versuch mal

Code:
IF FIND('-') THEN;


Das umgeht den Fehler mit dem nicht gefunden Datensatz.

23. November 2006 16:47

Danke, jetzt klappts.

23. November 2006 17:08

Fein. Sorry für den Umweg. Ich hätte das ja gleich richtig schreiben können.