Seite 1 von 3
Formularfeld als Argument an Sub übergeben
Verfasst: Fr 2. Mai 2025, 17:09
von Emandu
Hallo zusammen,
ganz kurz zu mir, da es mein erster Beitrag ist.
Ich habe früher mit Access Datenbanken erstellt , bin aber seit vielen Jahren weg von Microsoft Programmen, da ich alles was ich brauche auch in Libre Office finde.
Da auch meine "Datenbankzeit" mehr als 10 Jahre zurückliegt stehe ich jetzt vor Problemen in Sachen LibreOffice Basic und hoffe hier in so weit Hilfe zu finden, dass mich jemand in die richtige Richtung schubst.
Meine Tochter ist Hundeostheopatin und arbeitet ihre ganzen Kundendaten noch in Papierform ab.
Großspurig habe ich ihr versprochen das zu ändern und ihr mittels einer Datenbank zu helfen...und jetzt bin ich ganz kleinlaut

Kundendaten (Hauptformular) und Hundedaten (Unterformular ) sind soweit erfasst . Jetzt rufe ich im Unterformular Writer auf, da die Diagnoseberichte auch einmal länger werden können. Das funktioniert allgemein.
Meine Frage, wie kann ich die ID aus dem Unterformular beim Öffnen von Writer übergeben, damit auch das entsprechende Dokument geöffnet wird.
Meine Idee wäre die Diagnoseberichte unter dem Namen ID.odt abzuspeichern.
Hat jemand eine Idee oder einen Ansatz für mich ?
Vielen Dank
Emandu
Re: Formularfeld als Argument an Sub übergeben
Verfasst: Sa 3. Mai 2025, 08:56
von F3K Total
Moin,
wenn ich dich richtig verstehe, nutzt du die WRITER-SERIENBRIEF Funktion als Berichtsmodul, und möchtest dort aber nur einen Brief verfassen, der im Namen die ID trägt.
Vermutlich den, der gerade im Unterformular angezeigt wird.
Da gibt es diverse Möglichkeiten.
Ich würde die Vergabe des Dateinamens per Makro lösen.
Allerdings ist dir, ohne den genauen Aufbau deiner Formulare zu kennen, nicht zu helfen.
Du müsstest hier schon eine ggf. verfremdete Beispieldatei hochladen, dann wird sich sicherlich jemand finden, der dich unterstützen kann.
Gruß R
Re: Formularfeld als Argument an Sub übergeben
Verfasst: Sa 3. Mai 2025, 10:05
von Emandu
Moin aus dem Norden und vielen Dank für deine schnelle Reaktion.
Da ich , wie bereits erwähnt, erst wieder in der Einarbeitungsphase bin, habe ich mir hier im Forum einen Codeschnipsel gesucht und diesen zum Öffnen von Writer mittels Button (siehe Formular) verwendet. Das geht sicher eleganter und auch das Formular dient noch reinen Testzwecken.

- BeispielForm2.jpg (24.52 KiB) 2593 mal betrachtet

