Seite 1 von 1
[Gelöst] Formular mit Filter öffnen
Verfasst: Mo 9. Jun 2014, 18:57
von teuff
Hallo!
Ich möchte ein Formular per Schaltfläche mit einem Filter öffnen. Laut LibreOffice Base Handbuch sollte ein Formular u.a. folgende Eigenschaften haben:
Name Datentyp L/S Eigenschaft
ApplyFilter boolean L+S Filter aktiviert.
Filter string L+S Aktueller Filter für die Datensätze.
Wenn ich den Filter setzen will, bekomme ich aber folgende Fehlermeldung:
Error Nr. 423: Eigenschaft oder Methode nicht gefunden: ApplyFilter.
Dasselbe passiert dann auch entsprechend mit .Filter = "('ID' = 25)"
Hier der Code:
Code: Alles auswählen
Sub Aendern
' Datensatz Ändern: Hauptformular aufrufen mit Filter
' hier im Beispiel Satz mit ID 25
oDoc = thisComponent
oDrawpage = oDoc.drawpage
oKarteikarte = ThisDatabaseDocument.FormDocuments.GetByName("Karteikarten")
With oKarteikarte
.ApplyFilter
.Filter = "('ID' = 25)"
.open
End With
End Sub
Öffnen allein funktioniert, dann aber natürlich mit dem ersten Satz ohne Filter. Wie kann ich das Forumlar nur mit dem bestimmten Datensatz zu öffnen?
Christian
Re: Formular mit Filter öffnen
Verfasst: Mo 9. Jun 2014, 21:07
von F3K Total
Hi,
versuch mal
oder
HTH R
Re: Formular mit Filter öffnen
Verfasst: Mo 9. Jun 2014, 23:20
von teuff
Danke, aber es geht nicht um die Syntax. Die Eigenschaften ApplyFilter und Filter werden überhaupt nicht akzeptiert, scheinen also nicht zu existieren.
Re: Formular mit Filter öffnen
Verfasst: Mo 9. Jun 2014, 23:32
von F3K Total
Na dann mal so:
Code: Alles auswählen
Sub Aendern
oKarteikarte = ThisDatabaseDocument.FormDocuments.GetByName("Adressenverwaltung")
oKarteikarte.open
oForm = oKarteikarte.Component.drawpage.forms(0)
oForm.Filter = "(ID = 25)"
End Sub
HTH R
Re: Formular mit Filter öffnen
Verfasst: Di 10. Jun 2014, 07:30
von teuff
Danke, das funktioniert so.
Aber was passiert hier eigentlich im Hintergrund? Ich dachte, mein Objekt oKarteikarte wäre schon ein Formular, dem ich die Eigenschaft Filter zuweisen kann. Offenbar muss ich aber ein neues Objekt definieren, damit ich in dem dann den Filter setzen kann. Sind es 2 verschiedene Instanzen desselben Formulars oder hat das Formular noch zusätzliche Komponenten, die ich so noch nicht gekannt habe? Das Problem markiere ich jedenfalls einmal als gelöst. Eine ähnliche Lösung fand ich schon im Forum, aber ich hatte im für mich angepassten Code die Kurve nicht gekratzt.
Für nachfolgende Anfänger bzw. Umsteiger (in meinem Fall von Access) hier noch einmal der Code:
Code: Alles auswählen
Sub Aendern
On Error GoTo Aendern_err
' Datensatz Ändern: Hauptformular aufrufen,
' Filter für Datensatz: Feld (Satzzaehler,1) des Datenarrays (ID des Datensatzes)
' Die folgenden Variablen sind schon als Private Variablen definiert,
' oForm1 wird lokal neu definiert
oDoc = thisComponent
oDrawpage = oDoc.drawpage
oKarteikarte = ThisDatabaseDocument.FormDocuments.GetByName("Karteikarten")
Dim oForm1 as Object
' Wichtig: zuerst das Formular öffnen, dann kann erst oForm1 zugewiesen werden
oKarteikarte.open
oForm1 = oKarteikarte.Component.drawpage.forms(0)
oForm1.Filter = "(ID = " + DatenArray(Satzzaehler,1) + ")"
exit sub
Aendern_err:
MsgBox "Error Nr. " & Err & ": " & Error$ & " (line : " & Erl & ")"
End Sub
Re: [Gelöst] Formular mit Filter öffnen
Verfasst: Di 10. Jun 2014, 21:21
von F3K Total
teuff hat geschrieben:Ich dachte, mein Objekt oKarteikarte wäre schon ein Formular, dem ich die Eigenschaft Filter zuweisen kann.
Falsch, es ist das Formular
dokument.
teuff hat geschrieben:oder hat das Formular noch zusätzliche Komponenten, die ich so noch nicht gekannt habe?
Genau so ist es.
Das Formular
dokument entspricht einem Writer-Dokument. Dieses Dokument hat eine
.Drawpage, auf der sich der Container für die strukturellen Formulare
.Forms befindet. Das erste (Hauptformular) hat den Index 0, entspricht also
.forms(0).
Ich empfehle Dir die Verwendung eines Introspection-Tools wie
MRI oder
Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten.
HTH R
Re: [Gelöst] Formular mit Filter öffnen
Verfasst: Di 10. Jun 2014, 22:17
von teuff
Danke, das erklärt einen Aufbau, den ich wohl noch öfter brauchen werden.
Ich hab mir MRI geladen und mit dem Extension Manager hinzugefügt. Erster Eindruck: Aha. Da habe ich noch viel zu lernen. Von durchleuchten zu erleuchten ist ein langer Weg. Zumindest die ersten Schritte habe ich jetzt schon.