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
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
funktioniert für alle 3 Wertpaare problemlos. Sobald nun aberoDataSource.SetPropertyValue(sPropName,sPropValue)
erreicht wird, kommt die FehlermeldungoDBContext.RegisterObject(DSName, oDataSource)
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