Datenquelle durch Code hinzufügen
Moderator: Moderatoren
Datenquelle durch Code hinzufügen
Hallo,
weiss Jemand wie ich durch ein Makro eine Datenquelle hinzufügen und Registrieren kann?
MfG Hurby
weiss Jemand wie ich durch ein Makro eine Datenquelle hinzufügen und Registrieren kann?
MfG Hurby
In der Kurzfassung:
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
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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
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
Nachdem ich gemerkt habe das man auf diesen Weg (sdbc:flat:...) die Textdatei nur lesend bekommt, habe ich nicht weiter gemacht.
mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
Also ich habe mal meinen Code-Fragmenten gewühlt 
Man muß zusätzlich noch die Werte für die Propertie Info setzen.
mfg
Michael

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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
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
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
-
- **
- Beiträge: 37
- Registriert: Mo, 13.02.2006 23:55
- Wohnort: Deutschland
Hallöle Hurby,
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
Deine Frage kann ich nicht beantworten. Aber ich habe Dich doch richtig verstanden, dass Du von VB bzw. VBA auf OOo zugreifen möchtest?Hurby hat geschrieben:...Du weisst nicht zufällig wie man
createUnoService("com.sun.star.sdb.DatabaseContext") in VB6.0 einbringt oder ? ...
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
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.
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
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
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
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

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
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
eine Fehlermeldung ausgeworfen: BASIC Laufzeitfehler, Objektvariable nicht belegt.
Hier nochmal der Code im Ganzen:
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.
Code: Alles auswählen
NeueDatenBank.DatabaseDocument.storeAsURL("file:///C:/Users/Devil/Desktop/OpenOffice Makro/TestSeriendruck.odb",getArgs())
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.
Zuletzt geändert von Devil am Do, 03.09.2015 16:15, insgesamt 1-mal geändert.
Höllische Grüße
Devil
Devil
Re: Datenquelle durch Code hinzufügen
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:
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)
Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Datenquelle durch Code hinzufügen
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.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.
Anders geht's nicht
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)
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)
Re: Datenquelle durch Code hinzufügen
OK Danke, dann werde ich eine möglichkeit der abschottung suchen müssen.
Höllische Grüße
Devil
Devil