Filtern per Code
Moderator: Moderatoren
Filtern per Code
Hallo!
Ich habe in einem Formular verschiedene Adressen: Kunden, Lieferanten und Sonstige. Das Kriterium steht in einem Feld "Status". Die kann ich mit der Standard-Filterfunktion von OO Base selektieren. Jetzt will ich das ganze aber mit einem Button machen.
Also Button 1 und er zeigt mir nur alle Kunden an. Button 2 für alle Lieferanten etc.
Kann mir jemand den Code nennen - oder zumindest den Befehl, um per Code zu filtern?
Oder, am besten: Ich habe nur einen Button und es geht eine neue Maske auf, wo ich dann die 3 Buttons sehe und dort auswählen kann.
(Ich habe vor 20 Jahrem mal Basic programmiert, und so ganz langsam komme ich wieder in das Thema Programmierung rein ...)
Danke schon mal!
Reginald
Ich habe in einem Formular verschiedene Adressen: Kunden, Lieferanten und Sonstige. Das Kriterium steht in einem Feld "Status". Die kann ich mit der Standard-Filterfunktion von OO Base selektieren. Jetzt will ich das ganze aber mit einem Button machen.
Also Button 1 und er zeigt mir nur alle Kunden an. Button 2 für alle Lieferanten etc.
Kann mir jemand den Code nennen - oder zumindest den Befehl, um per Code zu filtern?
Oder, am besten: Ich habe nur einen Button und es geht eine neue Maske auf, wo ich dann die 3 Buttons sehe und dort auswählen kann.
(Ich habe vor 20 Jahrem mal Basic programmiert, und so ganz langsam komme ich wieder in das Thema Programmierung rein ...)
Danke schon mal!
Reginald
Re: Filtern per Code
Hallo Reginald,
Du könntest Deinem Button1 z.B. folgenden Code zuweisen:
Komfortabler wirds, wenn Du in Dein Formular eine Listbox einbaust, die die verschiedenen Einträge von 'Status' enthält und der dann den obigen Code zuweist. (In diesem Fall muss der Code noch noch um das Auslesen den selektierten Wertes ergänzt werden.)
Beste Grüße,
Steffan
Du könntest Deinem Button1 z.B. folgenden Code zuweisen:
Code: Alles auswählen
...
oDoc = ThisComponent
oCtrl = oDoc.getCurrentController()
oDraw = oDoc.drawpage
oForm = oDraw.forms.getbyName("Formularname")
oForm.Filter="(Status = 'Kunde')"
oForm.Reload
...
Beste Grüße,
Steffan
Re: Filtern per Code
Hallo Steffan,
vielen Dank für deine Antwort! Ein klein wenig modifiziert funktioniert es nun:
Jetzt die Gretchenfragen:
+ Manche Statusfelder haben den Wert "Kunde", manche "Kunden", manche "Firmenkunde". Wie muß die Zeile oForm.Filter=... aussehen, wenn ich sozusagen nach *kunde* suchen möchte?
+ Wie sieht der Spass aus, wenn der Filterwert in einer Variablen sFilter steht? Also in der Art oForm.Filter="(Status = sFilter)" (funzt so leider nicht, habe auch schon viele andere Varianten ausprobiert ....)
+ Mit welchem Wert kann ich den Filter wieder resetten, so dass ich wieder alle Datensätze sehen kann?
Vielen Dank!
Reginald
vielen Dank für deine Antwort! Ein klein wenig modifiziert funktioniert es nun:
Code: Alles auswählen
Sub FilterKunden
oDoc = ThisComponent 'Das ist immer so eine Muss-Zeile
oForm = oDoc.drawpage.forms.getbyindex(0) 'Drawpage des Formulars. Auch immer so eine Musszeile.
oForm.Filter="(Status = 'Kunde')"
oForm.Reload
End Sub
+ Manche Statusfelder haben den Wert "Kunde", manche "Kunden", manche "Firmenkunde". Wie muß die Zeile oForm.Filter=... aussehen, wenn ich sozusagen nach *kunde* suchen möchte?
+ Wie sieht der Spass aus, wenn der Filterwert in einer Variablen sFilter steht? Also in der Art oForm.Filter="(Status = sFilter)" (funzt so leider nicht, habe auch schon viele andere Varianten ausprobiert ....)
+ Mit welchem Wert kann ich den Filter wieder resetten, so dass ich wieder alle Datensätze sehen kann?
Vielen Dank!
Reginald
Re: Filtern per Code
Also bzgl. dem Resetten habe ich mir jetzt schon helfen können:
Entsprechend sollte bei dem Code ganz oben auch noch die Zeile oForm.ApplyFilter = true eingefügt werden for dem oForm.Reload
Ich kann den Wert für sFilterfield anstatt über ein Suchfeld im Formular über eine Inputbox abfragen:
Das mag für viele Kleinigkeiten sind, für mich aber schon große Schritten beim Neuerlernen einer Sprache ...
+ Trotzdem bleibt die Frage, wie muss der Code aussehen, damit ich nach dem Feld sFilterfield filtern kann, also in der Art Status = sFilterfield.
+ Wie, wenn ich mit Platzhaltern suchen möchte, also in der Art Status = *sFilterfield*
Also, danke schon einmal!!
Reginald
Code: Alles auswählen
Sub FilterResetten
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getbyindex(0)
oForm.ApplyFilter = false
oForm.Reload
End Sub
Ich kann den Wert für sFilterfield anstatt über ein Suchfeld im Formular über eine Inputbox abfragen:
Code: Alles auswählen
sFilterfield = InputBox("Bitte Status eingeben:","Datensätze filtern","<<Zu filternder Status>>")
+ Trotzdem bleibt die Frage, wie muss der Code aussehen, damit ich nach dem Feld sFilterfield filtern kann, also in der Art Status = sFilterfield.
+ Wie, wenn ich mit Platzhaltern suchen möchte, also in der Art Status = *sFilterfield*
Also, danke schon einmal!!
Reginald
Re: Filtern per Code
Hallo Reginald,
Du musst Deinen Filterstring halt aus Text und deiner Variablen zusammensetzen also
Damit wird nicht zwischen Groß- und Kleinschreibung unterschieden (LCASE), das %-Zeichen ist in der SQL-Syntax Platzhalter für eine beliebige Anzahl von Zeichen.
Allerdings solltest Du überlegen, ob du in Deiner DB nicht eine Tabelle Status anlegst, in die Du die verschiedenen Stati (heisst das so?) einträgst und in Deiner Haupttabelle nur über die ID verknüpfst. Wenn Du jedesmal den Status per Hand neu einträgst kann es zu Fehlern kommen. Und wenn bei Status z.B. "Künde" steht wird dieser Datensatz auch nicht mit dem o.g. Filter erkannt.
Beste Grüße,
Steffan
Du musst Deinen Filterstring halt aus Text und deiner Variablen zusammensetzen also
Code: Alles auswählen
oForm.Filter="LCASE(Status) LIKE '%" & lcase(sFilterfield) & "%'"
Allerdings solltest Du überlegen, ob du in Deiner DB nicht eine Tabelle Status anlegst, in die Du die verschiedenen Stati (heisst das so?) einträgst und in Deiner Haupttabelle nur über die ID verknüpfst. Wenn Du jedesmal den Status per Hand neu einträgst kann es zu Fehlern kommen. Und wenn bei Status z.B. "Künde" steht wird dieser Datensatz auch nicht mit dem o.g. Filter erkannt.
Beste Grüße,
Steffan
Re: Filtern per Code
Hm, das klingt ziemlich plausibel, funktioniert aber nicht ... Er zeigt mir dann keinen Datensatz an, obwohl es einen gibt per den Werten, die ich filter. Also er zeigt so eine Maske an, die wie ein ganz neuer, leerer Datensatz aussieht ...
Hast du noch eine Idee zur Variante der Syntax?
Grüße
Reginald
Hast du noch eine Idee zur Variante der Syntax?
Grüße
Reginald
Re: Filtern per Code
Hallo Reginald,
schau Dir mal die beiliegende Beispiel-DB an (Formular1). In das Textfeld kannst Du dort irgend einen Text eingeben, nach dem dann das Feld Status gefiltert wird. Ich denke, das sollte Dir bei deiner Frage helfen.
Beste Grüße,
Steffan
schau Dir mal die beiliegende Beispiel-DB an (Formular1). In das Textfeld kannst Du dort irgend einen Text eingeben, nach dem dann das Feld Status gefiltert wird. Ich denke, das sollte Dir bei deiner Frage helfen.
Beste Grüße,
Steffan
Re: Filtern per Code
Hallo Steffan,
vielen Dank für deine Antwort!
Zusammen mit diesen Beiträgen hier
http://www.oooforum.de/viewtopic.php?f= ... fd473c5df6
habe ich alles genau so hinbekommen, wie ich wollte, bzw. sogar noch besser, weil ich deinen Ansatz mit eingebaut habe, also ich habe gleich noch eine Listenansicht im Formular, die dann sozusagen als Vorschau dient.
Das Ergebnis meiner ganzen Testerei und so als Beispiel für diejenigen, die es interessiert, in der Anlage. Danke noch einmal,
Reginald
vielen Dank für deine Antwort!
Zusammen mit diesen Beiträgen hier
http://www.oooforum.de/viewtopic.php?f= ... fd473c5df6
habe ich alles genau so hinbekommen, wie ich wollte, bzw. sogar noch besser, weil ich deinen Ansatz mit eingebaut habe, also ich habe gleich noch eine Listenansicht im Formular, die dann sozusagen als Vorschau dient.
Das Ergebnis meiner ganzen Testerei und so als Beispiel für diejenigen, die es interessiert, in der Anlage. Danke noch einmal,
Reginald