Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AMB am April 05, 2017, 12:53:26

Titel: VBA - Änderungshistorie
Beitrag von: AMB am April 05, 2017, 12:53:26
Hallo Zusammen!

Ich habe im Netz ein Code für eine Änderungshistorie gefunden.
Darin gibt es die Variable, die den Tabellennamen speichert (rstSource = Me.RecordSource).
Der Tabellenname ist die Datensatzquelle. Die Datensatzquelle kann aber auch ein SQL-String sein, daher würde ich lieber auf die Beschriftung verweisen.
Kann mir jemand sagen, wie ich RecordSource ersetzen muss?

Gruß
Michael


Titel: Re: VBA - Änderungshistorie
Beitrag von: Beaker s.a. am April 05, 2017, 15:30:07
Hallo Michael,
ZitatDie Datensatzquelle kann aber auch ein SQL-String sein, daher würde ich lieber auf die Beschriftung verweisen.
Welche Beschriftung? Damit kann doch dann die Variable nichts anfangen,
die wahrscheinlich auch einen SQL-String verarbeiten kann. Würde ich aus
der Benamsung jedenfalls schliessen; - kenne allerdings den Code ja nicht.
gruss ekkehard
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 05, 2017, 15:42:14
Hallo Ekkehard,

Die Variable fragt die Datensatzquelle der Tabelle ab.
Ich würde jedoch gerne die Beschriftung der Tabelle (oder den Namen der Tabelle) abfragen.

Gruß
Michael
Titel: Re: VBA - Änderungshistorie
Beitrag von: Lachtaube am April 05, 2017, 16:16:53
Eine Tabelle kennt von Hause aus keine Eigenschaft Beschriftung.

