BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Letzten Datensatz ins Formular Laden

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
ogan
Beiträge: 20
Registriert: Mi 15. Jul 2020, 11:31

Letzten Datensatz ins Formular Laden

Beitrag von ogan » Mi 15. Jul 2020, 13:22

Hallo

Habe 2 Tabellen mit jeweils zwei Zahlfelder, die eine Beziehung zwischen ihren Primärschlüssel id haben also eine 1-1 Beziehung. Im Formular sind sie auch so als MainForm und SubForm abgebildet. Hier gibt es auch 3 Buttons die jeweils ihrem Namen analoge Aktion eingestellt haben. (Speichern, Neuer Datensatz und Letzter Datensatz)

Wenn ich normal Daten eingebe und dann auf den Speichern Button drücke funktioniert es wie erwartet. Wenn ich auf Neuer Datensatz Drücke werden die Felder beider Formulare geleert wie erwartet. Der Button Letzter Datensatz wird erst aktiv wenn ich den Button neuer Datensatz gerückt habe, weiss nicht wieso er vorher micht aktiv wird . Er ist dem MainForm zugeordnet, wenn ich ihn der SubForm zuordne wird er nie aktiviert. Mein Hauptproblem ist wenn ich den Button Letzter Datensatz klicke wird nur im oberen Mainform der letzte Datensatz geschrieben, das Subformular bleibt leer. Wenn ich jetzt versuche daten einzugeben im Subformular gibt’s beim speichern ein sql exception da ja die Primärschlüssel nicht übereinstimmen. Ich möchte das in beide Formulare der jeweiliger letzte Datensatz geladen wird. Habe auch zusätzlich versucht beim button Letzter Datensatz unter Ereigniss „Aktion Ausführen“ folgendes Makro auszuführen, es hat aber nichts gebracht.

Sub LadeLetztenDatensatz

DIM oForm AS OBJECT
DIM oSubForm AS OBJECT
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT

oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("MainForm")
oSubForm = oForm.getByName("SubForm")

oForm.last()
oSubForm.last()


End Sub

Was auch nicht geht: wollte das beim Laden des Formulars der letzte Datensatz geladen wird. Habe im Mainform und SubForm als Ereignes „Beim Laden“ obige Makro hinzugefügt. Da passiert leider gar nichts beim laden.

Hat jemand eine Idee was ich in diesen beiden Fällen (letzter Datensatz laden beim öffnen des Formulars und letzter Datensatz laden per Button) machen muss ?

Danke

[img][img]

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Letzten Datensatz ins Formular Laden

Beitrag von RobertG » Mi 15. Jul 2020, 15:01

Hallo ogan,

da fehlen mir Informationen zu dem, wie Du das Formular einsetzt. Wenn "Letzter Datensatz" nicht aktiv ist, dann müsstest Du Dich bereits auf dem letzten Datensatz befinden. Das bedeutet für mich, dass das Formular anscheinend nur zur Neueingabe von Daten genutzt wird.
Wenn Du auf "Neuer Datensatz" drückst, dann springt das Formular bei "Letzter Datensatz" auf den letzten eingegebenen Datensatz - also zurück. Der neue Datensatz existiert ja noch gar nicht. Das ist dann auch nicht oForm.last(), sondern wäre oForm.afterLast().
Das Unterformular wird durch den Fremdschlüssel aus dem Hauptformular bestimmt. Da es eine 1:1-Beziehung ist kannst Du da nicht navigieren. Das Unterformular kann keine anderen Daten schreiben, zu denen kein Primärschlüssel existiert.

Wenn der erste Absatz stimmt und Du nur Neueingaben machst, dann kann es sein, dass diese Aktion mit dem letzten Datensatz eigentlich ein Bug ist. Da dürfte gar keine Navigation zurück möglich sein. Und deswegen auch keine Navigation zurück für das Unterformular möglich sein.

Zeige hier einmal die Eigenschaften von Hauptformular und Unterformular.

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

ogan
Beiträge: 20
Registriert: Mi 15. Jul 2020, 11:31

Re: Letzten Datensatz ins Formular Laden

Beitrag von ogan » Do 16. Jul 2020, 10:35

Hallo Robert

