Seite 1 von 1

Funktion RegisterNewDataSource()

Verfasst: Mi, 30.06.2010 22:02
von oliver1804
Hallo,

in den von OpenOffice zur Verfügung gestellten Makros gibt es die Funktion <RegisterNewDataSource()>, die ich gerne verwenden möchte. Sie befindet sich unter Tools.Misc und wird über die im selben Modul befindliche Funktion <ConnecttoDatabase()> aufgerufen, wenn diese Funktion eine nicht registrierte Datenquelle findet. Das ist genau der Weg, den ich beschreiten möchte, da ich für den Fall einer nicht in OpenOffice registrierten Datenquelle den Versuch einer automatische Registrierung möchte.

Zunächst hab ich also ein Array mit Übergabeparametern erstellt:

Code: Alles auswählen

Sub setADSteuerProp()
	aConADsteuerProp(0,0) = "URL"
	aConADsteuerProp(0,1) = "sdbc:odbc:ADSteuerung"
	aConADsteuerProp(1,0) = "User"
	aConADsteuerProp(1,1) = ""
	aConADsteuerProp(2,0) = "Password"
	aConADsteuerProp(2,1) = ""
End Sub
das dann als PropertyList() an RegisterNewDataSource() übergeben wird - ebenfalls wird natürlich DSName übergeben.

Code: Alles auswählen

Function RegisterNewDataSource(DSName as  String, PropertyList(), Optional DriverProperties() as New com.sun.star.beans.PropertyValue)
Dim oDataSource as Object
Dim oDBContext as Object
Dim oPropInfo as Object
Dim i as Integer
    oDBContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    oDataSource = createUnoService("com.sun.star.sdb.DataSource")
	For i = 0 To Ubound(PropertyList(), 1)
		sPropName = PropertyList(i,0)
		sPropValue = PropertyList(i,1)
		oDataSource.SetPropertyValue(sPropName,sPropValue)
	Next i
	If Not IsMissing(DriverProperties()) Then
		oDataSource.Info() = DriverProperties()
	End If
    oDBContext.RegisterObject(DSName, oDataSource)
	RegisterNewDataSource () = oDataSource
End Function
oDataSource.SetPropertyValue(sPropName,sPropValue)
funktioniert für alle 3 Wertpaare problemlos. Sobald nun aber
oDBContext.RegisterObject(DSName, oDataSource)
erreicht wird, kommt die Fehlermeldung
BASIC-Laufzeitfehler,
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message: Die Datenquelle wurde nicht gespeichert. Bitte verwenden Sie die Schnittstelle
XStorable, um die Datenquelle zu speichern..

Was mache ich nun falsch? Oder liegt es an der mitgelieferten Funktion RegisterNewDataSource()?

Oliver

Re: Funktion RegisterNewDataSource()

Verfasst: Sa, 03.07.2010 07:22
von komma4
oliver1804 hat geschrieben: ebenfalls wird natürlich DSName übergeben.
Wie sieht der aus?