Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: OPS am Juli 29, 2010, 10:48:44

Titel: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: OPS am Juli 29, 2010, 10:48:44
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?
Titel: Re: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: Sulu am Juli 29, 2010, 11:08:59
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
Titel: Re: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: OPS am Juli 29, 2010, 12:31:23
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.
Titel: Re: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: Sulu am Juli 29, 2010, 13:30:22
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
Titel: Re: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: OPS am Juli 30, 2010, 09:18:31
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
Titel: Re: History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?
Beitrag von: OPS am Juli 30, 2010, 10:31:08
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