Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: -Tom- am November 15, 2013, 19:55:47

Titel: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 15, 2013, 19:55:47
Hallo,

Ich habe ein Hauptformular und dazu zwei Unterformulare. Dies Ufos enthalten auch wieder Unterformulare.

Wie kann ich nun Änderungen in den ganzen Formularen erkennen?

Im Hfo könnte ich das ja mit Me.Dirty realisieren, aber das geht ja nicht mit den Ufos.

Ich habe zu dem Problem diese Seite (http://www.access-entwicklerbuch.de/2007/index.php?page=buch&bookpage=Kap_04/07_02.html) gefunden, beim versuch das umzusetzen habe ich allerdings Probleme.

z.B. Wenn ich mein Hfo öffne wird die folgende Sub durchlaufen

Private Sub UnterformularAktualisieren()

    Dim strSQL As String
    Dim rst As DAO.Recordset

    'Zusammenstellen des SQL-Strings
    strSQL = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0) & ""
   
   
    'Öffnen des Recordset
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

    'Zuweisen des Recordset an das Unterformular
     Set Me!frm01MotorErfassungUfoMechDat.Form.Recordset = rst
     Set Me!frm02MotorErfassungUfoElDat.Form.Recordset = rst

End Sub


Und hier erhalte ich bei  Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) einen Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt.

Warum?

Kann mir jemand helfen das auf der Seite (http://www.access-entwicklerbuch.de/2007/index.php?page=buch&bookpage=Kap_04/07_02.html) beschriebene umzusetzen oder gibt es noch eine andere Möglichkeit die Änderungen zu erkennen?

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 15, 2013, 20:45:33
Hi Tom,

was passiert, wenn Du einen einfacheren Ansatz probierst, um den Fehler zu vermeiden:

Set Me!frm01MotorErfassungUfoMechDat.Form.Recordset = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)

Ich setze voraus, dass cboMotNrSuchen ein Zahlenfeld ist.

Wobei mir der Zusammenhang zur Ausgangsfrage (wie Änderungen erkennen) noch unklar ist.
Nach meinem Verständnis würde ich eine Änderung erkennen, wenn ich einen früheren Zustand mit einem aktuellen Zustand vergleiche.
Vielleicht habe ich aber die Frage nicht verstanden.

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 15, 2013, 21:28:06
Zitat von: bahasu am November 15, 2013, 20:45:33
Hi Tom,

was passiert, wenn Du einen einfacheren Ansatz probierst, um den Fehler zu vermeiden:

Set Me!frm01MotorErfassungUfoMechDat.Form.Recordset = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)

Ich setze voraus, dass cboMotNrSuchen ein Zahlenfeld ist.

Hier erhalte ich einen Laufzeitfehler 424 - Objekt erforderlich.

Zitat von: bahasu am November 15, 2013, 20:45:33
Wobei mir der Zusammenhang zur Ausgangsfrage (wie Änderungen erkennen) noch unklar ist.
Nach meinem Verständnis würde ich eine Änderung erkennen, wenn ich einen früheren Zustand mit einem aktuellen Zustand vergleiche.
Vielleicht habe ich aber die Frage nicht verstanden.

Ich öffne z.B. einen vorhanden Datensatz, wenn jetzt hier in irgendeinem Feld etwas geändert wurde möchte ich das erkennen und erst mit einem Klick auf speichern die Änderung abspeichern.

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 15, 2013, 22:45:16
Hi

Mist copy & paste

Set Me!frm01MotorErfassungUfoMechDat.Form.Recordsource = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)


Danke für die Erklärungen.
Es gibt das Ereignis "Vor Aktualisierung" {= Form_BeforeUpdate}.
Dort könntest Du eine Bedingung einbauen:
If MsgBox("Speichern", vbYesNo) = vbNo Then Me.Undo

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 18, 2013, 07:37:08
Zitat von: bahasu am November 15, 2013, 22:45:16
Set Me!frm01MotorErfassungUfoMechDat.Form.Recordsource = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)

