Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

History Änderungshistorie Änderungsprotokoll: Warum geht dieser Befehl nicht?

Begonnen von OPS, Juli 29, 2010, 10:48:44

⏪ vorheriges - nächstes ⏩

OPS

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?

Sulu

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

OPS

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.

Sulu

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

OPS

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

OPS

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