Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Datensatzänderungen dokumentieren





Frage

Hallo, wenn in einem Formular Änderungen an einem bereits vorhandenen Datensatz gemacht werden, dann möchte/muss ich diese Änderungen in eine externe Tabelle ablegen. Ich habe eine entsdprechende Abfrage erstellt, welche beim Ereignis "nach Aktualisierung" ausgeführt wird. Dies klappt auch, leider jedoch nicht mit größeren Textfeldern (255) oder Memofeldern. Ich arbeite mit Access 2000.

Antwort 1 von ThomasOOP

die datentypen in beiden tabellen stimmen überein ?

vieleicht wäre es sinnvoll nur in einer tabelle zu bleiben und ein flag zu setzen + den datensatz neu einzufügen
oder geht das nicht wegen der referenziellen integrität ?

Antwort 2 von Renate

Die Datentypen stimmen überein. In der gleichen Tabelle kann ich nicht bleiben wegen der referenziellen I. Wenn die Text- bzw. Memofelder nur mit wenig Text belegt sind, dann funktioniert das auch. Sowie der Text etwas ausgiebiger wird, dann fliegt mir alles um die Ohren.

Antwort 3 von ThomasOOP

vieleicht kanns einfach die db nicht

access ist in punkto leistungsfähigkeit nicht gerade berühmt, eher berühmt berüchtigt ;-)

versuch mal folgendes

leg den datensatz ohne die memos erstmal an und dann ...

update tabelle1 a, tabelle2 b set a.feld1 = b.feld, a.feld2 ..... where a.PK ( primary key ) = zahl and b.PK = zahl

ist zwar teuflisch umständig
aber besser als nix

hoffe das ich keinen fehler in der logik habe

Antwort 4 von Renate

Danke ThomasOOP, werde ich mal versuchen,

Antwort 5 von MickK

Hallo bekommst Du denn eine Fehlermeldung? Vielleicht kannst Du mal das SQL der Abfrage (im Abfrageentwurf unter Ansicht SQL zu finden) veröffentlichen.

Gruss
Mick

Antwort 6 von Renate

Gerne! Hier das SQL der Abfrage "Historie_schreiben" in abgespeckter Form, wobei [Beschreibung] das Textfeld (250) ist:

INSERT INTO Historie ( [Key], Beschreibung, ErfDatum, [Historie erstellt], [von User] )
SELECT [Forms]![Bearbeitung]![Key] AS [Key], [Forms]![Bearbeitung]![Beschreibung] AS Beschreibung, [Forms]![Bearbeitung]![ErfDatum] AS ErfDatum, Now() AS [Historie erstellt], [Forms]![aktUser]![UserID] AS [von User];

Dies wird dann "vor Aktualisierung" ("nach" geht auch nicht) als folgende Ereignisprozedur aufgerufen:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim DocName As String
DoCmd.SetWarnings False

DocName = "Historie_schreiben"
DoCmd.OpenQuery DocName, acViewNormal, acEdit

DoCmd.SetWarnings True

Exit_Form_BeforeUpdate:
Exit Sub

Err_Form_BeforeUpdate:
MsgBox Error$
Resume Exit_Form_BeforeUpdate

End Sub

Wie gesagt, steht im Textfeld nicht zu viel Text, dann funktioniert das.
Als Fehlermeldung kommt das:
Laufzeitfehler '3001' ungültiges Argument
Wenn ich dann debugge, ist "DoCmd.OpenQuery DocName, acViewNormal, acEdit" markiert. Vielleicht kann ja da was optimiert werden. Bin noch nicht so fit im Umgang mit Prozeduren. Wäre sehr dankbar für einen guten Tipp.


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: