Datensätze verschieben

Ich habe einen Datensatz bestehend aus mehreren Tabellen die zueinander in Beziehung stehen.
Nun will ich wenn der Datensatz eine bestimmte Bedingung erfüllt sozusagen archiviert wird. Also verschieben in eine andere Tabelle.
Wie mache ich das?

Ich mache das immer mit zwei Recordsets. Für zwei Tabellen mit gleicher Struktur z. B. so:

dim db as Database
dim Quelle as Recordset
dim Ziel as Recordset
dim i as Long

set db = currentdb
set Quelle = db.OpenRecorsdset („Quelltabelle“)
set Ziel = db.OpenRecordset („Zieltabelle“)

Ziel.FindFirst „Kriterien“

Ziel.AddNew
for i = 0 to Quelle.Fields.Count-1
Ziel(i) = Quelle(i)
next i
Ziel.Update

set db = nothing
set Quelle = nothing
set Ziel = nothing

Das Positionieren auf den richtigen Datensatz der Quelle kann natürlich auch anders erfolgen. Außerdem habe ich wegen der Übersicht sämtliche Fehlerbehandlung weggelassen.

Es gibt da noch die Funktion GetRows, die ein oder mehrere Datensätze in ein Array einliest. Leider ist diese Funktion nicht sehr fehlertolerant. Außerdem fehlt das Gegenstück wie z. B. SetRows, um Daten in ein Recordset zu schreiben. Da muß man dann wieder feldweise vorgehen.

Harald

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Aber wie gebe ich die Kriterien ein.
In einem Feld muss der Text „ERL“ stehen.

Feldname: Zustand
Tabelle: tblticket

Aber wie gebe ich die Kriterien ein.
In einem Feld muss der Text „ERL“ stehen.

Feldname: Zustand
Tabelle: tblticket

Den Namen der Tabelle brauchst Du im Kriterium nicht angeben. Du gibst ihn ja bereits beim Erstellen des Recordsets an. Das Kriterium gibst Du für Dein Beispiel wie folgt an.

Quelle.FindFirst „Zustand = ‚ERL‘“

Hast Du den zu suchenden Begriff in einer Stringvariablen gespeichert, z. B. in der Variablen s so mußt Du folgendes eingeben:

Quelle.FindFirst „Zustand = '“ & s & „’“

Harald

SQL-Mengeninsert wäre da glaube ich die schnellere Lösung:

INSERT INTO tabelle2 (feld1, …) SELECT * FROM tabelle1 WHERE feld1 LIKE „xxx“

DELETE * FROM tabelle2 WHERE feld1 LIKE „xxx“

Grüße, Robert