Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datenherkunft im 2. Ufo aktualisieren klappt nicht

Begonnen von Hondo, Oktober 19, 2024, 18:54:26

⏪ vorheriges - nächstes ⏩

Hondo

Hallo,
das Thema hatten wir zwar neulich, aber irgendwie ist bei mir der Wurm grad drin.
Folgende Situation: Formular mit 2 Ufos, Ufo1 Dateneingabe, Ufo2 Auflistung aller Daten
Ich speichere im ufo1 mit db.execute einen Datensatz in tabMitglieder. Funktioniert auch.
Im Ufo2 soll der nach dem Speichern auftauchen:
Im Code von Ufo1 schreibe ich: Me.Parent.Ufo2.Form.Refresh
Man sieht auch dass die Datenherkunft aktualisiert wird, das Endlosformular zuckt kurz.
Aber der neue Datensatz ist nirgends zu sehen. Datenherkunft von Ufo2 ist die Tabelle tabMitglieder.

Hier der Code:

CurrentDbC.Execute ("Insert into tabmitglieder (msbnr, fname, vname, geboren, eintritt, geschl, migebday, migebmo, strasse, plz, ort, nation) Values (" & _
        Me.msbnr & ", '" & _
        Me.fname & "', '" & _
        Me.vname & "', '" & _
        CDate(Me.geboren) & "', '" & _
        CDate(Nz(Me.eintritt, "")) & "', '" & _
        Nz(Me.geschl, "") & "', " & _
        Day(CDate(Nz(Me.geboren, ""))) & ", " & _
        Month(CDate(Nz(Me.geboren, ""))) & ", '" & _
        Nz(Me.strasse, "") & "', '" & _
        Nz(Me.plz, "") & "', '" & _
        Nz(Me.ort, "") & "', '" & _
        Nz(Me.nation, "") & "')")
        clearFields Me, "xd"
        Me.CmdSpeichern.Enabled = False
        Me.Parent.Ufo2.Form.Refresh
        MsgBox "Mitglied wurde gespeichert", vbInformation + vbOKOnly, ""

Lade ich andere Forms in die Ufos und gehe dann auf diesen Menüpunkt zurück ist der Datensatz vorhanden.
Wo ist das Problem?

Knobbi38

Hallo,

dein zweites SubForm-Steuerelement im HF hat den Bezeichner 'UFO2'? die Refresh Methode kann hier nicht ausreichend sein, sondern in diesem Fall muß zwangsweise Requery verwendet werden.

Im Übrigen sollte so etwas vermieden werden. Eine besserer OOP gerechte Praxis wäre, daß das UF "Dateneingabe" per Event signalisiert, daß eine Aktualisierung stattgefunden hat. Das HF wiederum kann dieses Event abfangen und weiß dann, was dann zu tun ist. Somit braucht das UF "Dateingabe" gar nicht wissen, wie in einem anderen Formular das SubForm-Steuerelement heißt und was genau zu tun ist und welches Objekt sonst noch beteiligt ist. So etwas nennt man Datenkapselung und vereinfacht deutlich den Softwarepflegeaufwand.

Gruß
Ulrich




Hondo

Hallo Ulrich,
danke für Hilfe, manchmal ist man auch zu blöd, natürlich muss es requery nicht refresh heißen.
Ja kenne das Prinzip der Eventhandler gut, ist aber eine über inzwischen 10 Jahren gewachsene Anwendung für den Verein. Da wollte ich nicht unnötig Zeit investieren, muss nur funktionieren auf nem Solo-PC.
Gruß Andi

Bitsqueezer

Hallo,

ich würde auch empfehlen, solche Operationen nicht mit zusammengesetzten SQL-Strings durchzuführen.

Einerseits könntest Du mindestens die Funktion "BuildCriteria" verwenden, die einen Wert passend zum Datentyp aufbereitet, so daß man sich Hochkommata und Datumsformatierung sparen kann.

Andererseits könntest Du auch eine INSERT-Abfrage vorbereiten, die mit PARAMETERS einzelne Parameter typisiert speichert, diese kann dann per QueryDef aufgerufen und über deren Parameters-Collection typsicher mit Daten befüllt werden.
Es sei noch angemerkt, daß "CDate" höchst unpüraktisch ist für sowas, da CDate das Windows-Datumsformat verwendet und bei einem Datumswechsel in eine andere Sprache dann auch deren Datumsformat haben will.

Gruß

Christian