Auf der Suche nach Änderungsmöglichkeiten fand ich in diesem Post:
http://www.access-o-mania.de/forum/index.php?topic=4106.0
Ein schönes Beispiel. Ich war begeistert! So kurz und elegant.
Ich habe das für meine DB angepasst aber da stimmt was nicht. In der Zeile
ZitatFO = Left(Nz(C.OldValue, ""), 255) 'FO erhält den alten Wert
bricht er immer ab. Mit dieser Fehlermeldung:
Zitat
Laufzeitfehler 3251
Operation wird für diesen Datentyp nicht unterstützt
Warum denn? Warum kann ich auf .OldValue nicht zugreifen?
Welche Anpassungen könnten das zum Laufen bringen?
Edit:
Viele Felder in dem Formular sind über Foreign Keys verlinkt. Kann es sein, dass ich für die Speicherung von "Zahlen" einen anderen Befehl benutzen muss?
Hallo OPS,
welcher Datentyp ist das denn? Aus der Darstellung ist das nicht ersichtlich für mich. Wenn ich das richtig verstehe, sagst du ihm, dass FO da den Wert aus der Tabelle c aus der Spalte OldValue bekommen soll. (über bestimmte verknüpfungen?) Oder bin ich da jetzt auf dem falschen Dampfer ???
LG
Sulu
Die Datentypen der ursprungstabelle sind Text; Zahl; und Ja/Nein (Bool)
Aber so wie ich das verstanden habe, müsste der Befehl jeden Wert, egal ob Text Zahl oder Bool in Text umwandeln und in der Tabelle ablegen.
.oldValue ist ein Operator von VBA. Er sagt: "Nimm den alten Wert (vor der Änderung) von der zugehörigen Variable (hier C)."
In der Beispieldatei funktioniert es, hier nicht.
Oh. Danke für die Info. Jetzt habe ich was gelernt und konnte nicht weiterhelfen...
Tut mir leid.
Hast du dich schon im Netz mal umgeschaut? wäre die einzige Informationsquelle, die ich jetzt noch wüsste, von den andern Boardusern einmal abgesehn.
LG
Sulu
Ich habe mal den ganzen Quelltext gepostet:
ZitatPrivate Sub RecordChanges(DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String
' C Control; T ? ; FO Formular Old; FN Formular New
' dies ist nur ein Beispiel - speziell die Handhabung der NULL-Werte kann man
' natürlich auch ganz anders gestalten!
For Each C In Me.Controls ' Für jedes Steuerelement mache:
T = "" ' T wird geleert
On Error Resume Next
T = C.ControlSource ' T erhält den Wert des Steuerelements?
On Error GoTo 0
If T <> "" Then ' Wenn T leer ist mache dies:
If DeleteRecord Then
FO = Left(Nz(C.Value, ""), 255)
If FO = "" Then
FO = "<NULL>"
FN = "<NULL>"
Else
FN = "<DELETED>"
End If
Else
Und hier bricht er ab!
---> FO = Left(Nz(C.OldValue, ""), 255)
If FO = "" Then FO = "<NULL>"
FN = Left(Nz(C.Value, ""), 255)
If FN = "" Then FN = "<NULL>"
End If
If FN <> FO Then
CurrentDb.Execute "INSERT INTO tbl_signals_History (FieldName, OldValue, NewValue, DateOfChange) " & _
" VALUES ('" & C.Name & "','" & FO & "','" & FN & "',Now())"
End If
End If
Next C
End Sub
Ich hab die Lösung gefunden.
Beim Speichern von Steuerelementen die auf Lookup-Tabellen zurückgreifen entsteht der Fehler. ich fange den ab, indem ich sage:
Zitat
If T="verlinktes Steuerelement" then goto Ignore:
(...)
End If
Ignore:
Next C