Seite 1 von 1

Gelöst: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Mi 21. Aug 2024, 17:32
von HeiDieLX2
Ein Problem das mich schon sehr lange umtreibt, ich jedoch noch keine Lösung gefunden habe.

Ich bin dabei eine Datenbank mit Artikeln aus meinen Gartenzeitungen aufzubauen.
In der Haupttabelle gibt es Sekundärschlüssel die in andere Tabellen zeigen z.B. Autor.

In der Haupttabelle wähle ich den Autor über ein Listenfeld welches mir die Autoren bereitstellt aus.
Soweit so gut. Fehlt nun ein Autor kann ich mit einem Button in das Formular zur Autoreneingabe springen. Komme ich von dort zurück, ist der neue Autor noch nicht in der Auswahl enthalten.
Wie kann ich nun die Daten im Listenfeld aktualisieren, ohne die anderen Felder in dem Eingabeformular zu tangieren.
Bislang ist es so, dass diverse Meldungen von fehlenden Daten auf anderen Feldern generiert werden.
In meiner Eingabemaske gibt es vier solcher Listenfelder welche per Definition nicht leer sein dürfen.
Natürlich könnte ich im Vorfeld die nötigen Daten eingeben, jedoch aus Bequemlichkeit und Arbeitsablauf wäre mir o. g. Variante lieber.
Als Datenbasis benutze ich Postgresql.
listenfelder.png
listenfelder.png (31.53 KiB) 3554 mal betrachtet

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Mi 21. Aug 2024, 20:07
von RobertG
Du hast in der Navigationsleiste 2 verschiedene Befehle zum Aktualisieren. Einer heißt "Aktualisieren" und meint das gesamte Formular, ein weiterer heißt "Steuerelement aktualisieren" und mein das aktuell ausgewählte Listenfeld. Bei Deinem Screenshot sehen die merkwürdigerweise gleich aus. Das inaktive Feld ist wohl das für das Steuerelement. Klicke also in das Listenfeld "Autor". Dann wird das inaktive Element aktiv und Du kannst den Inhalt für das Steuerelement neu einlesen.

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Do 22. Aug 2024, 08:42
von HeiDieLX2
Hallo Robert,
Danke für den Hinweis, aber der greift zu kurz.
listenfelder2.png
listenfelder2.png (56.83 KiB) 3480 mal betrachtet
Das Bild zeigt die Situation nach der Eingabe eines neuen Autors und der Rückkehr ins Eingabeformular und dem drücken des rechten Kreisels.
Der neue Autor ist nicht da. Es wurde ein beliebiger anderer eingetragen.
Kann es sein, dass ich das Problem mit der Nutzung von Firebird (weiß ja jetzt wie es geht ;) )hier nicht hätte?

Oder anders gefragt ist mein angedachter Weg der Eingabe so richtig oder gibt es eine elegante Lösung die ich noch nicht auf dem Schirm habe?

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Do 22. Aug 2024, 12:22
von RobertG
Ich nehme an, dass der Button bei Dir nicht dafür gedacht ist, das Kontrollfeld neu ein zu lesen.
Das hat nichts mit der verwendeten Datenbank zu tun, sondern mit der Bedienung des Formulars.

Was zeigt den die Tipp-Hilfe an, wenn Du mit der Maus über diesen Button gehst?

Auf keinen Fall dürfte dadurch ein Speichern des aktuellen Datensatzes ausgelöst werden.

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Do 22. Aug 2024, 15:33
von HeiDieLX2
Was zeigt den die Tipp-Hilfe an, wenn Du mit der Maus über diesen Button gehst?
Kreisel links: Aktualisieren
Kreisel rechts: Steuerelement aktualisieren

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Do 22. Aug 2024, 17:08
von RobertG
Ich habe das hier gerade einmal getestet: Wenn ich bei einem neuen Datensatz in ein Listenfeld gehe und das aktualisieren lasse wird keine Speicherung ausgelöst, wie das Dein Screenshot anzeigt. Ich habe da mehrere Felder in dem Formular, die einen Eintrag erfordern.

Irgendetwas muss da faul sein.

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Fr 23. Aug 2024, 15:50
von HeiDieLX2
Irgendetwas muss da faul sein.
Ja, möglich - dann jedoch schon immer! :(

Ich habe nun in der Zwischenzeit eine Version mit der Firebird DB erstellt. Bei dieser tritt der Effekt genauso auf.
Nur wenn alle Felder in der Eingabemaske belegt sind kann ich das Steuerelement aktualisieren.
Das ist jedoch, sorry, für mich kein guter Arbeitsablauf.

Hab mal die Datei angehängt.

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: Sa 24. Aug 2024, 08:31
von RobertG
Ich habe das auf die Schnelle gestartet. Ich kann bei einem neuen Datensatz jedes Listenfeld in Formular 001_Artikel aktualisieren.
Dann habe ich einmal ein bisschen probiert: Wenn ich bereits angefangen habe, Daten in das Formular ein zu geben, dann kommt eine entsprechende Meldung wegen fehlender Eingaben, in diesem Fall im Feld "Autor". Ich würde das als Bug melden - aber anhand eines einfacheren Beispiels ohne Makros, so dass gleich nachvollzogen werden kann: Bei Eingabe von Werten an anderer Stelle und dem versuchten "Refresh" wird doie Speicherung ausgelöst.

Da Du aber sowieso mit Makros arbeitest könntest Du das doch so regeln wie hier:

Code: Alles auswählen

SUB LieferadresseBeenden(oEvent AS OBJECT)
	oForm = oEvent.Source.Model.Parent
	IF hasUnoInterfaces(oForm, "com.sun.star.form.XForm" ) THEN
		ThisDatabaseDocument.FormDocuments.getByName("frm_Lieferadresse").close	
		IF NOT ISNULL(oFieldTarget) THEN
			oFieldTarget.refresh()
		END IF
	END IF	
END SUB
oFieldTarget kannst Du natürlich auch innerhalb des Formulars benennen. Hier wird das aus einer Abspeicherung beim Öffnen des Formulars zum Bearbeiten einer Adresse belegt → also bei Dir beim Aufruf von "Autor".

Das Beispiel stammt aus der aktuellen XRechnungs-Version, neueste Version immer auf meiner Homepage.

Re: Daten im Listenfeld aktualisieren während der Eingabe

Verfasst: So 25. Aug 2024, 11:30
von HeiDieLX2
Hallo Robert,
Danke für die Unterstützung.

Die nächsten Tage sind bei mir bereits sehr mit Terminen belegt.
Die beiden Punkte kommen jedoch noch.

Dein Codebeispiel sehe ich mal als Workaround.

Das Beispiel für die Fehlermeldung kommt dann auch.
Vielen Dank.