- BeispielForm.jpg (59.42 KiB) 2593 mal betrachtet
Wäre super , wenn Du mich in die richtige Richtung schubsen könntest
Eventuell habe ich auch nur ein Syntax-Problem...?
Ist eine Übergabe in der Form...Datenbank/Form/UForm/Feldname in Base möglich?
Gruß Emandu
Re: Formularfeld als Argument an Sub übergeben
Verfasst: Sa 3. Mai 2025, 21:44
von gogo
ich glaube, das ist kein Serienbrief, sondern einfach eine bestimmte Datei, also sollte es etwa so gehen:
Code: Alles auswählen
sub open_File(oEvent)
sID = str(oEvent.Source.Model.Parent.getByName("NameDesTabellenGrids").getByName("HundeID").CurrentValue())
print sID
... hier kommt Dein Code um die Datei "C:\..." & sID & ".odt" zu öffnen
end Sub
Re: Formularfeld als Argument an Sub übergeben
Verfasst: So 4. Mai 2025, 09:19
von F3K Total
Moin,
anscheinend habe ich dich doch nicht richtig verstanden.
Bitte erläutere die geplante, genaue Vorgehensweise.
Das Writerdokument existiert schon? Soll nur über das Formular geöffnet werden?
Oder soll es auch angelegt werden? Und gleich unter der ID gespeichert?
Und noch einmal: Lade Beispieldokumente, .odt und .odb hier hoch.
Screenshots helfen da nicht.
Sollten sie persönliche Daten enthalten, verfremde diese.
Gruß R
Re: Formularfeld als Argument an Sub übergeben
Verfasst: So 4. Mai 2025, 13:01
von Emandu
Hallo gogo, Hallo R
zunächst erst einmal vielen Dank dafür, dass Ihr Euch meines Problems so schnell angenommen habt.
Das es etwas länger gedauert hat bis ich reagiere ist einfach der Tatsache geschuldet, dass ich halt verstehen will, was ich da mache und dann auch probiere.....
Der Idealfall wäre für mich das beim ersten Aufruf über den Button das Dokument angelegt wird und später dann jeweils aufgerufen und bearbeitet werden kann. Schliessen und Speichern des Writer Dokuments würde jeweils direkt im Writer erfolgen, so dass der Fokus wieder an das aufrufende Formular übergeben wird.
@Gogo, wenn ich deinen Code verwende bekomme ich die Fehlermeldung
"BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: "
Hier vermute ich, dass es ein Problem beim "NamedesTabellengrids" gibt.
Habe nacheinander Tabellenname, Formularname, Feldname probiert...leider ohne Erfolg. Muss hier ein Pfad angegeben werden ?
@R das .odt kann ich als Beispiel nicht hochladen, da es vor dem ersten Aufruf ja noch nicht existiert und danach im Prinzip ein ganz normales Writer-Dokument ist/sein soll. Damit will ich einfach aus Performancegründen übergroße Textfelder im Formular verhindern.
Habe im Formularentwurf zwar eins implementiert, sehe es aber eher als Notlösung.
Die .odb habe ich kopiert . Sie ist noch sehr rudimentär, da ich erst damit begonnen habe.
Gruß Emandu
Re: Formularfeld als Argument an Sub übergeben
Verfasst: So 4. Mai 2025, 15:54
von Emandu
Hallo zusammen
gibt es eine Online-oder Download-Befehlsreferenz für LibreOffice Basic?
Den mir von gogo vorgeschlagenen Code für meine Dogs.odb würde ich gern genauer nachvollziehen können.
Ich habe mich auf HSQLDB.org umgesehen, dort auch einiges gefunden, jedoch eine komplette Sprachreferenz, in der die einzelnen Befehle, Argumente und Parameter beim Aufruf von Funktionen usw. dokumentiert sind , habe ich entweder übersehen oder ist dort nicht dabei.
Oder gibt es unter der Vielzahl der Basic Dialekte einen , an dem man sich orientieren und nach dem man suchen könnte ?
Danke und Gruß
Emandu
Re: Formularfeld als Argument an Sub übergeben
Verfasst: So 4. Mai 2025, 16:44
von F3K Total
Moin,
zur Referenz, es gibt zig Seiten,
hier findest du so einiges.
Ich empfehle die Verwendung von XRAY oder MRI (mal googeln)
Anbei nun deine Datei die zwei Makros enthält:
Code: Alles auswählen
Sub set_Url_to_Button
sURL = converttourl(replace(ThisDatabasedocument.URL,ThisDatabasedocument.Title,"") & "Diagnoseberichte/")
oSubform = ThisComponent.drawpage.Forms.getbyName("MainForm").getbyName("SubForm")
oButton = oSubform.getbyName("cmdOpenReport")
nHUndeID = oSubform.Columns.getbyName("HundeID").getint
sTargetUrl = sURL & nHUndeID & ".odt"
if not fileexists(sTargetUrl) Then
create_Report(sTargetUrl)
endif
oButton.TargetURL = sTargetUrl
End Sub
Sub create_Report(sTargetUrl)
dim Args()
Dim FileProperties1(0) as new com.sun.star.beans.PropertyValue
FileProperties1(0).Name = "Hidden"
FileProperties1(0).Value = true
oDocument = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank", 0,FileProperties1())
oDocument.storeToURL(sTargetUrl, Args())
oDocument.close -1
end sub
Das Makro
set_Url_to_Button ist an das Unterformular gebunden und wird beim Datensatzwechsel sowie nach der Datensatzaktion ausgeführt.
Es prüft, ob es im Ordner
Diagnoseberichte, der neben der .odb liegt, bereits eine Writerdatei zur aktuellen
HundeID existiert. Wenn nicht, ruft es das Makro
create_Report(sTargetUrl) auf, das eben diese fehlende Datei erzeugt.
Dann trägt es den Pfad zu dieser Datei in die TargetURL der Schaltfläche
Diagnosedaten öffnen ein, so das eben diese Datei beim Druck auf die Schaltfläche geöffnet wird.
Viel Erfolg beim Forschen,
Gruß R
Re: Formularfeld als Argument an Sub übergeben
Verfasst: So 4. Mai 2025, 17:04
von Emandu
einfach nur toll R..... !!
Ganz herzlichen Dank für Deine Hilfe.
Gruß
Emandu
Re: Formularfeld als Argument an Sub übergeben
Verfasst: Mo 12. Mai 2025, 11:53
von Emandu
Hallo R,
wegen Krankheit komme ich erst jetzt dazu , mich wieder mit dem Code auseinanderzusetzen.
Bitte gib mir doch noch eine kurze Info zu den beiden Argumenten (document, Basic), die Du in den Formulareigenschaften beim Aufruf verwendest... Ich habe dazu leider nichts gefunden
Danke und Gruß
Emandu