[GELÖST] Datenbank vergisst Datenquellenpfad

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

Moderator: Moderatoren

Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

[GELÖST] Datenbank vergisst Datenquellenpfad

Beitrag von Devil » Di, 08.09.2015 09:21

Hallo, Ich registriere eine Datenbank per Makro in OpenOffice. Diese Datenbank existriert bereits vorher als .odb. Das funktioniert auch soweit. Nur wenn ich die Datenbank ansehen will im Writer (F4), dann wird mir folgende Fehlermeldung ausgeworfen:

Die Verbindung zur Datenquelle Adressen konnte nicht Hergestellt werden.
Die URL 'file:///../Adressen.0003/' ist ungültig. es Kann keine Verbindung hergestellt werden.

Die Datei Adressen.0003 ist die (von der Endung her umbenannte) TXT-Datei, aus welcher ich die Datenbank erstellt habe.

Ich registriere die Datenbank mit folgendem Code:

Code: Alles auswählen

	DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
	NeuDB=DatenBanken.getByname("file:///"+PfadODBDatei)
	DatenBanken.registerobject("Adressen",NeuDB)
Wenn ich die Datenbank manuell registriere besteht kein Problem.

Erstellt habe ich die Datenbankdatei auch Per Makro, allerdings nicht im Selben makro.
Erstellen der Datenbankdate:

Code: Alles auswählen

function CREATE_SBRIEF_DATABASE(DOC_Path as String) 							
Dim DP as String
Dim ExtensionPos as Integer
Dim DPOhneExtension as String
Dim DPODB as String
Dim DPTXT as String
Dim Extension as String

DP = DOC_Path													
	REM DokumentenPfad
ExtensionPos = InStr(DP,".")										
	REM Position des Punktes im String
DPohneExtension = mid(DP, 1, ExtensionPos)						
	REM Reiner Dateipfad ohne Extension aber mit einem Punkt am Ende
Extension = mid(DP, ExtensionPos - 4, 4)							
	REM Endung für TXT-Datei ausfiltern
DPODB = DPOhneExtension + "odb"								
	REM Speicherpfad der ODB-Datei
DPTXT = mid(DPOhneExtension, 1, ExtensionPos - 11)+ "Adressen." + Extension	
	REM Pfad der TXT-Datei auf "Pfad+Adressen.Endung" ändern
DPODB = Replace(DPODB,"\","/")									
	REM in ODB-Pfad \ durch / ersetzen

	DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")	
		REM Service zur Datenbankerstellung
	NeueDatenBank= DatenBanken.createinstance()					
		REM Datenbank-Instanz erstellen

	NeueDatenBank.url="sdbc:flat:"+DPTXT						
		REM Datenquelle für die Datenbank

Dim myProps(1) as New com.sun.star.beans.PropertyValue				
	REM Einstellungen der Propertys zum einlesen der TXT-Datei
 myProps(0).Name="Extension"									
 	REM Property Endung
 myProps(0).Value=Extension										
 	REM Eingeben der Endung
 myProps(1).Name="FieldDelimiter"								
 	REM Feldtrenner in der TXT-Datei
 myProps(1).Value=";"										
 	REM Feldtrenner auf ";" setzen

	NeueDatenBank.Info=myProps()								
		REM Propertys setzen

dim getargs()

Print DPODB
	
	NeueDatenBank.DatabaseDocument.storeAsURL("file:///"+DPODB,getArgs())
		REM Datenbank Speichern
	DatenBanken.registerObject("Adressen", NeueDatenBank)				
		REM Datenbank Registrieren (Datenbankname, Datenbankpfad)
END Function
Zuletzt geändert von Devil am Di, 08.09.2015 11:11, insgesamt 1-mal geändert.
Höllische Grüße
Devil

Stephan
********
Beiträge: 10101
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datenbank vergisst Datenquellenpfad

Beitrag von Stephan » Di, 08.09.2015 10:57

Ich registriere die Datenbank mit folgendem Code:
der Code sieht gut aus, dabei kann ich aber nicht die Richtigkeit der Pfadangabe in:

Code: Alles auswählen

NeuDB=DatenBanken.getByname("file:///"+PfadODBDatei)
beurteilen, weil die dortige Variable nirgends sonst auftaucht.


jenseits eines möglichen Code-FEhlers könnte es vielleicht auch sein (aber ich bin nicht sicher) das Du einmalig ein aktuelles/neues Anwendungsfenster öffnen musst, damit das ERgebnis des Makros auch in der GUI (grafical user Interface = 'Bedienoberfläche') wirksam wird.
(Die benannte Fehlermeldung schliesst das aber nahezu aus)


Gruß
Stephan

Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Datenbank vergisst Datenquellenpfad

Beitrag von Devil » Di, 08.09.2015 11:10

Habe meinen Fehler gerade bemerkt und muss mich entschuldigen... es war meine Schusseligkeit... ich habe den Pfad der Datenbank falsch übergeben...

Die Codezeile sah(mit eingebautem Pfad statt Variable) so aus:

Code: Alles auswählen

NeuDB=DatenBanken.getByname("file:///C:\Users\Devil\Dokumente\Test.ODB")
Allerdings darf darin kein Backslash sein, wodurch dieser (meiner meinung nach etwas verwirrende) Fehler zustande kommt...

Habe jetzt den Pfad mit einem Replace Befehl bearbeitet und jetzt funktioniert es.

Jetzt Sieht mein Code so aus:

Code: Alles auswählen

   DatenBanken = createUnoService("com.sun.star.sdb.DatabaseContext")
   PfadODBDatei = Replace(PfadODBDatei,"\","/")
   NeuDB=DatenBanken.getByname("file:///"+PfadODBDatei)
   DatenBanken.registerobject("Adressen",NeuDB)
Höllische Grüße
Devil

Karolus
********
Beiträge: 7063
Registriert: Mo, 02.01.2006 19:48
Kontaktdaten:

Re: [GELÖST] Datenbank vergisst Datenquellenpfad

Beitrag von Karolus » Di, 08.09.2015 13:29

Es gibt in Basic die Funktion

Code: Alles auswählen

ConvertToUrl(  pfad )
die tut das was man bei dem Namen erwartet...
AOO4, LO4.3, LO4.4 LinuxMint17.2

Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: [GELÖST] Datenbank vergisst Datenquellenpfad

Beitrag von Devil » Di, 08.09.2015 14:09

Danke :D
die kannte ich noch nicht :D
Höllische Grüße
Devil

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste