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
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
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
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.
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.RecordSourceeh so lauten
Set rstSource = Me.RecordSourcegruss ekkehard
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
@QMB,
du könntest ja eine gespeicherte Abfrage verwenden.
Was mich aber viel mehr interessiert:
Wozu werden die aufgezeichneten Daten schlussendlich verwendet?
LG Markus
@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
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
rst!Tabellenname = Me.Recordset.Fields(ctlSource).SourceTable
ZitatVielleicht hilft das!?
Hat es, wie du siehst.
Ich würde Phils Vorschlag folgen.
Danke!!!
Gruß
Michael
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
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.
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