Verknüpfung Base und Writer
Moderator: Moderatoren
Verknüpfung Base und Writer
Hallo!
Ich habe eine einfache Patientendatenbank und möchte nun auf dem Formular einen Button integrieren, bei dessen Betätigung folgendes geschehen soll:
1. Falls für diesen Datensatz (=Patienten) noch kein Writer-Dokument angelegt ist, soll dieses mit der Namensgebung Nachname_Vorname.odt geschehen und das (dann natürlich leere) Dokument mit Writer geöffnet werden.
2. Falls zu diesem Datensatz schon ein Writer-Dokument angelegt wurde, soll dieses mit Writer geöffnet werden.
Ich hab bis jetzt lediglich geschafft, einen Button zu integrieren, der ein - allerdings dann statisches - Writer-Dokument öffnet, was ja nicht viel Sinn macht, da jeder Patient sein eigenes odt-File haben soll, in dem dann übrigens laufend Befunde ergänzt werden.
Wie mache ich das?
Ich habe eine einfache Patientendatenbank und möchte nun auf dem Formular einen Button integrieren, bei dessen Betätigung folgendes geschehen soll:
1. Falls für diesen Datensatz (=Patienten) noch kein Writer-Dokument angelegt ist, soll dieses mit der Namensgebung Nachname_Vorname.odt geschehen und das (dann natürlich leere) Dokument mit Writer geöffnet werden.
2. Falls zu diesem Datensatz schon ein Writer-Dokument angelegt wurde, soll dieses mit Writer geöffnet werden.
Ich hab bis jetzt lediglich geschafft, einen Button zu integrieren, der ein - allerdings dann statisches - Writer-Dokument öffnet, was ja nicht viel Sinn macht, da jeder Patient sein eigenes odt-File haben soll, in dem dann übrigens laufend Befunde ergänzt werden.
Wie mache ich das?
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Mit Basic?!!crazydoc hat geschrieben:Wie mache ich das?
Code: Alles auswählen
sVerzeichnis = "d:\daten\patienten\"
sPatientenName = oForm.getByName( "Name" ).getText() & "_" & oForm.getByName( "Vorname" ).getText()
' Hilfsbibliothek für Tools: ConvertToURL()
If _
( Not GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) ) _
Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
sDateiName = ConvertToURL( sVerzeichnis & sPatientenName )
If ( FileExists( sDateiName ) ) Then
' load
oDok = LoadComponentFromURL( sDateiName, "_blank", 0, Array() )
Else
' aus Vorlage erstellen, hier: Standardvorlage
' kann natürlich auch eine benutzerdefinierte sein
oDok = LoadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
oDok.storeAsURL( sDateiName, Array() )
End If
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
Obwohl meine Programmierkenntnisse schon sehr eingerostet sind und es anno dazumal noch keine objektorientierte Programmierung gab, kann ich dir halbwegs folgen. Allerdings ergibt das Skript einen Laufzeitfehler "Objektvariable nicht belegt" in der Zeile
Die Testdatenbanksätze bestehen mittlerweile nur mehr aus 2 Feldern, die definitiv "Vorname" und "Nachname" heißen. Welche Objektvariable ist da nicht belegt?
Code: Alles auswählen
sPatientenName = oForm.getByName( "Vorname" ).getText() & "_" & oForm.getByName( "Nachname" ).getText()
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Nun, oForm muss besetzt werden (war nur ein snippet, was ich gepostet habe)
Bei einer Writer-Datei sollte diese Ergänzung helfen:
Bei einer Writer-Datei sollte diese Ergänzung helfen:
Code: Alles auswählen
oDok = ThisComponent
oForm = oDok.Drawpage.Forms(0)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
Nach Einfügen dieser zwei Zeilen am Beginn des Skripts hat sich die Fehlermeldung verändert, betrifft aber immer noch dieselbe Zeile:
BASIC Laufzeitfehler.
Es ist eine Exception aufgetreten.
Type: com.sun.star.container.NoSuchElementException
Message:.
P.S.: Wenn ich sPatientenName einen fixen Wert, z.B. "Max_Mustermann.odt" zuweise, funktioniert das ganze Konstrukt genau so wie es soll. Danke schon einstweilen!
BASIC Laufzeitfehler.
Es ist eine Exception aufgetreten.
Type: com.sun.star.container.NoSuchElementException
Message:.
P.S.: Wenn ich sPatientenName einen fixen Wert, z.B. "Max_Mustermann.odt" zuweise, funktioniert das ganze Konstrukt genau so wie es soll. Danke schon einstweilen!

- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Das Formular ist in einem Writer-Dokument? Oder in einer (der!) Base-Datei? Diese ist geöffnet... (Code durch Makros>Makros ausführen..., nicht aus Basic-Editor gestartet)?crazydoc hat geschrieben:Ich habe eine einfache Patientendatenbank und möchte nun auf dem Formular einen Button integrieren
Oder hast Du einen Dialog mit der Basic-IDE gestaltet?
Welches OOo? Betriebssystem?
Ich habe den Code in einer Base-Datei (Modul ans Formular gehängt, neues Feature der 3.0.0), das geht aber auch mit dem 2.4er Release, ischschwör.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
Das Formular ist im Base. Egal, ob ich das Makro direkt über Makros>Makros ausführen anwähle, oder ob ich den Klick auf einen Button damit verknüpfe, die Fehlermeldung bleibt die gleiche (in derselben Zeile).komma4 hat geschrieben: Das Formular ist in einem Writer-Dokument? Oder in einer (der!) Base-Datei? Diese ist geöffnet... (Code durch Makros>Makros ausführen..., nicht aus Basic-Editor gestartet)?
Sagt mir leider gar nix. Ich hab das ganze in einem Fenster geschrieben, das sich "Meine Makros & Dialoge.Standard" nennt.komma4 hat geschrieben:Oder hast Du einen Dialog mit der Basic-IDE gestaltet?
Windows XP, OOo 3.0komma4 hat geschrieben:Welches OOo? Betriebssystem?
Wie hängst ein Modul ans Formular? Erklär kurz einmal...komma4 hat geschrieben:Ich habe den Code in einer Base-Datei (Modul ans Formular gehängt, neues Feature der 3.0.0), das geht aber auch mit dem 2.4er Release, ischschwör.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Du hast ein Formular!crazydoc hat geschrieben:Sagt mir leider gar nix. Ich hab das ganze in einem Fenster geschrieben, das sich "Meine Makros & Dialoge.Standard" nennt.komma4 hat geschrieben:Oder hast Du einen Dialog mit der Basic-IDE gestaltet?
(Das andere sind in Basic erstellte Dialoge: nicht an ein Writer-(oder sonstiges) Dokument gebundene Fenster mit Kontrollelementen, die Du in einem graphischen Editor "zusammen klickst")
Kannst Du bitte mal Deinen Code hier posten (bitte in die CODE-tags setzen)... Du hast bestimmt einen Tippfehler irgendwo...
Ei: Base-Datei öffnen, Formular im Bearbeitungsmodus öffnen, Makros-Verwalten-Dialog, links: BaseDateiName:FormName lokalisieren und NEU drücken.crazydoc hat geschrieben:Wie hängst ein Modul ans Formular? Erklär kurz einmal...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
Dort steht genau das:komma4 hat geschrieben: Base-Datei öffnen, Formular im Bearbeitungsmodus öffnen, Makros-Verwalten-Dialog, links: BaseDateiName:FormName lokalisieren und NEU drücken.
Code: Alles auswählen
Sub BefundAbspeichern
oDok = ThisComponent
oForm = oDok.DrawPage.forms.getbyindex(0)
sPatientenName = oForm.getByName( "Vorname" ).getText() & "_" & oForm.getByName( "Nachname" ).getText() & ".odt"
sVerzeichnis = "C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\"
If _
( Not GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) ) _
Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
'Vollständigen Dateinamen aus Pfad und Dateinamen zusammensetzen
sDateiName = ConvertToURL( sVerzeichnis & sPatientenName )
'Entweder neues Dokument mit Namen erstellen
'oder bestehendes Dokument des entsprechenden Namens öffnen
If ( FileExists( sDateiName ) ) Then
oDok = StarDesktop.loadComponentFromURL( sDateiName, "_blank", 0, Array() )
Else
oDok = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
oDok.storeAsURL( sDateiName, Array() )
End If
End Sub
Code: Alles auswählen
oForm.getByName( "Vorname" )
Wenn man nämlich die Zeile, die mit "sPatientenname" auskommentiert und einfach
Code: Alles auswählen
sPatientenname="Max_Mustermann.odt"
Die Datenbank sieht strukturell so aus:
ID Vorname Nachname
0 Ilse GuckindieLuft
1 Max Mustermann
2 Björn Borg
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Wenn leer: dann liegt dort der Fehler, bestimmt!crazydoc hat geschrieben:Ich hab durch Herumprobieren mit den Codezeilen herausgefunden, dassgar nichts zurückliefert, also offenbar "leer" ist. Vielleicht liegt dort der Fehler.Code: Alles auswählen
oForm.getByName( "Vorname" )
"Nachname" ist gefüllt/wird zurück geliefert?
Xray kennst Du zum Untersuchen Deines Codes?
Code: Alles auswählen
xray oForm.ElementNames()
Vielleicht doch "Vornamen" oder "vorname"crazydoc hat geschrieben:Die Datenbank sieht strukturell so aus:
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
xray liefert folgendes zurück:
Index min = 0, Index max = 4
0 | String : "txtVorname"
1 | String : "lblVorname"
2 | String : "txtNachname"
3 | String : "lblNachname"
4 | String : "PushButton"
Der Austausch von "Vorname" gegen "txtVorname" oder "lblVorname" gibt immer noch einen leeren Wert zurück (msgbox sPatientenName). Und "Nachname" ist auch leer.
Index min = 0, Index max = 4
0 | String : "txtVorname"
1 | String : "lblVorname"
2 | String : "txtNachname"
3 | String : "lblNachname"
4 | String : "PushButton"
Der Austausch von "Vorname" gegen "txtVorname" oder "lblVorname" gibt immer noch einen leeren Wert zurück (msgbox sPatientenName). Und "Nachname" ist auch leer.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
Das sind die Namen der controls. Deine Textfelder heissen "txtVorname" und "txtNachname".
[lbl für: Label/Bezeichner]
Nächster Versuch:
He - Kompliment für Deine verrosteten Basic-Kenntnisse!
[lbl für: Label/Bezeichner]
Nächster Versuch:
Code: Alles auswählen
oFeld_VN = oForm.getByName( "txtVorname" )
oFeld_NN = oForm.getByName( "txtNachname" )
' xray oFeld_VN.Text
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Verknüpfung Base und Writer
Hey, dank deiner Hilfestellung (und xray - ein tooles Hilfsmittel!) hab ich es selbst hingekriegt. Schau einmal:
Ich hab dann letztendlich nur mehr zwei Fragen:
1. Bei "unserem" Erstversuch wolltest du den Inhalt einer Stringvariablen mit .getText() auslesen, letztendlich geschieht es jetzt mit .Text (was die IDE übrigens blau anstatt grün schreibt???). Was ist da der Unterschied?
2. Gibts irgendwo im Netz eine Übersicht über verfügbare Libraries (wie in unserem Fall "Tools") und deren Inhalt?
Ich konnte mich schon gar nicht mehr erinnern, wie lustig und fesselnd es ist, sich durch Codezeilen zu "quälen". Danke für deine rasche & kompetente Hilfe. Vielleicht lern ich ja trotz meines hohen Alters doch noch eine dieser neuen objektorientierten Sprachen *ggg*.
Code: Alles auswählen
Sub BefundAbspeichern
oDok = ThisComponent
oForm = oDok.DrawPage.forms.getbyindex(0)
oFeld_VN = oForm.getByName( "txtVorname" )
oFeld_NN = oForm.getByName( "txtNachname" )
'xray oFeld_VN.Text
'xray oFeld_NN.Text
sPatientenName = oFeld_VN.Text & oFeld_NN.Text & ".odt"
'xray sPatientenName
sVerzeichnis = "C:\Dokumente und Einstellungen\Nina\Eigene Dateien\TCM\"
If _
( Not GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) ) _
Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
'Vollständigen Dateinamen aus Pfad und Dateinamen zusammensetzen
sDateiName = ConvertToURL( sVerzeichnis & sPatientenName )
'Entweder neues Dokument mit Namen erstellen
'oder bestehendes Dokument des entsprechenden Namens öffnen
If ( FileExists( sDateiName ) ) Then
oDok = StarDesktop.loadComponentFromURL( sDateiName, "_blank", 0, Array() )
Else
oDok = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
oDok.storeAsURL( sDateiName, Array() )
End If
End Sub
1. Bei "unserem" Erstversuch wolltest du den Inhalt einer Stringvariablen mit .getText() auslesen, letztendlich geschieht es jetzt mit .Text (was die IDE übrigens blau anstatt grün schreibt???). Was ist da der Unterschied?
2. Gibts irgendwo im Netz eine Übersicht über verfügbare Libraries (wie in unserem Fall "Tools") und deren Inhalt?
Ich konnte mich schon gar nicht mehr erinnern, wie lustig und fesselnd es ist, sich durch Codezeilen zu "quälen". Danke für deine rasche & kompetente Hilfe. Vielleicht lern ich ja trotz meines hohen Alters doch noch eine dieser neuen objektorientierten Sprachen *ggg*.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Verknüpfung Base und Writer
.Text ist die Eigenschaft (property) des Objekts, in diesem Fall ...crazydoc hat geschrieben:den Inhalt einer Stringvariablen mit .getText() auslesen, letztendlich geschieht es jetzt mit .Text (was die IDE übrigens blau anstatt grün schreibt???). Was ist da der Unterschied?
... eine verkürztes Schreibweise (Pseudo!) für die Methode .getText().xray oFeld_VN hat geschrieben: Text string pseudo-prop, read-only
Die blaue Farbe in der IDE zeigt "Reservierter Ausdruck" an: Exras>Optionen...>OpenOffice.org>Darstellung Benutzerdefinierte Farben>Basic Syntaxhervorhebung
Die Inhalte der Bibliotheken lese ich mit Basic aus und erstelle ein neues Dokument. Eine Quelle im Netz kenne ich deshalb nichtcrazydoc hat geschrieben:2. Gibts irgendwo im Netz eine Übersicht über verfügbare Libraries (wie in unserem Fall "Tools") und deren Inhalt?

BTL2 BasicTextListe2
Herzlichen Glückwunsch zur Fertigstellung Deines ersten OOo Makros.
Lesetipps: http://www.ooomacros.org/dev.php http://www.pitonyak.org
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)