Base Formular - Suche/Filter in Tabelle

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Rag3
Beiträge: 6
Registriert: So, 22.10.2006 22:07

Base Formular - Suche/Filter in Tabelle

Beitrag von Rag3 »

Hi,
ich bin gerade erst auf OO umgestiegen und bis jetzt eignetlich sehr zufrieden. Leider kenne ich mich dann auch nicht allzu gut aus, wie man das realisiert, was ich haben möchte. Daher wende ich mich an euch! Ich habe bereits stundenlang mit beiträgen aus diesem forum oder anderen tutorials versucht, eine suchmaske aufzubauen, aber es funktioniert nicht.

Die Datenbank habe ich jetzt nochmal in minimaler Ausführung erstellt, um unnötige Komplexität zu vermeiden, damit ich das ganze dann besser verstehe. Ich habe lediglich eine Tabelle:
Kunden(KundenNr, Name, Vorname, Anrede), Primärschlüsel ist die KundenNr.

Auf meinem Formular wird in einer Tabelle der Inhalt der Tabelle Kunden aufgelistet. Mein Ziel ist nun in jeder Spalte der Tabelle gezielt suchen zu können. Dafür habe ich mir überlegt, man könne unter jede Spalte ein Textfeld positionieren, in dem der jeweilige Text eingegeben werden soll, nachdem man suchen möchte. Dort soll dann mit dem Ereignis "Text Modifiziert" ein Makro verknüpft werden, dass dann den Filter für die Tabelle entsprechend anpasst. Durch einen Beitrag hier im Forum habe ich mir nachfolgenden Code als Makro zugewiesen, erhalte jedoch immer die Fehlermeldung die Objektvariable sei nicht belegt (Zeile "oForm.Filter= setFiltA1" aber auch "oForm.Reload"). Kannn es sein, dass ich die Objekte auf meinem Formular erst irgendwo im Makrocode definieren/zuweisen muss?

Code: Alles auswählen

Sub Filter_komplett 
    sFilter= lcase("textfeld.Text") 'Suchtext aus Textbox
    if sFilter <>"" then
        sFilter = "%" & sFilter & "%"
        setFiltA1= "( (LCASE(Name) LIKE '" & sFilter & "') "
    else
        setFiltA1= ""
    endif
   oForm.Filter= setFiltA1
   oForm.Reload
End Sub
Hiermit soll in der SPalte "Name" gesucht werden, analog will ich es dann für die anderen machen.
Ich bin für jeden Tip dankbar!

mfg

Rag3
Rag3
Beiträge: 6
Registriert: So, 22.10.2006 22:07

Beitrag von Rag3 »

Soweit ich das jetzt verstehe, fehlt mir im prinzip nur die einbindung der API in die Makros...

Wenn mir jemand erklärt wie genau ich auf meine Formulare mit ihren Tabellen und Textfeldern zugreifen kann, reicht mir da wahrscheinlich schon.

Meine Komponenten haben folgende Namen:
Formular1 (Das Hauptformular, auf dem alle anderen Objekte liegen)
TableControl1 (DIe Tabelle mit den Daten)
TextBox1 (Das eingabefeld für den Suchbegriff)
Pushbutton1 (Der Button, mit dem das Makro ausgelöst werden soll)

hier habe ich probleme: CreateUnoService("com.sun.star. ????

Ich währe euch sehr dankbar, wenn ihr mir helft!

Danke, Rag3
Mihilist
****
Beiträge: 120
Registriert: Di, 25.04.2006 15:27
Wohnort: Nürnberg
Kontaktdaten:

Beitrag von Mihilist »

Du musst OpenOffice nur sagen, was oForm sein soll. Wenn ich dir sage "Nimm [kryptischernamedendubishernichtkennst] und gugg davon den [nochnkryptischername] und setze das gleich ..." wirst du auch eine Fehlermeldung ausspucken :D
Rag3 hat geschrieben:Wenn mir jemand erklärt wie genau ich auf meine Formulare mit ihren Tabellen und Textfeldern zugreifen kann, reicht mir da wahrscheinlich schon.

Meine Komponenten haben folgende Namen:
Formular1 (Das Hauptformular, auf dem alle anderen Objekte liegen)
TableControl1 (DIe Tabelle mit den Daten)
TextBox1 (Das eingabefeld für den Suchbegriff)
Pushbutton1 (Der Button, mit dem das Makro ausgelöst werden soll)
Du musst wie gesagt im Grunde nur sagen, was oForm aus deinem Code sein soll, bevor du oForm.Filter oder oForm.Reload sagen kannst. Und das geht so:

Code: Alles auswählen

oForm = ThisComponent.Drawpage.Forms.getByName("Formular1")
Dann kann Basic was damit anfangen ;)

Elemente des Formulars bekommst du dann wieder mit getByName (diesmal halt oForm.getByName(sMyName)
Rag3
Beiträge: 6
Registriert: So, 22.10.2006 22:07

Beitrag von Rag3 »

Ich danke dir vielmals! Dem Umgang mit der API werde ich mich wohl nochmal zuwenden müssen, aber jetzt geht mein aktuelles Projekt erstmal!

Falls jemand anderes ein #hnliches Problem hat, hier nochmal der komplette Quellcode des Makros:

Code: Alles auswählen

Sub Filter_komplett 
	oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")
	oTextfeld = oForm.getByName("TextBox")
	oTabelle = oForm.getByName("MainForm_Grid")
    sFilter= lcase(oTextfeld.Text) 'Suchtext aus Textbox
    if sFilter <>"" then
        sFilter = "%" & sFilter & "%"
        setFiltA1= " (LCASE(Name) LIKE '" & sFilter & "') "
     else
        setFiltA1= ""
    endif
   oForm.Filter= setFiltA1
   oForm.Reload
End Sub
Ich werde das jetzt noch auf die anderen Spalten erweitern, aber ich denke das schafe ich alleine!
Vielen Dank nochmal!

mfg

Rag3
Antworten