Datenquelle durch Code hinzufügen

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

Moderator: Moderatoren

Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Datenquelle durch Code hinzufügen

Beitrag von Hurby »

Hallo,

weiss Jemand wie ich durch ein Makro eine Datenquelle hinzufügen und Registrieren kann?

MfG Hurby
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Beitrag 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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Beitrag von Hurby »

Lesend reicht mir völlig aus, kannst du mir evtl. deine Ergebnisse etwas näher erläutern oder so???

MfG Hurby
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Beitrag 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
Raindancer
**
Beiträge: 37
Registriert: Mo, 13.02.2006 23:55
Wohnort: Deutschland

Beitrag 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
Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Beitrag von Hurby »

Danke. hoffentlich hilft mir das weiter...

MfG Hurby
Johnson
Beiträge: 6
Registriert: Fr, 24.11.2006 12:43

Beitrag 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
Johnson
Beiträge: 6
Registriert: Fr, 24.11.2006 12:43

Beitrag 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
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Beitrag 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.
Zuletzt geändert von Devil am Do, 03.09.2015 16:15, insgesamt 1-mal geändert.
Höllische Grüße
Devil
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Datenquelle durch Code hinzufügen

Beitrag 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)
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datenquelle durch Code hinzufügen

Beitrag 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
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)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Datenquelle durch Code hinzufügen

Beitrag von Devil »

OK Danke, dann werde ich eine möglichkeit der abschottung suchen müssen.
Höllische Grüße
Devil
Antworten