Seite 1 von 1

(Gelöst) Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Mo 3. Feb 2020, 09:00
von Libremiki
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?

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Mo 3. Feb 2020, 09:50
von RobertG
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

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Mo 3. Feb 2020, 12:46
von Libremiki
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:
  • 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"
Leichter geschrieben als getan!

Dieser Beitrag stammt aus SW China, enthält aber garantiert nicht den neuen Wuhan-Virus ;)

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Mo 3. Feb 2020, 15:04
von RobertG
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.

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
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,

Code: Alles auswählen

stSql = "UPDATE ""Memory"" SET ""MemoryNummer"" = '"+stValue+"' WHERE ""MemoryID"" = TRUE"
---------

Gruß

Robert

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Di 4. Feb 2020, 07:10
von Libremiki
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.

Code: Alles auswählen

stSql = "INSERT INTO ""Memory"" (""MemoryNummer"") VALUES ('"+stValue+"') WHERE ""MemoryID"" = TRUE"
Das Makro habe ich im Tabellenkontrollfeld unter "Mouse button pressed" eingetragen. Es tut sich aber nichts, vermutlich wegen dem o.g. Problem.

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Di 4. Feb 2020, 09:08
von Wanderer
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

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Di 4. Feb 2020, 12:25
von Libremiki
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.

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Di 4. Feb 2020, 14:53
von RobertG
Hallo Libremiki,

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"
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

Code: Alles auswählen

msgbox stSql
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

Re: Suchergebnisse ausgewählten Eintrag in Detail-Form öffnen

Verfasst: Mi 5. Feb 2020, 10:07
von Libremiki
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.