🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Formular mit Filter öffnen

Alles zur Programmierung im LibreOffice.
Antworten
teuff
! Supporter - Spende !
Beiträge: 11
Registriert: Di 26. Mär 2013, 20:13

[Gelöst] Formular mit Filter öffnen

Beitrag von teuff » Mo 9. Jun 2014, 18:57

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
Zuletzt geändert von teuff am Di 10. Jun 2014, 07:30, insgesamt 1-mal geändert.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Formular mit Filter öffnen

Beitrag von F3K Total » Mo 9. Jun 2014, 21:07

Hi,
versuch mal

Code: Alles auswählen

.Filter = "(ID = 25)"
oder

Code: Alles auswählen

.Filter = "(""ID"" = 25)"
HTH R
Windows 11: AOO, LO Linux Mint: AOO, LO

teuff
! Supporter - Spende !
Beiträge: 11
Registriert: Di 26. Mär 2013, 20:13

Re: Formular mit Filter öffnen

Beitrag von teuff » Mo 9. Jun 2014, 23:20

Danke, aber es geht nicht um die Syntax. Die Eigenschaften ApplyFilter und Filter werden überhaupt nicht akzeptiert, scheinen also nicht zu existieren.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Formular mit Filter öffnen

Beitrag von F3K Total » Mo 9. Jun 2014, 23:32

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
Windows 11: AOO, LO Linux Mint: AOO, LO

teuff
! Supporter - Spende !
Beiträge: 11
Registriert: Di 26. Mär 2013, 20:13

Re: Formular mit Filter öffnen

Beitrag von teuff » Di 10. Jun 2014, 07:30

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: [Gelöst] Formular mit Filter öffnen

Beitrag von F3K Total » Di 10. Jun 2014, 21:21

teuff hat geschrieben:Ich dachte, mein Objekt oKarteikarte wäre schon ein Formular, dem ich die Eigenschaft Filter zuweisen kann.
Falsch, es ist das Formulardokument.
teuff hat geschrieben:oder hat das Formular noch zusätzliche Komponenten, die ich so noch nicht gekannt habe?
Genau so ist es.
Das Formulardokument 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
Windows 11: AOO, LO Linux Mint: AOO, LO

teuff
! Supporter - Spende !
Beiträge: 11
Registriert: Di 26. Mär 2013, 20:13

Re: [Gelöst] Formular mit Filter öffnen

Beitrag von teuff » Di 10. Jun 2014, 22:17

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.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten