Gelöst: odt, pdf, ... in Base-Tabelle speichern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Gelöst: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Ich moechte ein Textdukument in einer Base-Tabelle als Objekt speichern und ueber ein Base-Formular oeffnen.
GGf. reicht auch eine Referenz als Link aud die Datei, die ich aus der Base-Anwendungaber oeffen moechte.

Ich habe mit "Hyperlink", "Dateiauswahl" und "GrafischesSteuerelement" experimentiert, aber keine Loesung finden koennen.

Hat jemand ein Makro fùer diesen Zweck oder einen anderen Rat?

Danke
Zuletzt geändert von WSO am Mo, 21.07.2014 22:10, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von RobertG »

Hallo WSO,

nimm die Beispieldatenbank
Beispiel_Mailstart_Dateiaufruf aus dem aktuellen Handbuch. Du musst den Link zur Datei in der Datenbank speichern. Wenn Du mit dem Makro auf das Feld zugreifst, dann wird das Programm aufegrufen, was zu dem Dateityp in Deinem System vorgesehen ist:

Code: Alles auswählen

SUB Datei_Aufruf
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld AS STRING
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm=oDrawpage.Forms.getByName("Formular")
	oFeld=oForm.getByName("Dateiauswahl")
	REM Den Text aus der Dateiauswahl auslesen
	stFeld=oFeld.Text
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(stFeld)
	oShell.execute(stFeld,,0)
END SUB
Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Danke, verstehe den Loesungsansatz,
bekomme aber beim Zugriff aufdas Formular einen Laufzeitfehler bei der Zuweisung oForm:

Ein Scripting Framework Fehler trat während der Ausführung vom Basic-Skript vnd.sun.star.script:Standard.Fakturierung.Datei_Aufruf?language=Basic&location=document auf.

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: .

In der Beispieldatenbank geht alles, in meiner Testdatenbank kam beim original-code dieser Fehler.
Habe den Formularnamen im oForm-Statement daraufhin angepasst, hat aber nichts gebracht:

SUB DateiAufruf

DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM oShell AS OBJECT
DIM stFeld AS STRING
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName("FORMkunde")
oFeld=oForm.getByName("Dateiauswahl")
REM Den Text aus der Dateiauswahl auslesen
stFeld=oFeld.Text
REM Start des Files mit der entsprechenden URL-Verbindung
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
stFeld = convertToUrl(stFeld)
oShell.execute(stFeld,,0)
END SUB
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von RobertG »

Hallo WSO,

oForm=oDrawpage.Forms.getByName("FORMkunde")
oFeld=oForm.getByName("Dateiauswahl")

An welcher Stelle ist "NoSuchElement"?

oForm: Das ist das Formular, das im Formularnavigator angezeigt wird - nicht der Name des Formulars in der *.odb-Datei
oFeld: Das Name des Feldes, in dem der Link steht

Damit der Link auch korrekt im Formular landet würde ich übrigens die Dateiauswahl nutzen und damit die Datei suchen. Anschließend mit einem Makro von dort aus den Wert in ein Textfeld übertragen, das abgespeichert werden soll. Das Dateiauswahlfeld hat keine Verbindung zur Datenbank.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Hallo Robert,
"NoSuchElement" kommt bei: oForm=oDrawpage.Forms.getByName ("Formular")

Im Formularnavigator des aufrufenden Formulars konnte ich keinen Formularnamen finden.
Habe dasFormular im Bearbeitungsmodus aufgerufen, ueber die Schaltflaeche den Formularnavigator aufgerufen, dort aber nichts gefunden.
Das trift auch auf die Besispieldatenbank zu, wo das Makro aber funktioniert.

Bin erstmal wieder ratlos.

Gruss Wolfram
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Hallo acco,
dachte ich auch,geht aber nicht.
Habe die Formulare nach dem Anlegen umbenannt, vielleicht ist das noch ein Hinweis.
Total merkwurdig ist, dass ich im Formularnavigator nicht ein Element angezeigt bekomme.

Ich habe im Einsatz:
Version: 4.1.3.2
Build ID: 410m0(Build:2)
unter Mint 16 X64

Wuerde die kleine DB gerne imAnhang mitsenden, aber:
"Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt"

Hier ein Download-Link aus meiner Dropbox:
https://www.dropbox.com/s/vwfno0arx04xswu/HM.odb

Vielen Dank vorab und Gruss von den kanarischen Inseln,
Wolfram
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von RobertG »

Hallo Wolfram,

ich habe eben alle Deine Formulare durchgesehen. Die Bezeichnung ist überall "MainForm".

Warum Du das mit dem Formularnavigator nicht zu Gesicht bekommst ...

Jetzt brauchst Du noch den Namen des Feldes. Die Bezeichnung des Dateiauswahlfeldes lautet "Dateiauswahl1". Der Name des Feldes daneben, das wohl die Dateiauswahl aufnehmen soll, "obj".

Auch wenn Du tatsächlich Probleme mit dem Navigator hast: Mit einem rechten Mausklick auf ein Formularfeld erhältst Du über das Kontextmenü des Formularfeldes auch die Eigenschaften (und damit den Namen" des Formulars.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Alles klar, ich wusste nicht, dass man in den Formulareigenschaften den Formularnamen nochmal festlegen muss.
Funktioniert jetzt einwandfrei.
Danke fuer die schnelle Hilfe,
Wolfram
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von RobertG »

Hallo Wolfram,

es gibt ja zum einen die Formulardokumente, die aufgebaut sind wie Writer-Dokumente. Deren Namen siehst Du in der *.odb-Datei. Dann gibt es ohne weiteres mehrere Formularelemente, die unter einem Formularnamen oder auch verschiedenen Formularnamen in eben so einem Writer-Dokument liegen. Du hast bisher nur Hauptformulare in Deinen Writer-Formularen. Es können aber sowohl Unterformulare als auch Formulare nebeneinander auf der Zeichnungsoberfläche liegen. Ich war hier gerade wieder mit einem Dokument beschäftigt, das in der *.odb-Datei "Gericht" heißt. In diesem *.odb-Formular liegen auf der Zeichnungsoberfläche, sichtbar im Formularnavigator, 3 Formulare nebeneinander: "Speiseplan", "Filter", "Gericht". Zum "Speiseplan" existiert ein Unterformular, beim "Gericht" 2 Unterformulare, von denen eines noch ein weiteres Unterformular hat. Das sieht nach außen zwar wie ein Formular aus, ist es aber von der Verbindung her nicht.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

ok, baue mir mal eine komplexere Struktur, dann wird er Formularnavigator wohl verstaendlicher.
Ist ohnehin jetzt erforderlich, den die externen Dokumente sollen 1-->n angelegt werden.

Habe viele Jahre mit Access gearbeitet und arbeite mich gerade in oO ein.
Gibt es eigentlich eine allgemeine Doku zu den wesentlichen Unterschieden oder sogar eine Migationshilfe Access/VBA-Anwendungen?
Konnte ich bislang nicht finden.

Gruss
Wolfram
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: odt, pdf, ... in Base-Tabelle speichern

Beitrag von WSO »

Hallo Zusammen,
hier das fertige Beispiel:

In einem Formular "FORMKunde" sind u.a. foldende Felder:
Dateiauswahl ("Dateiauswahl1")
Formatiertes Feld ("obj", nur Anzeige)
Schaltflaeche zum
Schaltflaeche zum anzeigen des verknuepften Dokuments

Die Schaltflaechen rufen jeweils ein Makro auf:

1. Speichern der Dateiauswahl

Code: Alles auswählen

SUB DSN_Speichern
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage


	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	
	DIM sName AS STRING
	DIM nName AS STRING
	

	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
		REM Lage des Feldes in dem entsprechenden Formular aufsuchen
		
	oForm=oDrawpage.Forms.getByName ("FORMkunde")
	oFeld=oForm.getByName("Dateiauswahl1")
		REM Den Text aus der Dateiauswahl auslesen
		
	stFeld=oFeld.Text
	ThisComponent.DrawPage.Forms.getByIndex(0).getByName("obj").text = stFeld
	ThisComponent.DrawPage.Forms.getByIndex(0).getByName("Dateiauswahl1").text = " "
	
	nName = oForm.findColumn("kud_obj")	
	oForm.updateString(nName, stFeld)
	
	oForm.updateRow()

	ThisComponent.DrawPage.Forms.getByIndex(0).getByName("Dateiauswahl1").text = " "
  	  
END SUB	
2. Dokument anzeigen

Code: Alles auswählen

SUB Dateianzeigen
	
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld AS STRING
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm=oDrawpage.Forms.getByName ("FORMkunde")
	oFeld=oForm.getByName("obj")
	REM Den Text aus der Dateiauswahl auslesen
	stFeld=oFeld.Text
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	stFeld = convertToUrl(stFeld)
	oShell.execute(stFeld,,0)
END SUB
Antworten