🙏 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!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
(Gelöst) Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
(Gelöst) Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Dank der Hilfe hier (danke Robert) kann ich meine Daten jetzt filtern. Die gefundenen Einträge werden in einem Tabellenkontrollfeld angezeigt. Ich wähle dann die Zeile aus.
Jetzt möchte ich ein neues Formular öffnen in dem alle Detail-Informationen zu dem ausgewählten Artikel enthalten sind. Im Bild ist der Eintrag "Knie PLK" ausgewählt. Im Formular gibt es dann Bilder, Lieferant, Gewicht und weitere Angaben. Wie geht das?
Jetzt möchte ich ein neues Formular öffnen in dem alle Detail-Informationen zu dem ausgewählten Artikel enthalten sind. Im Bild ist der Eintrag "Knie PLK" ausgewählt. Im Formular gibt es dann Bilder, Lieferant, Gewicht und weitere Angaben. Wie geht das?
- Dateianhänge
-
- Screenshot from 2020-02-03 15-54-55.png (10.12 KiB) 4108 mal betrachtet
Zuletzt geändert von Libremiki am Mi 5. Feb 2020, 10:07, insgesamt 1-mal geändert.
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Hallo Libremiki,
die einfachste Variante wäre, dass Du zu dem Formular, in dem das Tabellenkontrollfeld steht, ein Unterformular erstellst, dass dann die gesamten Details anzeigt. Das ist letztlich eine Frage, wie viel Platz Du auf dem Bildschirm hast oder ob Du das lieber getrennt haben willst.
Für den Aufruf eines neuen Formulardokumentes musst Du allerdings mit Makros arbeiten. Du brauchst dazu ein Feld, nach dem Du den Formularinhalt eindeutig bestimmen kannst. Den Wert könntest Du in die Filtertabelle schreiben, das neue Formular öffnen und über eine entsprechend gefilterte Abfrage mit Daten beschicken. Speicherung des Wertes und Öffnen des Formulars erfolgt hier über ein Makro.
Versuche zuerst einmal die Unterformularvariante. Soll es ein neues Formulardokument sein, so sehen wir das dann später.
Gruß
Robert
die einfachste Variante wäre, dass Du zu dem Formular, in dem das Tabellenkontrollfeld steht, ein Unterformular erstellst, dass dann die gesamten Details anzeigt. Das ist letztlich eine Frage, wie viel Platz Du auf dem Bildschirm hast oder ob Du das lieber getrennt haben willst.
Für den Aufruf eines neuen Formulardokumentes musst Du allerdings mit Makros arbeiten. Du brauchst dazu ein Feld, nach dem Du den Formularinhalt eindeutig bestimmen kannst. Den Wert könntest Du in die Filtertabelle schreiben, das neue Formular öffnen und über eine entsprechend gefilterte Abfrage mit Daten beschicken. Speicherung des Wertes und Öffnen des Formulars erfolgt hier über ein Makro.
Versuche zuerst einmal die Unterformularvariante. Soll es ein neues Formulardokument sein, so sehen wir das dann später.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Das Unterformular kann ich einrichten. Ich will aber definitiv den Weg über das Makro gehen. Öffnet mehr Optionen in der Zukunft - speziell wenn man es versteht und modifizieren kann.
Ich denke die folgenden Schritte sind nötig:
Dieser Beitrag stammt aus SW China, enthält aber garantiert nicht den neuen Wuhan-Virus
Ich denke die folgenden Schritte sind nötig:
- Eine neue Tabelle "Memory" habe ich angelegt mit den Feldern "MemoryID" und "MemoryNummer". MemoryID ist wieder ein Ja/Nein Format.
Das Makro muss den markierten Wert auslesen "getCurrentSelection"?
Dieser Wert "Artikelnummer" muss in der Tabelle "Memory" im Feld "Memorynummer" gespeichert werden
Dann das neue Formular "Form2" öffnen mit der Abfrage aus "Memory"
Dieser Beitrag stammt aus SW China, enthält aber garantiert nicht den neuen Wuhan-Virus

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Hallo Libremiki,
eine neue Tabelle brauchst Du nicht - nur ein zusätzliches Feld in der vorhergehenden Filtertabelle.
Das Makro sollte am besten ausgelöst werden, wenn auf genau das gewünschte Feld mit der Maus geklickt wird.
Das Makro liest zuerst aus der angeklickten Zelle den Wert.
Danach wird zu der Zelle das Formular ermittelt.
Über parent erhalte ich die nächst höhere Ebene. Parent.parent ist deswegen nötig, weil das Feld in einem Tabellenkontrollfeld liegt.
Über das Formular wird die Datenbankverbindung ausgelesen.
Der Code wird erzeugt und an die Memorytabelle weitergegeben.
Danach wird das neue Formular aufgerufen.
Der Inhalt des neuen Formulars wird durch eine Abfrage auf die Memorytabelle eingeschränkt.
---------
Nachtrag: stSql ist so eine Mischung aus Code für einen neuen Datensatz (INSERT) und einen bestehenden Datensatz (UPDATE). Entweder muss die WHERE-Bedingung weg oder es wird, an dieser Stelle korrekt,
---------
Gruß
Robert
eine neue Tabelle brauchst Du nicht - nur ein zusätzliches Feld in der vorhergehenden Filtertabelle.
Das Makro sollte am besten ausgelöst werden, wenn auf genau das gewünschte Feld mit der Maus geklickt wird.
Code: Alles auswählen
SUB FormFilterOpen(oEvent AS OBJECT)
DIM oConnection AS OBJECT
oField = oEvent.Source.Model
stValue = oField.CurrentValue
oForm = oField.parent.parent
oConnection = oForm.activeConnection()
oSQL_Statement = oConnection.createStatement()
stSql = "INSERT INTO ""Memory"" (""MemoryNummer"") VALUES ('"+stValue+"') WHERE ""MemoryID"" = TRUE"
oSQL_Statement.executeUpdate(stSql)
ThisDatabaseDocument.FormDocuments.getByName( "Filterformular" ).open
END SUB
Danach wird zu der Zelle das Formular ermittelt.
Über parent erhalte ich die nächst höhere Ebene. Parent.parent ist deswegen nötig, weil das Feld in einem Tabellenkontrollfeld liegt.
Über das Formular wird die Datenbankverbindung ausgelesen.
Der Code wird erzeugt und an die Memorytabelle weitergegeben.
Danach wird das neue Formular aufgerufen.
Der Inhalt des neuen Formulars wird durch eine Abfrage auf die Memorytabelle eingeschränkt.
---------
Nachtrag: stSql ist so eine Mischung aus Code für einen neuen Datensatz (INSERT) und einen bestehenden Datensatz (UPDATE). Entweder muss die WHERE-Bedingung weg oder es wird, an dieser Stelle korrekt,
Code: Alles auswählen
stSql = "UPDATE ""Memory"" SET ""MemoryNummer"" = '"+stValue+"' WHERE ""MemoryID"" = TRUE"
Gruß
Robert
Zuletzt geändert von RobertG am Di 4. Feb 2020, 14:56, insgesamt 1-mal geändert.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Danke. Ich habe das Makro gespeichert, es zeigt ein Problem mit dem SQL code. Wenn ich das erste Anführungszeichen lösche wird der Text grün. Aber es wäre besser wenn ich den Grund verstehe.
Das Makro habe ich im Tabellenkontrollfeld unter "Mouse button pressed" eingetragen. Es tut sich aber nichts, vermutlich wegen dem o.g. Problem.
Code: Alles auswählen
stSql = "INSERT INTO ""Memory"" (""MemoryNummer"") VALUES ('"+stValue+"') WHERE ""MemoryID"" = TRUE"
- Dateianhänge
-
- Screenshot from 2020-02-04 13-58-10.png (40.56 KiB) 4047 mal betrachtet
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Hallo,
das ist kein Problem mit dem Code, die Anführungszeichen gehören dahin und die Zeile soll nicht grün sein.
Begründung:
Der SQL-Befehl wird als Zeichenkette (String) erzeugt und daher in Anführungszeichen eingeschlossen. Enthaltene Anführungszeichen werden verdoppelt, damit eines der beiden im String landet.
Für den Editor ist es damit aber Text und wird bei Dir rot dargestellt. Das dieser Text später als SQL-BEFEHL interpretiert wird kann BASIC natürlich nicht verstehen.
Zur Kontrolle könntest Du stSQL in der nächsten Zeile per MsgBox ausgeben lassen.
Mfg, Jörn
das ist kein Problem mit dem Code, die Anführungszeichen gehören dahin und die Zeile soll nicht grün sein.
Begründung:
Der SQL-Befehl wird als Zeichenkette (String) erzeugt und daher in Anführungszeichen eingeschlossen. Enthaltene Anführungszeichen werden verdoppelt, damit eines der beiden im String landet.
Für den Editor ist es damit aber Text und wird bei Dir rot dargestellt. Das dieser Text später als SQL-BEFEHL interpretiert wird kann BASIC natürlich nicht verstehen.
Zur Kontrolle könntest Du stSQL in der nächsten Zeile per MsgBox ausgeben lassen.
Mfg, Jörn
Zuletzt geändert von Wanderer am Di 4. Feb 2020, 19:19, insgesamt 1-mal geändert.
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
OK. Das Makro wird jetzt ausgeführt. Ich habe Dein Handbuch Kapitel 9 (Makros) angefangen zu lesen. Da steht ja ganz klar dass man die Makrosicherheit auf "mittel" verstellen muss.
Das Makro wird allerdings nicht komplett ausgeführt, es öffnet sich der Makro-Editor und es gibt auch eine Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Attempt to insert null into a non-nullable column: column: MemoryID table: Memory.
Die Tabelle "Memory" column "MemoryID" ist als ja/nein Feld formatiert und auf "True" angekreuzt.
Das Makro wird allerdings nicht komplett ausgeführt, es öffnet sich der Makro-Editor und es gibt auch eine Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Attempt to insert null into a non-nullable column: column: MemoryID table: Memory.
Die Tabelle "Memory" column "MemoryID" ist als ja/nein Feld formatiert und auf "True" angekreuzt.
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Hallo Libremiki,
Entschuldigung, ist am Anfang der Code für das Einfügen eines Datensatzes gewesen, muss aber der für das Ändern sein:
Zum Code: Tabellen und Felder werden in doppelte Anführungszeichen gesetzt. Damit wird aber in Basic Text eingerahmt. Wird ein doppelten Anführungszeichen direkt vor ein doppeltes Anführungszeichen gesetzt, so wird das zweite Anführungszeichen als Text durch das erste Anführungszeichen maskiert. Das erkennst Du, wenn Du direkt nach der Deklaration von stSql einmal
ausführen lässt. Dort steht dann der Code, der anschließend ausgeführt wird. Der gleiche Code könnte auch unter Extras > SQL eingegeben werden.
Gruß
Robert
Entschuldigung, ist am Anfang der Code für das Einfügen eines Datensatzes gewesen, muss aber der für das Ändern sein:
Code: Alles auswählen
stSql = "UPDATE ""Memory"" SET ""MemoryNummer"" = '"+stValue+"' WHERE ""MemoryID"" = TRUE"
Code: Alles auswählen
msgbox stSql
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen
Danke Robert! Es flutscht einwandfrei. Ich habe auch die Tabelle "Memory" gelöscht und dafür wie vorgeschlagen in der Tabelle "Filter" ein extra Feld eingefügt. Der Wert aus der Spalte wird ausgelesen und abgespeichert, das neue Formular geöffnet.
Entschuldigung ist nicht notwendig. Nur wer nichts tut macht keine Fehler. Und wie Du hilfst ohne die aktuelle Datenbank zu kennen ist schon toll. Mal sehen wie weit ich jetzt komme.
Entschuldigung ist nicht notwendig. Nur wer nichts tut macht keine Fehler. Und wie Du hilfst ohne die aktuelle Datenbank zu kennen ist schon toll. Mal sehen wie weit ich jetzt komme.
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.