Funktion f. Audit Trail aus Unterformular aufrufen

ich habe mittels einer Funktion Trackchanges() einen Audittrail in der Access DB eingerichtet, der auch aus allen Formularen gut aufgerufen wird und funktioniert.

Allerdings klappt dies nicht für Unterformulare, für die musste ich dann mit private subs arbeiten.

Weiss da jemand etwas eleganteres?

Viele Grüße

Neontiger

Hallo Neontiger,

ich habe mittels einer Funktion Trackchanges() einen

diese Funktion kenne ich nicht :frowning:

Audittrail in der Access DB eingerichtet,

definiere genauer: eingerichtet

der auch aus allen Formularen gut aufgerufen wird und funktioniert.

auch UFOs sind Formulare :wink:

Allerdings klappt dies nicht für Unterformulare, für die
musste ich dann mit private subs arbeiten.

definiere genauer: klappt nicht

Weiss da jemand etwas eleganteres?

mangels Informationen: nein

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

btw um welche Access-Version geht es?

Hallo Netwolf,

Danke auch für die schnelle Reaktion hierauf.

Die Funktion Trackchanges habe ich gemäß Beispielprogrammen im WWW so selbst geschrieben, das in einer Audit-Trail Tabelle die Änderungen festgehalten werden (alter Wert, neuer Wert, wer, wann, welches Feld, welches Formular).

Die Funktion wird in den Formularen aufgerufen „vor Aktualisierung“ und „Beim Löschen“. Wie gesagt, alles funktioniert, d.h. die geänderten Datensätze werden in der Tabelle Audit-Trail protokolliert, wie gewünscht :smile:.

Ich kann diese Funktion aber leider nicht aus Unterformularen aufrufen, dann wird nichts in der Tabelle protokolliert.
Wenn ich in diesen Unterformularen dann als Alternative mein Funktionsprogramm als Private Sub („Ereignisprozedur“) erstelle (mit leichten Abwandlungen), dann werden auch wieder alle Änderungen in dem Audit-Trail protokolliert :smile:. Wie kann ich erreichen, dass auch aus Unterformularen die Funktion aufgerufen wird?
Vielleicht liegt es daran, wie ich den Formularnamen in der Funktion ermitteln lasse, vielleicht muss man dies für Unterformulare anders machen; ich mache das so:

Dim MyForm As Form
(…)
Set MyForm = Screen.ActiveForm

und später lase ich dann myform.name in meine Audit-Trail Tabelle schreiben.

Ist es jetzt klarer?

Grüße

Neontiger

Hallo,

ändere die Funktion so, daß sie

  1. als globale Funktion in einem Standard-Modul steht.
  2. ein Argument erhält, das ein Form-Objekt übergibt.
  3. in den Form_BeforeUpdate und Form_Delete-Ereignisprozeduren aller überwachten Formualre aufgerufen wird und dabei das akt Form (Me) bei o. g. Parameter übergeben wird.

Sub Form_BeforeUpdate(Cancel as Integer)
Trackchanges Me
End Sub

In der Funktion kann dann auf alle Formular-Objekte über dieses Argument zugegriffen werden, wobei das auch mit Unterformularen (d. h. Formularen, die in einem UFO-Steuerelement angezeigt werden) funktioniert.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

ebenfalls Danke, auch hier muss ichs erst ausprobieren (wie bei Problem mit Schutz von DB).

Nochmal viele Grüße

Neontiger

Hi Franz,

habe alles umgesetzt, es klappt!!!

hatte noch die Schwierigkeit, dass ich zwei Variablen übergeben muss: False für Deleterecord bei Änderung und True für Deleterecord bei Löschen; jetzt habe ich deshalb auch noch gelernt, dass ich zwei Variablen nur mit Call übergeben kann…

Danke und Grüße

Neontiger

Hallo,

„dass ich zwei Variablen nur mit Call übergeben kann…“ ??

Trackchanges Me, Feld1, Feld2

kommt ohne Klammern aus, falls es sich um einen Funktionsaufruf ohne Zuweisung des Rückgabewertes handelt.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

Hallo Franz,

„dass ich zwei Variablen nur mit Call übergeben kann…“ ??

Das stand so in der Access-Hilfe, und hat dann funktioniert.

Trackchanges Me, Feld1, Feld2

Ich weiss nicht mehr genau, was ich alles ausprobiert hatte, aber ich hatte da eben Probleme, bis ich Call verwendet habe.

Die Sub heißt jetzt:

Private Sub Form_BeforeUpdate(Cancel As Integer)
Call TrackChanges(False, Me) ’ Bei Delete entsprechend mit (True, me)
End Sub

und übergibt an:

Function TrackChanges(DeleteRecord As Boolean, MyForm As Form)

und, das Wichtigste: funktioniert.

Also nochmals DANKE!

kommt ohne Klammern aus, falls es sich um einen
Funktionsaufruf ohne Zuweisung des Rückgabewertes handelt.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Grüße zurück aus Oberbayern

Doris, Neontiger

HALLO,

Call nicmmt man normalerweise nur bei Subs und nicht bei Funktionen.

Insofern muß das auch gehen:

Private Sub Form_BeforeUpdate(Cancel As Integer)
TrackChanges False, Me ’ Bei Delete entsprechend mit (True, me)
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!