Funktion RegisterNewDataSource()

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

oliver1804
**
Beiträge: 39
Registriert: Fr, 27.11.2009 15:07

Funktion RegisterNewDataSource()

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Funktion RegisterNewDataSource()

Beitrag von komma4 »

oliver1804 hat geschrieben: ebenfalls wird natürlich DSName übergeben.
Wie sieht der aus?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten