🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ 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. 🤗

Datensatz mit Listenfeld wählen und Schaltfläche zum Link öffnen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
GVS84
Beiträge: 2
Registriert: Fr 18. Feb 2022, 09:50

Datensatz mit Listenfeld wählen und Schaltfläche zum Link öffnen

Beitrag von GVS84 » Fr 18. Feb 2022, 11:46

.
Hintergrund:
Moin Leute. Ich habe eine große Sammlung an Filmen auf DVD und Blu-ray. Letzte Woche kam mir der Gedanke, alles wie nett es doch wäre, auf Knopfdruck weiteren Infos zum Film und Schauspieler zu haben, oder sich einen Trailer ansehen zu können. Schwub, die Idee einer Datenbank war geboren (auch als Testprojekt für meine noch viel größere Retro-Spiele Sammlung mit mehr als 1000 Spielen). Dummerweise hatte ich bis zu diesem Zeitpunkt absolut keine Ahnung wie sowas geht oder wie Datenbanken überhaupt funktionieren. Also wirklich Null Ahnung von gar nichts.

An dieser Stelle ein dickes Dankeschön an Lucky Müller und TheFrugalComputerGuy für die Tutorials auf YouTube, dank denen ich mich in die Materie einarbeiten konnte!

Es hat mich fast eine Woche gekostet und ich musste insgesamt zweimal komplett von Vorne anfangen, aber ich bin wirklich sehr zufrieden mit dem Ergebnis! Klar, ein Profi hätte nicht mal eine Stunde für sowas gebraucht, aber wenn man erstmal lernen muss, was überhaupt eine M zu N Beziehung ist und warum ich ohne diese einem Film nicht beliebig viele Tags (Genres) zuordnen kann, schlägt man sich schonmal die halbe Nacht um die Ohren...


Aktueller Stand:
Ich nutze die aktuelle LibreOffice Version 7.3.0 und arbeite auf einem Windows 10 PC (64 Bit).

Die Datenbank ist so weit eigentlich fertig. Alle Tabellen sind erstellt und die Spalten mit aussagekräftigen Namen versehen, um stets die Übersicht zu behalten. Die Beziehungen sind verknüpft und die Tabellen mit einigen Testdaten befüllt, um die Funktionen der Formulare zu testen.

Ich habe insgesamt 4 Formulare. Das erste dient zum Eingeben und bearbeiten der Daten der Filme. Über ein Unterformular kann ich zudem 'on the fly' neue Tags (Genres) erstellen, ohne extra in die entsprechende Tabelle gehen zu müssen. Das zweite Formular ist praktisch dasselbe, dient aber zum Eingeben der Daten der Schauspieler (Actor). Supi!

Das dritte Formular kann keine Daten schreiben oder ändern und dient zum Durchsuchen der Filme, inklusive einer Anzeige des Covers. Über eine paar Schaltflächen kann ich bequem durch die Datensätze durchblättern. Zudem konnte ich mithilfe dieses Beitrages im Forum von F3K Total eine Schaltfläche einfügen, mit der den (nicht sichtbaren) Link zu einem Trailer auf YouTube öffnen kann. Klasse!

Das Makro dafür sieht so aus:

Code: Alles auswählen

sub S_insert_target_Url
    oform =  thiscomponent.drawpage.forms.MainForm
    surl = oform.getstring(7)'Link steht in 7. Spalte der Tabelle
    obutton = oform.cmdopenwww 'Button mit Einstellung: Aktion "Dokument/Webseite öffnen"
    obutton.TargetURL = surl
end sub

Problem:
Das vierte und letzte Formular ist fast das gleiche wie Formular 3, dient aber zum Durchsuchen der Actor (Schauspieler). Dummer weise bekomme ich seit TAGEN zwei Sachen nicht in den Griff:

1. Das Makro zum Öffnen der Links funktioniert nicht! Obwohl ich alles genauso gemacht habe wie in Formular 3 und mich auch wieder an die Anleitung von F3K Total gehalten habe, bekomme ich ständig folgende Fehlermeldung:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten 
Type: com.sun.star.sdbc.SQLException
Message: Der Cursor zeigt vor die erste beziehungsweise hinter die letzte Zeile..
Da stimmt also schonmal was nicht...
Zudem habe in Formular 4 zwei verschiedene Schaltflächen zum Öffnen von Links auf jeweils eigenen Unterformularen (einmal für YouTube Videos und eine zweite für diverse Internetseiten wie Wikipedia, IMDb usw.)
Braucht es da ein zweites (angepasstes) Makro, oder kann ich das gleiche auch für die zweite Schaltfläche nehmen, solange beide Schaltflächen auf unterschiedlichen Unterformularen liegen?

