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! :D

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. :roll:


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.