Hallo, ich habe ein Problem mit meiner VBA und finde den Fehler nicht :'(
Ich hab eine Tabelle "Planungsdaten" mit den Spalten:
1-Nr
2-Projekt
3-Beschreibung
4-Notiz
5-Datum Start
6-Datum Ende
7-Prio
8-Status
usw...
genau die gleichen Spalten hab ich in der Tabelle "Archiv"
Wenn ich nun in meinem Formular auf die Schaltfläche klicke "Befehl22",
dann soll die VBA überprüfen in der Tabelle Planungsdaten in welchen Zeilen alles in der Spalte "Status"
ein "beendet" drin steht.
Diese Zeilen soll der Code dann kopieren und in der Tabelle "Archiv" hinzufügen, danach soll er die Datensätze in der Tabelle "Planungsdaten" löschen.
Die Zelle in der Spalte Status sind mit einem Nachlage-Assistent eingerichtet
es kann über ein Kombinationsfeld 4 Aktionen ausgewählt werden:
(Der Felddatentyp ist "Kurzer Text")
1-nicht begonnen
2-in Vorplanung
3-läuft
4-beendet
meine VBA sieht folgendermaßen aus:
Private Sub Befehl22_Click()
Dim db As Database
Dim rsSource As Recordset
Dim rsArchive As Recordset
Dim strSQL As String
' Datenbank öffnen
Set db = CurrentDb
' SQL-Abfrage für die zu archivierenden Datensätze
strSQL = "SELECT * FROM Planungsdaten WHERE [Status] = 'beendet';"
' Datensätze aus Planungsdaten auswählen
Set rsSource = db.OpenRecordset(strSQL)
' Überprüfen, ob Datensätze gefunden wurden
If Not rsSource.EOF Then
' Archiv-Recordset öffnen
Set rsArchive = db.OpenRecordset("Archiv", dbOpenDynaset)
' Durch die gefundenen Datensätze iterieren und ins Archiv kopieren
Do Until rsSource.EOF
rsArchive.AddNew
For i = 0 To rsSource.Fields.Count - 1
rsArchive.Fields(i).Value = rsSource.Fields(i).Value
Next i
rsArchive.Update
rsSource.MoveNext
Loop
' Recordsets schließen
rsArchive.Close
rsSource.Close
' Datensätze in Planungsdaten löschen
db.Execute "DELETE FROM Planungsdaten WHERE [Status] = 'beendet';"
MsgBox "Datensätze wurden ins Archiv verschoben.", vbInformation
Else
MsgBox "Keine Datensätze mit 'beendet' gefunden.", vbInformation
End If
' Datenbank schließen
Set db = Nothing
End Sub
Vielleicht kann mir jemand helfen oder hat einen anderen rat für mich.
Grüße
Mario
Gibts eine Fehlermeldung?
Weshalb Schleifen über Recordsets und keine Anfügeabfrage?
Der Primärschlüssel wird wie ich sehe auch kopiert - ist das Feld im Archiv ohne AutoID?
Warum verwendest du keine Transaktion?
Hallo,
wozu muss man Datensätze in ein Archiv verschieben?
Wenn es Beziehungen gibt, könnte das auch zu Problemen führen.
Da Du auch in die gleiche DB kopierst, gewinnst Du noch nicht mal Platz.
Datensätze mit dem Status "Beendet" können einfach ausgeblendet werden. Dann sind diese Datensätze in der normalen Ansicht auch nicht mehr zusehen.
PS :
Nachschlagefelder sind nur in Formularen sinnvoll und haben in Tabellen nichts zu suchen. Für den Status sollte auch eine Tabelle angelegt werden.
@ Markusxy
Ja es gibt eine Fehlermeldung:
Laufzeitfehler 3464 = Datentypenkonflikt in Kriterienausdruck.
Die Verwendung von Schleifen über Recordsets anstelle einer Anfügeabfrage ermöglicht flexiblere Auswahlkriterien, zeilenweise Datenbearbeitung vor dem Archivieren, Benutzerinteraktion und -rückmeldung sowie eine präzisere Transaktionskontrolle.
Genau der Primärschlüssel wird hier mitkopiert, kann das Problem daran liegen ?
Mit Transaktionen kenn ich mich noch nicht aus.
@MzKlMu ich habe in meiner Planungsdatentabelle über 400 Zeilen mit Daten, zur Übersicht möchte ich die beendeten Projekte am besten aus der Tabelle raus haben. Sollte ich aber später nach einem alten Projekt suchen, wäre es Hilfreich wenn ich die Datei noch habe, darum möchte ich mir ein Archiv anlegen.
Ich habe auch noch weitere Tabellen die ich damit verbinden möchte. Aber erstmal möchte ich die eine Tabelle zum laufen bekommen bevor ich mich auf alle Tabellen stürze.
Für den Status habe ich eine Tabelle angelegt.
Hallo,
Das Vorhaben ist ersatzlos überflüssig und bringt Dir nicht den geringsten Vorteil. Wenn Du die Datensätze mit dem Status "Beendet" ausfilterst hast genau die von Dir gewünschte Übersicht. Und die mit dem Status "Beendet" kannst Du direkt alleine anzeigen, in dem die DS mit dem Status <4 ausgefiltert werden.
Sobald Beziehungen angelegt sind, wird bei eingestellter referentieller Integrität (wie es sein sollte) Dein Vorhaben ohnehin nicht möglich sein.
Dringender Rat, lasse es sein, Du kriegst nur Probleme.
Wenn du eine Tabelle für den Status angelegt hast, sollt die Tabelle 2 Spalten haben, einen Primärschlüssel (Zahl) und ein Feld für den Klartext. Als Status wird aber die Zahl gespeichert.
Und ein weiterer dringender Rat, wirf die Nachschlagefelder in den Tabellen raus.