Formular, Filter usw.

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Formular, Filter usw.

Beitrag von eBayer »

Hallo, vielleicht hilft Dir das:
1. Eingabe in Eingabefeld
2. PushButton drücken, der nach dem Eingabefeld filtert

Dafür brauchst Du ein Makro, welches den Filter setzt und ggf. eines, welches den Filter aufhebt.
Den PushButton verbindest Du mit dem Makro und fertig ist der Filter.

Gruß eBayer

Sub FilterAn ' Filter für Name anschalten
Dim sFilter
Dim oForm As Object
oForm = ThisComponent.DrawPage.Forms.getByName("Form_Adressen")
sFilter = oForm.getByName("Eingabefeld").text
oForm.Filter= "Name >= " + sFilter ' Name ist ein Feld in Deiner Tabelle des aktuellen Formulars
oForm.reload ' Formular aktualisieren
End Sub

Sub FilterAus ' Filter für das Formular ausschalten
Dim oForm As Object
oForm = ThisComponent.DrawPage.Forms.getByName("Form_Adressen")
oForm.Filter="" ' Filter leeren
oForm.reload ' Formular aktualisieren
End Sub
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

Hallo,

Wäre vielleicht jemand so freundlich das Makro anzupassen.

1. Meine Suchfeld hat die Bezeichnung "txtSuchfeld".
2. Mein Formular hat die Bezeichnung "Kundenstamm"
3. Die Tabelle hat das Feld "Nachname".

Wo muss ich denn das Suchfeld eintragen ?

Code: Alles auswählen

Sub FilterAn ' Filter für Name anschalten
Dim sFilter
Dim oForm As Object
oForm = ThisComponent.DrawPage.Forms.getByName("Form_Adressen")
sFilter = oForm.getByName("Eingabefeld").text
oForm.Filter= "Nachname >= " + sFilter ' Name ist ein Feld in Deiner Tabelle des aktuellen Formulars
oForm.reload ' Formular aktualisieren
End Sub

Sub FilterAus ' Filter für das Formular ausschalten
Dim oForm As Object
oForm = ThisComponent.DrawPage.Forms.getByName("Form_Adressen")
oForm.Filter="" ' Filter leeren
oForm.reload ' Formular aktualisieren
End Sub

Gruß Gundo
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Formular, Filter usw.

Beitrag von F3K Total »

Hallo Gundo,
besser wäre es, wenn du eine verfremdete Version der DB hochlädst. Der "interne" Name des Formulares fehlt bei deinen Angaben.
Gruß R
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

Hallo F3K Total,

Ja mach ich hiermit.

Im Feld "txtSuche" soll der Suchbegriff eingetragen werden. Es soll das Tabellenfeld "Nachname" gefiltert werden. Kann man die Sortierreihenfolge variabel gestalten ?

Gruß Gundo
Dateianhänge
Kundenverwaltung.odb
(58.48 KiB) 71-mal heruntergeladen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Formular, Filter usw.

Beitrag von F3K Total »

Jo, und das war gut so:
1.) Dein Formular heißt im Formularnavigator "MainForm"
2.) Das Textfeld zur Eingabe des Suchstrings heißt "txtSuche"
3.) die Zeile

Code: Alles auswählen

oForm.Filter= "Nachname >= " + sFilter
muss so geändert werden:

Code: Alles auswählen

oForm.Filter = "Nachname >= '" + sFilter +"'"
weil bei Eingabe eines Strings einfache Gänsefüßchen oben den String umschliessen müssen.
4.) Das Makro FilterAn habe ich der Schaltfläche AN unter dem Ereignis Aktion ausführen zugeordnet
5.) Das Makro FilterAus habe ich der Schaltfläche AUS unter dem Ereignis Aktion ausführen zugeordnet

Die Makros müssen daher so aussehen:

Code: Alles auswählen

    Sub FilterAn ' Filter für Name anschalten
    Dim sFilter
    Dim oForm As Object
    oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")
    sFilter = oForm.getByName("txtSuche").text
    oForm.Filter = "Nachname >= '" + sFilter +"'" ' Name ist ein Feld in Deiner Tabelle des aktuellen Formulars
    oForm.reload ' Formular aktualisieren
    End Sub

    Sub FilterAus ' Filter für das Formular ausschalten
    Dim oForm As Object
    oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")
    oForm.Filter="" ' Filter leeren
    oForm.reload ' Formular aktualisieren
    End Sub
Nun läuft es.

Die Sortierreihenfolge kannst Du in der Leiste Formularnavigation einstellen.
Viel Erfolg damit

Gruß R
Dateianhänge
Kundenverwaltung_filtern.odb
(58.82 KiB) 103-mal heruntergeladen
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

KLASSE !!!

Vielen Dank.

Gruß Gundo
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

Muß mich noch mal melden.

F3K Total, gib mal bitte "Mü" ein, und clicke auf "AN". Bei mir werden auch die Nachnamen "Sch*" und "Naumann" angezeigt.

Kannst du das mal testen ?

Gruß Gundo
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular, Filter usw.

Beitrag von RobertG »

Hallo Gundo,
Gundo hat geschrieben:... gib mal bitte "Mü" ein, und clicke auf "AN". Bei mir werden auch die Nachnamen "Sch*" und "Naumann" angezeigt.
Das klingt doch ganz nach der Vorgabe, die irgendwann in dem Thread auftauchte. Dort steht
"Nachname >= " + sFilter
>=: Also vom Reihenfolge, startend ab "Mü" ... M, N, O ...
Vielleicht suchst Du nur alle Nachnamen mit "Mü" beginnend?
"Nachname LIKE "+sFilter+"%"
Ich weiß nur nicht, wie es hier mit den Hochkommata aussehen muss. Vielleicht
"Nachname LIKE '"+sFilter+"%'"

Gruß

Robert
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

Hallo Robert,

Ja, ich habe mich warscheinlich wieder mal dusselig ausgedrückt. Sorry dafür.
"Nachname LIKE '"+sFilter+"%'"

... zwischen Groß- und Kleinschreibung soll aber nicht unterschieden werden.

Gruß Gundo
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular, Filter usw.

Beitrag von RobertG »

Hallo Gundo,
"Nachname LIKE '"+sFilter+"%'"

... zwischen Groß- und Kleinschreibung soll aber nicht unterschieden werden.
Vielleicht
"UCASE(Nachname) LIKE UCASE("+sFilter+")||%"
Das würde zumindest beide Werte (von Nachname und Filterstring) in einer HSQLDB auf Kleinschreibung setzen, so dass keine Unterscheidung erforderlich ist. Wieder geht jetzt natürlich das Testen los, wo eventuell die Hochkommata hingehören.

Gruß

Robert
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

Re: Formular, Filter usw.

Beitrag von Gundo »

So scheint es zu klappen:

Code: Alles auswählen

 "UCASE(Nachname) LIKE UCASE('"+sFilter+"%')" 
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Formular, Filter usw.

Beitrag von F3K Total »

Jo,
so geht es.

Gruß R

Edit: kleiner Tipp am Rande: Wenn Du das Makro FilterAn an das Ereignis Text modifiziert des Suchfeldes txtSuche hängst, kannst Du auf die Schaltflächen AN/AUS verzichten.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular, Filter usw.

Beitrag von RobertG »

Hallo R,
F3K Total hat geschrieben: Edit: kleiner Tipp am Rande: Wenn Du das Makro FilterAn an das Ereignis Text modifiziert des Suchfeldes txtSuche hängst, kannst Du auf die Schaltflächen AN/AUS verzichten.
Bist Du Dir da sicher? "Text modifiziert" reagiert dann nach jeder Tastatireingabe, d.h. der Filter läuft mit jedem Buchstaben neu an. Wenn das nicht gewollt ist, dann reicht auch ein Focusverlust.

Gruß

Robert
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Formular, Filter usw.

Beitrag von F3K Total »

Hallo Robert,
genau, das wollte ich bezwecken.
Während des Eintippens des Filters reduziert sich gleichzeitig die Liste.
Das kann natürlich bei großen Datenmengen stören, bei überschaubarer Anzahl ist es aber hilfreich, weil man aufhören kann, wenn der/die gewünschte/n Datensatz/sätze sichtbar wird/werden.
Gruß R
Gundo
Beiträge: 7
Registriert: Do, 05.07.2012 13:33

[Gelöst] Formular, Filter usw.

Beitrag von Gundo »

Danke für eure Hilfe.

Gruß Gundo
Antworten