Gelöst: odt, pdf, ... in Base-Tabelle speichern
Moderator: Moderatoren
Gelöst: odt, pdf, ... in Base-Tabelle speichern
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
			
			
													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.
									
			
						
										
						Re: odt, pdf, ... in Base-Tabelle speichern
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:
Gruß
Robert
			
			
									
						
										
						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 SUBRobert
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						"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
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
Alles klar, ich wusste nicht, dass man in den Formulareigenschaften den Formularnamen nochmal festlegen muss.
Funktioniert jetzt einwandfrei.
Danke fuer die schnelle Hilfe,
Wolfram
			
			
									
						
										
						Funktioniert jetzt einwandfrei.
Danke fuer die schnelle Hilfe,
Wolfram
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
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
			
			
									
						
										
						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
Re: odt, pdf, ... in Base-Tabelle speichern
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
2. Dokument anzeigen
			
			
									
						
										
						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	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