Datenquelle durch Code hinzufügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Datenquelle durch Code hinzufügen

Re: Datenquelle durch Code hinzufügen

von Devil » Mo, 07.09.2015 14:51

Habe das Problem jetzt durch die Verwendung verschiedener Dateiendungen gelöst

Re: Datenquelle durch Code hinzufügen

von komma4 » Fr, 04.09.2015 12:54

Du kannst unter Extras>Tabellenfilter in der ODB einstellen, welche Textdateien zu sehen sein sollen.

Oder einfach ein Verzeichnis wählen, in dem nur die zu verwendenden Dateien liegen (je nach Betriebssystem: Links verwenden)

Re: Datenquelle durch Code hinzufügen

von Devil » Fr, 04.09.2015 12:17

OK Danke, dann werde ich eine möglichkeit der abschottung suchen müssen.

Re: Datenquelle durch Code hinzufügen

von komma4 » Fr, 04.09.2015 12:15

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

von Devil » Do, 03.09.2015 15:22

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)

von Devil » Do, 03.09.2015 10:47

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.

von Johnson » Fr, 24.11.2006 16:14

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

von Johnson » Fr, 24.11.2006 12:58

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

von Hurby » Di, 19.09.2006 07:06

Danke. hoffentlich hilft mir das weiter...

MfG Hurby

von Raindancer » Mo, 18.09.2006 21:59

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

von Hurby » Mo, 18.09.2006 15:24

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

von ykcim » Mo, 18.09.2006 14:40

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

von Hurby » Mo, 18.09.2006 13:40

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

MfG Hurby

von ykcim » Mo, 18.09.2006 13:21

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

von Hurby » Mo, 18.09.2006 12:38

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

Nach oben