PS: Und wenn wir hier über eine Fundsache im Internet sprechen, lasse uns bitte den Fundort wissen, damit Geminsamkeiten bei der Beurteilung der Ausgangssituation herstellt werden können.
Titel: Re: VBA - Änderungshistorie
Beitrag von: Beaker s.a. am April 05, 2017, 16:28:56
Hallo Michael,
Zitat(oder den Namen der Tabelle) abfragen.
Wenn "Me.RecordSource" eine Tabelle ist, wird genau der übergeben.
Wenn's ein SQL-String ist, wird eben der übergeben.
Beschriftung s. #3
Der Sinn wird auch nicht klar. Ohne den Code gesehen zu haben (s. auch #3)
vermute ich, dass es der Funktion, die mit "rstSource" arbeitet, ziemlich egal
sein dürfte was da ankommt, solange damit ein Recordset geöffnet werden kann.
Wenn "rstSource" bereits eine Referenz auf ein RS ist, müsste die Anweisung
rstSource = Me.RecordSource
eh so lauten
Set rstSource = Me.RecordSource

gruss ekkehard
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 05, 2017, 16:49:28
Hallo,

hier mal der Code:

Dim Primaerschluesselfeld As String
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim ctl As Control
    Dim ctlType As Integer
    Dim ctlSource As String
    Dim rstSource As String
    Dim AlterWert As String
    Dim NeuerWert As String
    Dim Aktion As String
    If Me.NewRecord Then
        Aktion = "Neuanlage"
    Else
        Aktion = "Änderung"
    End If
    Primaerschluesselfeld = "Lieferanten-Nr"
    rstSource = Me.RecordSource
    Set db = CurrentDb
    Set rst = db.OpenRecordset("tblAenderungen", dbOpenDynaset)
    For Each ctl In Me.Controls
        ctlType = ctl.ControlType
        Select Case ctlType
            Case acCheckBox, acComboBox, acListBox, acTextBox, acOptionGroup
                ctlSource = ctl.ControlSource
                If Not IsNull(ctlSource) And Not ctlSource = Primaerschluesselfeld Then
                    AlterWert = Nz(ctl.OldValue)
                    NeuerWert = Nz(ctl.Value)
                    If Not (AlterWert = NeuerWert) Then
                        rst.AddNew
                        rst!Aktion = Aktion
                        rst!Tabellenname = rstSource
                        rst!Feldname = ctlSource
                        rst!Primaerschluessel = Me(Primaerschluesselfeld)
                        rst!Datum = Date
                        rst!Uhrzeit = Time
                        rst!Benutzer = CurrentUser
                        rst!AlterWert = AlterWert
                        rst!NeuerWert = NeuerWert
                        rst.Update
                    End If
                End If
        End Select
    Next ctl

Vielleicht hilft das!?
Wenn die Datensatzquelle des geänderten Formulars eine reine Abfrage (z.B. qryLieferanten) ist, dann ist alles super.
Bei mir ist die Datensatzquelle jedoch ein SQL-String.

Gruß
Michael


Titel: Re: VBA - Änderungshistorie
Beitrag von: markusxy am April 05, 2017, 16:58:51
@QMB,
du könntest ja eine gespeicherte Abfrage verwenden.
Was mich aber viel mehr interessiert:
Wozu werden die aufgezeichneten Daten schlussendlich verwendet?
LG Markus
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 05, 2017, 17:08:13
@markus888
Ja, ich könnte gespeicherte Abfragen erstellen. Das wären aber einige und somit viel Arbeit.

Wozu verwendet? Ich möchte wissen, wer was genau geändert hat.

Gruß
Michael



Titel: Re: VBA - Änderungshistorie
Beitrag von: DF6GL am April 05, 2017, 17:16:31
Hallo,

extrahiere halt den Tabellennamen aus dem SQL-String:

Dim strtbl As String

If InStr(Me.RecordSource, "Select") Then
  strtbl = Me.RecordSource
  strtbl = Mid(strtbl, InStr(strtbl, "from") + 5)
  strtbl = Split(Replace(strtbl, ";", ""), " ")(0)
Else
  strtbl = Me.RecordSource
End If




Titel: Re: VBA - Änderungshistorie
Beitrag von: PhilS am April 05, 2017, 18:28:17
 rst!Tabellenname = Me.Recordset.Fields(ctlSource).SourceTable
Titel: Re: VBA - Änderungshistorie
Beitrag von: Beaker s.a. am April 05, 2017, 20:05:57
ZitatVielleicht hilft das!?
Hat es, wie du siehst.
Ich würde Phils Vorschlag folgen.
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 06, 2017, 07:44:17
Danke!!!

Gruß
Michael
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 06, 2017, 08:33:10
Da war ich wohl zu schnell!

Die Testversion (lokal) funktionierte einwandfrei. Dann habe ich die Änderungstabelle auf den Server gezogen und mit Access verknüpft. Jetzt bekomme ich eine Fehlermeldung (Laufzeitfehler 3622).
Mein Wissen ist dafür zu beschränkt. Bitte um Hilfe!

Gruß
Michael

Titel: Re: VBA - Änderungshistorie
Beitrag von: PhilS am April 06, 2017, 09:51:53
Zitat von: QMB am April 06, 2017, 08:33:10Die Testversion (lokal) funktionierte einwandfrei.
Es ist angeraten Test-/Entwicklungsumgebungen möglichst technisch identisch zu der Produktivumgebung aufzubauen, sonst kommt es immer wieder zu unerwarteten Fehlern, die erst dort auffallen (produktiv!), wo sie am meisten stören.
Zitat von: QMB am April 06, 2017, 08:33:10Dann habe ich die Änderungstabelle auf den Server gezogen und mit Access verknüpft. Jetzt bekomme ich eine Fehlermeldung (Laufzeitfehler 3622).
Die Tabelle liegt auf einem SQL-Server? - Das wäre eine wichtige Information, die du deutlicher hättest erwähnen sollen.

Wenn du das Recordset für die Tabelle tblAenderungen öffnest, musst du die dbSeeChanges-Option angeben. Dies sagt aber auch der Text der Fehlermeldung, den du unterschlagen hast, schon sehr klar aus.
Titel: Re: VBA - Änderungshistorie
Beitrag von: AMB am April 06, 2017, 11:10:14
Hallo!

ZitatDie Tabelle liegt auf einem SQL-Server? - Das wäre eine wichtige Information, die du deutlicher hättest erwähnen sollen.
Ich wusste nicht, dass das von Bedeutung ist. Wieder etwas gelernt!  ;)

Danke, jetzt funktioniert es!

Gruß
Michael