Formular mit Filter oder SQL Öffnen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

petzy
Beiträge: 7
Registriert: So, 10.05.2009 17:27

Formular mit Filter oder SQL Öffnen

Beitrag von petzy »

Ich habe ein Formular erstellt, mit dem ich aus den vorhandenen Datensätzen den richtigen suchen kann.
Den gefundenen Datensatz möchte ich in einem anderen Formular öffnen.
Dazu soll ein Filter gesetzt werden, oder aber eine SQL-Abfrage angewendet werden.

Mit Filter öffnen habe ich Makros gefunden, die aber nur dann laufen, wenn ich sie von dem (neuen) Formular selbst aufrufe.

ich habe folgendes versucht:

Code: Alles auswählen

Sub Formular_aufrufen(sRName as String)
	dim sFormularName as string, oContext as Object, oDatenbank as Object
	DIM oVerb as Object, i as Integer
	dim arg(1) as New com.sun.star.beans.PropertyValue
	dim aFormulare(), oDoc as Object, oForm as Object
	sFormularName = "Rezept"
	
	aFormulare = StarDesktop.CurrentComponent.getParent.getFormDocuments().getElementNames()
	
	for i = lBound(aFormulare) to uBound(aFormulare)
		if aFormulare(i) = sFormularName then
			oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
			oDatenbank = oContext.getByName(StarDesktop.CurrentComponent.getParent.getLocation())
			oVerb = oDatenbank.getConnection("","")
			arg(0).Name = "OpenMode"
			arg(0).Value = "open"
			arg(1).Name = "ActiveConnection"
			arg(1).Value = oVerb
			oForm = StarDesktop.CurrentComponent.getParent.getFormDocuments().loadComponentFromURL(aFormulare(i), "", 0, Arg())
			REM oForm => Formular 'Rezept'
			FilterSetz(oForm, sRName)
			Exit Sub
		end if
	next
End Sub

Sub FilterSetz(oFormU as Object, sRezName as String)
	DIM  oDoc as Object
	
	REM Setzt Filter auf Formular Suchanfrage!!
	oDoc = ThisComponent
	oFormU = oDoc.DrawPage.Forms(0)

	oFormU.Filter = (" ""RezeptName"" = '" & sRezName & "'")
	oFormU.ApplyFilter = True
	oFormU.reload
	
End Sub
	
So wie ich das sehe, läuft das deshalb nicht, weil das aufrufende Formular immer noch aktiv ist und mein Versuch, das damit zu ändern, dass ich "oForm" mitgebe an die andere Funktion auch nicht funtkioniert.

Kann mir da jemand weiterhelfen? Ich bin leider auf meiner Suche nicht fündig geworden.

Ich nutze OpenOffice 3.2.0 in Windows XP

Vielen Dank für Eure Hilfe.
Petzy

Ich kenne keinen sicheren Weg zum Erfolg, nur einen zum sicheren Misserfolg
es jedem recht machen zu wollen.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular mit Filter oder SQL Öffnen

Beitrag von DPunch »

Aloha

Bei mir (OOo 3.11) funktioniert das Öffnen mit Filter wie gewünscht.
So wie ich das sehe, läuft das deshalb nicht, weil das aufrufende Formular immer noch aktiv ist und mein Versuch, das damit zu ändern, dass ich "oForm" mitgebe an die andere Funktion auch nicht funtkioniert.
Die übergibst zwar "oForm", aber mit Deinem momentanen Code macht das überhaupt keinen Unterschied, weil Du mit

Code: Alles auswählen

oDoc = ThisComponent
oFormU = oDoc.DrawPage.Forms(0)
das übergebene Objekt direkt wieder überschreibst (und zwar auch in der aufrufenden Prozedur).
Das sollte in diesem Fall zwar nicht weiter tragisch sein, weil eigentlich das neu geöffnete Formular sowieso "ThisComponent" - also aktiv - sein sollte, aber Parameter zu übergeben und dann direkt zu überschreiben macht in den seltensten Fällen Sinn.
Um das jedoch als potenzielle Fehlerquelle auszuschliessen, solltest Du die Filter-Prozedur vielleicht lieber folgendermaßen anpassen:

Code: Alles auswählen

Sub FilterSetz(oFormU as Object, sRezName as String)
   Dim oFormToFilter as Object
   oFormToFilter = oFormU.DrawPage.Forms(0)
   oFormToFilter.Filter = (" ""RezeptName"" = '" & sRezName & "'")
   oFormToFilter.ApplyFilter = True
   oFormToFilter.reload
End Sub
Ansonsten kann ich im Code eigentlich keine Fehler entdecken.
Man könnte höchstens noch überprüfen, ob die Datenanbindung in Deinem "Rezept"-Formular korrekt ist
petzy
Beiträge: 7
Registriert: So, 10.05.2009 17:27

Re: Formular mit Filter oder SQL Öffnen

Beitrag von petzy »

Toll, das funktioniert. :D
Vielen Dank!!
Petzy

Ich kenne keinen sicheren Weg zum Erfolg, nur einen zum sicheren Misserfolg
es jedem recht machen zu wollen.
Antworten