2. Die Links befinden sich jeweils in einem eigenen Tabellen-Steuerelement auf eigenen Unterformularen. Klicke ich in einer der Tabelle den Namen einer Seite/eines Videos an, wird der Link in ein nicht sichtbares Textfeld geschrieben, auf welches ich dann wieder das Makro anwenden kann.
Nun hätte ich es aber wesentlich lieber anstatt eines Tabellen-Steuerelement mit einer Liste aller Inhalte, stattdessen ein Listenfeld zu benutzen um einen Datensatz auszuwählen und dann wieder den Link in das nicht sichtbare Textfeld zu schreiben. Aber wie??? Dieses Problem hat mich schon 2 Nächte Schlaf gekostet...


Ein Bild sagt mehr als tausend Worte, oder in diesem Fall eben die .odb
Darum habe ich mein Projekt inklusive der Testdaten als Anhang beigefügt, damit ihr selbst mal ein Blick darauf werfen könnt. Ich bin sicher, dass das nur eine Kleinigkeit ist die sich beheben lässt und ich bin für jede Hilfe sehr dankbar.

Beste Grüße
Dateianhänge
Filmsammlung.zip
(709.34 KiB) 109-mal heruntergeladen

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datensatz mit Listenfeld wählen und Schaltfläche zum Link öffnen

Beitrag von RobertG » Fr 18. Feb 2022, 17:11

Du landest mit dem Makro immer im Hauptformular. Mit dem Hauptformular hast Du aber im 4. Formular die Tabelle "Actors" verbunden. Die hat keine Links und auch nur 3 Spalten.

Die Aktion für das Makro muss außerdem immer auf "Dokument/Webseite öffnen" stehen. Beim 2. Formular "Video ansehen" ist das nicht der Fall.

Es wird mit dem Makro nach dem Datensatzwechsel jeweils die Website aus der dem Formular zugrundeliegenden Tabelle ausgelesen und dem Button zugeordnet.

Um das Ganze mit einem Makro geregelt zu bekommen musst Du das Formular über das Makro ermitteln lassen und aus den Eigenschaften des Buttons (Zusatzinformationen) die richtige Spalte für den Link ermitteln.

Code: Alles auswählen

sub S_insert_target_Url(oEvent AS OBJECT)
    oForm =  oEvent.Source
    IF inStr(oForm.ImplementationName,"ODatabaseForm") THEN
    obutton = oform.cmdopenwww 'Button mit Einstellung: Aktion "Dokument/Webseite öffnen"
    sNr = obutton.Tag ' In den Zusatzinformationen des Buttons wird die Spaltennummer mit dem Link geschrieben.
    surl = oForm.getstring(sNr)    
    obutton.TargetURL = surl
    END IF
end sub
Du musst leider die Schleife mit einbauen, da bei Formularereignissen häufig 2 unterschiedliche Ereignisse greifen und dort nicht in gleicher Weise auf den Button zugegriffen werden kann.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

GVS84
Beiträge: 2
Registriert: Fr 18. Feb 2022, 09:50

Re: Datensatz mit Listenfeld wählen und Schaltfläche zum Link öffnen

Beitrag von GVS84 » Fr 18. Feb 2022, 17:31

Ach du meine Güte, das hat auf Anhieb funktioniert!
Ich weiß gar nicht was ich sagen soll. Vielen lieben Dank das du mir geholfen hast. Ernsthaft, danke dir :)

Damit wäre meine Datenbank nun theoretisch fertig und ich kann a) sie endlich mit Daten füttern und b) das ganze kopieren als Grundlage für meine Reto Games Sammlung.

Den Datensatz in Formular 4 per Listenfeld auswählen zu können wäre zwar noch schön, aber wenn das nicht geht bin ich trotzdem zufrieden.

Noch mal vielen lieben dank für deine kompetente Hilfe :)


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