Seite 1 von 2
Datenquelle durch Code hinzufügen
Verfasst: Mo, 18.09.2006 12:22
von Hurby
Hallo,
weiss Jemand wie ich durch ein Makro eine Datenquelle hinzufügen und Registrieren kann?
MfG Hurby
Verfasst: Mo, 18.09.2006 12:28
von ykcim
In der Kurzfassung:
Code: Alles auswählen
DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
NeueDatenBank= DatenBanken.createinstance()
NeueDatenBank.url="sdbc:dbase:c:\text\daten"
NeueDatenBank.DatabaseDocument.storeAsURL("file:///c:/test.odb",getArgs())
DatenBanken.registerObject("NeueDB", NeueDatenBank)
Der Parameter url ist wichtig.
Der wichtigste Parameter ist "URL" in diesem steht die eigentliche Verknüpfung zu der Datenbank.
Der Syntax für diese Verknüpfung ist sdbc:treiber:datenbank.
Beispiele
Dbase
sdbc:dbase:c:\text\daten
Tabelle
sdbc:calc:c:\test.ods
ODBC
sdbc:odbc:Visual FoxPro-Datenbank
mfg
Michael
Verfasst: Mo, 18.09.2006 12:38
von Hurby
Erstmal danke,
ich habe aber nun eine Textdatei mit der Endung GWD, statt TXT und die Feldtrennzeichen sind ^, weist Du auch wie ich das nun mit angeben muss?
MfG hurby
Verfasst: Mo, 18.09.2006 13:21
von ykcim
Sorry, muß ich passen.
Nachdem ich gemerkt habe das man auf diesen Weg (sdbc:flat:...) die Textdatei nur lesend bekommt, habe ich nicht weiter gemacht.
mfg
Michael
Verfasst: Mo, 18.09.2006 13:40
von Hurby
Lesend reicht mir völlig aus, kannst du mir evtl. deine Ergebnisse etwas näher erläutern oder so???
MfG Hurby
Verfasst: Mo, 18.09.2006 14:40
von ykcim
Also ich habe mal meinen Code-Fragmenten gewühlt
Man muß zusätzlich noch die Werte für die Propertie Info setzen.
Code: Alles auswählen
DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
NeueDatenBank= DatenBanken.createinstance()
NeueDatenBank.url="sdbc:flat:D:\test"
Dim myProps(1) as New com.sun.star.beans.PropertyValue
myProps(0).Name="Extension"
myProps(0).Value="gwd"
myProps(1).Name="FieldDelimiter"
myProps(1).Value="^"
NeueDatenBank.Info=myProps()
dim getargs()
NeueDatenBank.DatabaseDocument.storeAsURL("file:///c:/test23.odb",getArgs())
DatenBanken.registerObject("NeueDB1", NeueDatenBank)
mfg
Michael
Verfasst: Mo, 18.09.2006 15:24
von Hurby
Danke,
Du weisst nicht zufällig wie man
createUnoService("com.sun.star.sdb.DatabaseContext") in VB6.0 einbringt oder ?
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Stardesktop = objServiceManager.createinstance("com.sun.star.frame.Desktop")
hab ich schon, aber der UNO-Service will nicht...
MfG Hurby
Verfasst: Mo, 18.09.2006 21:59
von Raindancer
Hallöle Hurby,
Hurby hat geschrieben:...Du weisst nicht zufällig wie man
createUnoService("com.sun.star.sdb.DatabaseContext") in VB6.0 einbringt oder ? ...
Deine Frage kann ich nicht beantworten. Aber ich habe Dich doch richtig verstanden, dass Du von VB bzw. VBA auf OOo zugreifen möchtest?
Richtig?
Dann hilft Dir vielleicht der folgende Link?
(Programming OpenOffice.org with Visual Basic)
http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html
Gruß
Ralf
Verfasst: Di, 19.09.2006 07:06
von Hurby
Danke. hoffentlich hilft mir das weiter...
MfG Hurby
Verfasst: Fr, 24.11.2006 12:58
von Johnson
Hallo zusammen,
ich möchte ebenfalls einen Serienbrief in OOo erzeigen.
Als Grundlage dazu liefert mir ein anderes System eine Datenquelle. Nennen wir sie "C:\DataSource\Recipients.ods".
Wenn ich jetzt versuche diese Datei als Datenquelle zu registieren:
oo_sm ist ein ServiceManager-Objekt
str_filepath ist der Dateiname inkl. Verzeichnis
str_name ist der Name der Datenquelle unter der sie registiert werden soll.
Code: Alles auswählen
Function OoInstallDatasource(oo_sm As Variant, _
str_filepath As String, str_name As String) As Boolean
Dim oo_dc As Variant ' DatasourceContext
Dim oo_ds As Variant ' DataSource
Dim oo_dbdoc As Variant ' DatabaseDocument
Dim arr() As Variant ' registration parameter
' ### initialize ###
OoInstallDatasource = False
' ### register data source file ###
' get database context service
Set oo_dc = oo_sm.createInstance("com.sun.star.sdb.DatabaseContext")
' remove existing datasource named by str_name
' If (oo_dc.hasByName(str_name)) Then
' If OoRemoveDataSource(oo_sm, str_name) = False Then Goto terminate
' End If
' create new datasource instance
ReDim arr(0)
Set arr(0) = OoMakePropertyValue(oo_sm, "Overwrite", False)
Set oo_ds = oo_dc.createInstance()
Set oo_dbdoc = oo_ds.DatabaseDocument()
Call oo_dbdoc.storeAsURL(ConvertToURL(str_filepath), arr)
Call oo_dbdoc.store
oo_ds.URL = "sdbc:calc:" & ConvertToURL(str_filepath)
' register data source
Call oo_dc.registerObject(str_name, oo_ds)
' Call oo_dc.revokeObject(str_name)
' Call oo_dc.registerObject(str_name, oo_ds)
' ### return value ###
OoInstallDatasource = True
' ### terminate ###
terminate:
If Not (IsEmpty(oo_ds)) Then Set oo_ds = Nothing
If Not (IsEmpty(oo_dc)) Then Set oo_dc = Nothing
Exit Function
End Function
Das Problem ist jetzt, daß die Datei...
1. Jedesmal überschrieben wird. Die Datenquelle also komplett leer ist.
2. Die Datenquelle scheint´s nicht korrekt registiert wird, da ich sie nicht öffnen kann.
Gibt es eine Möglichkeit eine bestehende Datenquelle per Script zu registieren?
Gruß
Johnson
Verfasst: Fr, 24.11.2006 16:14
von Johnson
Ich habs!
Die URL-Property des Datasource-Objekts bekommt den Dateinamen der eigentlichen Datenquelle ("C:\DataSource\Recipients.ods").
Der Parameter der storeAsURL-Methode des DatabaseDocument-Objekts bekommt einen neuen Dateinamen ("C:\DataSource\Recipients.odb").
Somit kann ich also Mittels der Recipients.odb auf die Inhalte der Recipients.ods zugreifen.
Ein wunderschönes Wochenende wünsch ich euch
Johnson
Verfasst: Do, 03.09.2015 10:47
von Devil
Hallo, ich habe den Code, wie er Hier genannt wurde um eine Datenquelle zu erstellen und registrieren mal ausprobiert. Allerdings wird mir an der Stelle
Code: Alles auswählen
NeueDatenBank.DatabaseDocument.storeAsURL("file:///C:/Users/Devil/Desktop/OpenOffice Makro/TestSeriendruck.odb",getArgs())
eine Fehlermeldung ausgeworfen: BASIC Laufzeitfehler, Objektvariable nicht belegt.
Hier nochmal der Code im Ganzen:
Code: Alles auswählen
DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
NeueDatenBank= DatenBanken.createinstance()
NeueDatenBank.url="sdbc:flat:C:\Users\Devil\Desktop\OpenOffice Makro\TestSeriendruck.TXT"
NeueDatenBank.DatabaseDocument.storeAsURL("file:///C:/Users/Devil/Desktop/OpenOffice Makro/TestSeriendruck.odb",getArgs())
DatenBanken.registerObject("NeueDB", NeueDatenBank)
Nachtrag:
Ich weis nicht ob es von bedeutung ist dass ich das Makro aus einem Writer-Dokument heraus Starte, möchte es aber auch nicht verheimlichen.
Re: Datenquelle durch Code hinzufügen
Verfasst: Do, 03.09.2015 15:22
von Devil
2. Nachtrag:
Mit der Version mit den Property-Einstellungen klappt es jetzt... Doch jetzt erstellt das Makro eine Datenbank, in welche jede ".TXT" - Datei als Tabelle angelegt wird, welche in dem entsprechenden Verzeichnis ist, obwohl ich nicht das Verzeichnis sondern eine Spezielle Txt-Datei angegeben habe.
Hier der Code wie er bei mir verbaut ist:
Code: Alles auswählen
DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
NeueDatenBank= DatenBanken.createinstance()
NeueDatenBank.url="sdbc:flat:C:\Users\Devil\Desktop\OpenOffice Makro\Test.TXT"
Dim myProps(1) as New com.sun.star.beans.PropertyValue
myProps(0).Name="Extension"
myProps(0).Value="txt"
myProps(1).Name="FieldDelimiter"
myProps(1).Value=";"
NeueDatenBank.Info=myProps()
dim getargs()
NeueDatenBank.DatabaseDocument.storeAsURL("file:///C:/Users/Devil/Desktop/OpenOffice Makro/Test.odb",getArgs())
DatenBanken.registerObject("NeueDB1", NeueDatenBank)
Re: Datenquelle durch Code hinzufügen
Verfasst: Fr, 04.09.2015 12:15
von komma4
Devil hat geschrieben:eine Datenbank, in welche jede ".TXT" - Datei als Tabelle angelegt wird, welche in dem entsprechenden Verzeichnis ist, obwohl ich nicht das Verzeichnis sondern eine Spezielle Txt-Datei angegeben habe.
Das ist aber das normale Verhalten beim Spezifizieren von Textdateien als Datenquelle: es wird ein Verzeichnis angegeben und die darin enthaltenen Dateien als Tabelle angezeigt.
Anders geht's nicht
Re: Datenquelle durch Code hinzufügen
Verfasst: Fr, 04.09.2015 12:17
von Devil
OK Danke, dann werde ich eine möglichkeit der abschottung suchen müssen.