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 SUB
Robert
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