Gleicher Fehler -> Laufzeitfehler 424 - Objekt erforderlich.


Zitat von: bahasu am November 15, 2013, 22:45:16
Es gibt das Ereignis "Vor Aktualisierung" {= Form_BeforeUpdate}.
Dort könntest Du eine Bedingung einbauen:
If MsgBox("Speichern", vbYesNo) = vbNo Then Me.Undo

Dann erhalte ich beim wechsel zwischen dem Hfo und Ufos immer diese Meldung und das kann dann nerven.

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 18, 2013, 09:00:19
Hi,

kannst Du eine komprimierte und gezippte a2003-Datenbank zur Verfügung stellen?

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: DF6GL am November 18, 2013, 09:01:09
Hallo,


1)
Set  Me!frm01MotorErfassungUfoMechDat.Form.Recordsource = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)


2)


ZitatWie kann ich nun Änderungen in den ganzen Formularen erkennen?
.
.

Dann erhalte ich beim wechsel zwischen dem Hfo und Ufos immer diese Meldung und das kann dann n
erven.

Tja, das ist doch was Du wolltest....(und die Frage Frage ist eigentlich, WARUM Du das willst.)

Bei einem Formularwechsel wird nun mal gespeichert...


Zitat
Wie kann ich nun Änderungen in den ganzen Formularen erkennen?

"Erkennen" durch Nutzung der Dirty-Eigenschaft (des jeweiligen Formulares) oder der Beforeupdate-Ereignisse der jeweiligen Forms, bzw. der einzelnen Steuerelemente, wenn man es "genauer" (differenzierter) haben will. Diese Situation eignet sich für diejenigen Fälle, in denen eine Speicherung (nach Prüfung auf Plausibilität) verhindert werden soll. Grundsätzlich nachzufragen, ist eher hinderlich (wie Du selber merkst).  
Die  AfterUpdate-Ereignisse kommen dann in Frage, wenn man sicher sein muss/will, dass die Werte gespeichert wurden  und mit den gespeicherten Werten direkt weitergearbeitet werden soll.

Vielleicht sollte die Ablaufsteuerung nochmal überdacht werden.
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 18, 2013, 17:39:41
Hi Tom,

sorry, für das set...
Ich brauche wohl eine neue Brille oder ein neues Hirn. ;D

Zitat von: -Tom- am November 18, 2013, 07:37:08
Dann erhalte ich beim wechsel zwischen dem Hfo und Ufos immer diese Meldung und das kann dann nerven.

wobei ich mich frage, warum das obige Ereignis alleine beim Wechsel (d.h. ohne jegliche Datenänderung) zwischen Formularen ausgelöst werden sollte.

Harald

Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 19, 2013, 09:03:43
Hallo,

ZitatSet Me!frm01MotorErfassungUfoMechDat.Form.Recordsource = "SELECT * FROM tbl_MotorGrunddaten WHERE MotorGrunddatenID = " & Nz(Me!cboMotNrSuchen, 0)

Danke, damit ist der Fehler weg.

Zitat
"Erkennen" durch Nutzung der Dirty-Eigenschaft (des jeweiligen Formulares) oder der Beforeupdate-Ereignisse der jeweiligen Forms

Ich werde das damit nochmal testen, denn der jetzige Versuch scheitert an weiteren Fehlermeldungen.

Zitatwobei ich mich frage, warum das obige Ereignis alleine beim Wechsel (d.h. ohne jegliche Datenänderung) zwischen Formularen ausgelöst werden sollte.

Das ist natürlich richtig dass das Ereignis auch nur bei einer Änderung auftreten sollte. Wie gesagt werde das nochmal testen.

Danke für die Hilfe!

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 28, 2013, 19:18:17
Hallo,

Das mit dem erkennen von Änderungen im HFo und Ufo funktioniert nun wie gewünscht.
Nur habe ich das Problem dass wenn ich einen neuen Datensatz erstelle oder von einem leeren neuen DS in einen bestehenden DS wechsle das BeforeUpdate-Ereignis greift und mir eine Änderung erkennt die es nicht gibt.

Kann es sein dass das das durch die Verknüpfung von dem Hfo mit dem Ufo kommt?

Kann ich erkennen was geändert wurde?
Wie kann ich das ganze verhindern umgehen?

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 28, 2013, 19:40:16
Hi,

kannst Du eine komprimierte + gezippte Datenbank im a2003-Format zur Verfügung stellen?

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: ebs17 am November 28, 2013, 19:51:07
Bei neuen Datensätzen:
If Not Me.NewRecord Then ...

Zur Änderungsprotokollierung gibt es übrigens eine Demo: AccSampleAuditTrail.zip (http://www.dbwiki.net/wiki/Datei:AccSampleAuditTrail.zip)
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 28, 2013, 19:53:59
Muss es auch zwei Archive aufteilen, sonst langen mir die 200KB nicht.
Zum entpacken das .txt bei der Dateiendung entfernen!

Das ganze passirt im Hfo "frm01MotorErfassung".

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 28, 2013, 19:54:55
Zitat von: ebs17 am November 28, 2013, 19:51:07
Bei neuen Datensätzen:
If Not Me.NewRecord Then ...

Zur Änderungsprotokollierung gibt es übrigens eine Demo: AccSampleAuditTrail.zip (http://www.dbwiki.net/wiki/Datei:AccSampleAuditTrail.zip)

Das habe ich versucht, aber das BeforeUpdate-Ereignis wird zuvor ausgelöst und da enthält Me.NewRecord noch eine 0.

-Tom-
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 28, 2013, 21:34:31
Hi,

die Dateien kann ich nicht öffnen (ZIP_Ordner ist ungültig.

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 29, 2013, 14:40:43
Zitat von: bahasu am November 28, 2013, 21:34:31
Hi,

die Dateien kann ich nicht öffnen (ZIP_Ordner ist ungültig.

Harald

Jetzt aber -> Motordatenbank (http://www.weber-computerhilfe.de/temp/Motordatenbank21_2.zip)

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 29, 2013, 16:24:54
Hi Tom,

1. Datei ist ladbar.
2. Herzlichen Gückwünsch zu den Beziehungen (gibt reichlich)
3. Kannst Du bitte beschreiben, wie Du vorgehst: Start-Formular ? Und dann?
    Die Angaben helfen, dass ich nicht den Fehler suchen muss, sondern mich auf das Finden der Ursache konzentrieren kann.

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am November 29, 2013, 18:12:28
Zitat von: bahasu am November 29, 2013, 16:24:54
2. Herzlichen Gückwünsch zu den Beziehungen (gibt reichlich)

Ich wurde hier ja von diesem Forum bestens unterstützt!

Zitat von: bahasu am November 29, 2013, 16:24:54
3. Kannst Du bitte beschreiben, wie Du vorgehst: Start-Formular ? Und dann?
    Die Angaben helfen, dass ich nicht den Fehler suchen muss, sondern mich auf das Finden der Ursache konzentrieren kann.


1. Motordaten erfassen/ändern
2. Über Motornummer suchen einen Motor auswählen
3. Schaltfläche "Neu" drücken -> Jetzt sollte nicht die Abfrage "Änderungen speichern?" kommen.
4. jetzt erscheint ein Neuer leerer Datensatz
5. wenn ich nun auf Beenden drücke, erscheint auch die Meldung "Änderung speichern?"  was aber bei einem leeren Datensatz auch nicht passieren soll.

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am November 30, 2013, 08:32:48
Hi Tom,

Die geänderte gezippte Version ist mit 297 kb zu lang. Deshalb "nur" Kommentare.

Knackpunkt waren die Zuweisungen von ... = 0 im "Neu"-Button. Nach Deaktivieren mit "'" unterblieb der Änderungshinweis.
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_thermo = 0
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_fremdlüfter = 0
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_korrossionsschutz = 0
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_kondenswasserbohrung = 0
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_säureschutz = 0
'30.11.2013 Me.frm01MotorErfassungUfoMechDat!kontr_rücklaufsperre = 0


Vom Problem unabhängig hatte ich Anweisungen von "Form.allow..." gegen "Me.allow..." getauscht.


In Ereignissen BeforeUpdate ist
    If Me.Dirty = True Then
nicht notwendig.


Den Verweis auf "Web Office ..." mußte ich deaktivieren.

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am Dezember 03, 2013, 08:51:48
Danke!

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am Dezember 07, 2013, 12:59:26
Hallo,

Ich habe hier noch eine Frage, wie kann ich denn vom Hfo eine Funktion im Ufo aufrufen?

Habe es so versucht:

CheckInput = Forms!frm01MotorErfassungUfoMechDatUfoGetr.MechDatenPrüfen_neu()

Aber da erhalte ich immer einen Laufzeitfehler 2450 - ... kann das angegebene Formular frm01MotorErfassungUfoMechDatUfoGetr nicht finden.

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am Dezember 07, 2013, 22:28:22
Hi,

ist die Funktion wie folgt deklariert?

Public Function MechDatenPrüfen_neu() as boolean

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am Dezember 08, 2013, 06:38:23
Die Funktion war nicht als Public deklariert, hab es geändert.
Geht trotzdem nicht.

Das komische ist doch dass er das Formular nicht findet.

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am Dezember 08, 2013, 18:20:41
Hi Tom,

was passiert bei:

CheckInput = Me.frm01MotorErfassungUfoMechDat.Form.MechDatenPrüfen_neu

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am Dezember 09, 2013, 20:22:10
Das funktioniert, aber ich möchte ja auf das Ufo (frm01MotorErfassungUfoMechDatUfoGetr) unterhalb von dem Ufo (frm01MotorErfassungUfoMechDat) zugreifen.

So funktioniert es leider nicht:
CheckInput = Me.frm01MotorErfassungUfoMechDat.frm01MotorErfassungUfoMechDatUfoGetr.Form.MechDatenPrüfen_neu

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am Dezember 09, 2013, 21:36:16
Hi,

In dem Form gibt es nicht die gesuchte Funktion.
Dort finde ich nur: "MechDatenPrüfenGetr_neu".

Harald
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: -Tom- am Dezember 09, 2013, 23:08:57
Zitat von: bahasu am Dezember 09, 2013, 21:36:16
In dem Form gibt es nicht die gesuchte Funktion.
Dort finde ich nur: "MechDatenPrüfenGetr_neu".

Diese soll es auch sein, war ein Tippfehler.

Tom
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am Dezember 09, 2013, 23:30:40
Hi Tom,

mit einem Test-Aufruf, der im Hauptformular plaziert ist:

MsgBox Me.frm01MotorErfassungUfoMechDat!frm0403MotorSuchenUfoElDatUfoGetr.Form.MechDatenPrüfenGetr_neu
lande ich bei der Funktion.


Die Funktion muss deklariert sein als:
Public Function MechDatenPrüfenGetr_neu() As Boolean


Harald

Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: DF6GL am Dezember 10, 2013, 08:11:13
Hallo,


warum wird nicht eine Public-Funktion in einem Standardmodul benutzt, die von allen Stellen in der Anwendung aus aufgerufen werden kann, statt dieser Vergewaltigungen von Klassenmodul-Funktionen und Verletzung der (erwünschten) Kapselung der formularbezogenen Prozeduren?
Titel: Re: Änderungen im Hfo und Ufo erkennen?
Beitrag von: bahasu am Dezember 10, 2013, 08:40:21
Hi,

vermutlich wird dieser Aufruf nicht mehr notwendig sein, wenn die Überprüfung auf vollständige Datenerfassung (siehe anderer Diskussionsbeitrag) wie gewünscht funktioniert.
Wenn wie dort vorgeschlagen die Prüfung vor dem Speichern erfolgt, musss nicht mehr im nachhinein aus anderen Formularteilen geprüft werden.

Harald