von oliver1804 » Mi, 30.06.2010 22:02
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
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]
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]
das dann als PropertyList() an RegisterNewDataSource() übergeben wird - ebenfalls wird natürlich DSName übergeben.
[code]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[/code]
[quote]oDataSource.SetPropertyValue(sPropName,sPropValue)[/quote]
funktioniert für alle 3 Wertpaare problemlos. Sobald nun aber
[quote]oDBContext.RegisterObject(DSName, oDataSource)[/quote]
erreicht wird, kommt die Fehlermeldung
[quote] 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..
[/quote]
Was mache ich nun falsch? Oder liegt es an der mitgelieferten Funktion RegisterNewDataSource()?
Oliver