Ich habe die Navigationsleiste der Formulare ausgeschaltet und möchte das Formular nur für die Neueingabe verwenden. Es soll also nicht über die Datensätze navigiert werden. Aber zusätzlich möchte ich dass man den allerletzten eingegebenen Datensatz laden und ändern kann.

Ich will gar nicht im Unterformular navigieren. Ich will nur neue Daten eingeben oder den letzten Datensatz sehen. Und wenn der Button Letzter Datensatz aktiv ist und ich ihn drücke werden auch im Hauptformular die richtige Daten geladen aber im SubFormular nicht, dieser bleibt leer. Daher verstehe ich das mit dem oForm.afterLast(). nicht.

Aber ich habe mir nochmals die Eigenschaften der Formulare angeschaut , da war «nur daten hinzufügen» jeweils auf ja gesetzt, dieses habe ich auf nein geändert und jetzt funktioniert es wie erwartet. Also ist mein problem gelöst. Danke für deinen Input, das hat mich darauf gebracht.

Formulareigenschaften sind jetzt wie folgt.

MainForm:
Allgemein
Art des Inhaltes : Tabelle
Inhalt : Tabelle3
Daten hinzufügen : Ja
Daten ändern: Ja
Daten löschen: Nein
Nur Daten hinzufügen: Nein
Symbolleiste Navigation: Nein
Zyklus aktuelle Seite
Ereignisse:
Beim Laden: Standard.Module1.LadeLetztenDatensatz (document, Basic)

SubForm:
Allgemein
Art des Inhaltes : Tabelle
Inhalt : Tabelle4
Verknüpfen von: id
Verknüpfen nach: id
Daten hinzufügen : Ja
Daten ändern: Ja
Daten löschen: Nein
Nur Daten hinzufügen: Nein
Symbolleiste Navigation: Nein
Zyklus aktuelle Seite
Ereignisse:
Beim Laden: Standard.Module1.LadeLetztenDatensatz (document, Basic)

Noch eine zusätzliche Frage: Um eine 1-1 Beziehung abzubilden die primärschlüssel zweier Tabellen zu verbinden, ist das eine gute Lösung ? Habe jedenfalls keine andere gefunden. Wenn man einen seperaten Fremdschlüssel nimmt und über diesen verbindet, wird es von LibreOffice als 1-n Beziehung interpretiert und umgesetzt.

Gruss
Ogan

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Letzten Datensatz ins Formular Laden

Beitrag von RobertG » Do 16. Jul 2020, 12:47

Hallo Ogan,

wenn Du nur neue Daten eingeben willst, dann würde ich zumindest das Hauptformular so eingestellt lassen. Das springt ja anscheinend auf den gerade eingegebenen Datensatz zurück. Beim Unterformular kannst Du das so lassen, dass auch bestehende Daten geladen werden. Da wird ja sowieso durch das Hauptformular gefiltert.

Eine 1:1-Abbildung wird immer durch Verbindung der Primärschlüssel gemacht. So eine Konstruktion wendest Du aber nur dann an, wenn Du merkst: Bestimmte Felder in meiner Tabelle brauche ich so selten, die kann ich besser auslagern. Oft reicht mir dir Grundtabelle.

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

ogan
Beiträge: 20
Registriert: Mi 15. Jul 2020, 11:31

Re: Letzten Datensatz ins Formular Laden

Beitrag von ogan » Fr 17. Jul 2020, 08:26

Hallo Robert

Was macht man wenn man alle Daten gleichermassen braucht, aber dann eine riessen Tabelle hätte mit sehr vielen Spalten. Ich dachte es wäre dann gut wenn man sie dann auf 2 oder mehreren Tabellen mit 1:1 Beziehung aufteilt.

Gruss
Ogan

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Letzten Datensatz ins Formular Laden

Beitrag von RobertG » Fr 17. Jul 2020, 09:59

Hallo Ogan,

ich würde die Daten in einer Tabelle zusammenhalten. Dadurch kannst Du viel besser in den Daten suchen und filtern. Der einzige Nachteil, den ich sehe, ist, wenn Du die Eingabe über die Tabelle selbst regeln willst. Ansonsten kannst Du auch für eine einzelne Tabelle mehrere Tabellenkontrollfelder in Deinem Formular haben - oder eben entsprechend viele Einzelfelder.

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

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten