🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Formularfeld als Argument an Sub übergeben

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » Fr 2. Mai 2025, 17:09

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Formularfeld als Argument an Sub übergeben

Beitrag von F3K Total » Sa 3. Mai 2025, 08:56

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
Windows 11: AOO, LO Linux Mint: AOO, LO

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » Sa 3. Mai 2025, 10:05

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
BeispielForm2.jpg (24.52 KiB) 2574 mal betrachtet
BeispielForm.jpg
BeispielForm.jpg (59.42 KiB) 2574 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

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Formularfeld als Argument an Sub übergeben

Beitrag von gogo » Sa 3. Mai 2025, 21:44

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
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Formularfeld als Argument an Sub übergeben

Beitrag von F3K Total » So 4. Mai 2025, 09:19

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
Windows 11: AOO, LO Linux Mint: AOO, LO

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » So 4. Mai 2025, 13:01

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
Dateianhänge
TestDogs.odb
(18.13 KiB) 180-mal heruntergeladen

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » So 4. Mai 2025, 15:54

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Formularfeld als Argument an Sub übergeben

Beitrag von F3K Total » So 4. Mai 2025, 16:44

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
Dateianhänge
TestDogs.odb
(19.1 KiB) 165-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » So 4. Mai 2025, 17:04

einfach nur toll R..... !!
Ganz herzlichen Dank für Deine Hilfe.

Gruß
Emandu

Emandu
Beiträge: 22
Registriert: Fr 2. Mai 2025, 16:47

Re: Formularfeld als Argument an Sub übergeben

Beitrag von Emandu » Mo 12. Mai 2025, 11:53

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
Dateianhänge
Rückfrage2.jpg
Rückfrage2.jpg (69.01 KiB) 2275 mal betrachtet


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten