online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Vaddaziegler vom 20.02.2022, 13:48 Options

Erst Archiv dann Löschfunktion

Hallo Supportler!

Ich möchte in meiner DB aus der tbl_MediPlan zunächst eine (markierte) Zeile in eine tbl_Archiv sichern und anschließend diese Zeile dann aus der tbl_MediPlan löschen. Mit einer Abfrage komme ich da nicht weiter - ich denke da muss Code her. Wie sollte der aussehen? Insbesondere macht mir das Selektieren der markierten Zeile Probleme. Meine Versuche endeten immer damit, dass alle Zeilen gelöscht wurden.

Für Anregungen bin ich Euch wie immer dankbar.

Stefan


Antwort schreiben

Antwort 1 von RaHi vom 20.02.2022, 18:30 Options

Hallo Stefan,

ich mache mal paar Annahmen, da die Angaben etwas spärlich sind:

1. du benutzt MS Access
2. deine Tabelle hat einen eindeutige ID (primary Key), z.B. ID vom Typ Autowert
3. deine tbl_Archiv ist identisch aufgebaut (bei ID allerdings kein Autowert sondern Zahl (long int)

Dann würde ich folgendermaßen vorgehen:

a) erstelle ein Formular mit der Datenherkunft tbl_Mediplan (z.B. in der Standardansicht Datenblatt)
b) erstelle beim Ereignis "Beim Löschen" folgende Prozedure:

Private Sub Form_Delete(Cancel As Integer)
DoCmd.RunSQL "INSERT INTO Tbl_archiv SELECT * FROM tbl_mediplan where ID = " & Me!ID
End Sub

Das Löschen wird über die Access Standardverfahren ausgeführt (indem du im Formular auf den Datensatzzeiger gehst und die Taste "DEL" drückst. Das Ereignis "Beim Löschen" wird VOR dem eigentlichen Löschvorgang ausgelöst. Du solltest jedoch beachten das das Löschen und das INSERT-Statement unabhängige Statements sind. Mein Beispiel prüft nicht, ob das eine oder andere Statement nicht ausgeführt worden ist und es so zu inkonsistenzen kommen kann.
Solltest du MSSQL oder ORACLE verwenden, dann empfehle ich eine Triggerfunktion, die es unter Access leider nicht gibt.

Gruß
Ralf

Antwort 2 von Vaddaziegler vom 21.02.2022, 10:32 Options

Hallo Ralf,

Danke für die schnelle Antwort. Ich arbeite mit Access 2007. Die zu löschende Zeile befindet sich in einem Unterformular, Datenherkunft ist die genannte tbl_MediPlan. Der Anwender soll halt nur einen Button Med_Loeschen betätigen und dann soll die beschriebene Funktion in einem Rutsch ablaufen. 1. archiviern der markierten Zeile, 2. loeschen des Inhaltes dieser Zeile. Wie schon beschrieben funktioniert das auch schon, bis auf das Problem, dass eben ALLE Zeilen gelöscht werden und nicht nur die markierte. Ich bastele da jetzt schon seit Tagen dran....

Gruß
Stefan

Antwort 3 von RaHi vom 21.02.2022, 11:06 Options

Hallo Stefan,

zu den Annahmen 2 und 3 hast du noch nichts gesagt. Ich gehe mal davon aus, dass sie zutreffen. Je nachdem wo dein Lösch-Button liegt (Hauptformular bzw Unterformular), musst du die eine oder andere idref-Zuweisung ausblenden. Den Namen des Unterformulars musst du entsprechend anpassen.

Dim idRef As Long

' Löschbutton im Unterformular
idRef = Me!ID
' Löschbutton im Hauptformular
idRef = Me!MED_UF.Form!ID

MsgBox "Archivere und Lösche den Datensatz mit der ID = " & idRef

DoCmd.RunSQL "INSERT INTO Tbl_archiv SELECT * FROM tbl_mediplan where ID = " & idRef
DoCmd.RunSQL "DELETE * FROM tbl_mediplan where ID = " & idRef

Die Msgbox-Anzeige sollte dir die ID zum dem Datensatz anzeigen der gelöscht wird.
Eventuell könnstest du noch ein
Me!MED_UF.Form.Requery
bzw. 
Me.Requery 
am Ende noch einfügen.

Gruß
Ralf

Antwort 4 von Vaddaziegler vom 22.02.2022, 18:11 Options

Hallo Ralf,

mit dem ersten Vorschlag habe ich es jetzt hinbekommen.

Nochmals Danke für die kompetente Hilfe.

Gruß

Stefan

Ähnliche Themen

Keine Dateneingabe im Formular möglich
fabiella  12.08.2008 - 32 Hits - 1 Antwort

Textfeld-Eigenschaften
maxim66  20.08.2008 - 43 Hits - 7 Antworten

Anfängerfrage access 2007
wundi23  14.08.2008 - 95 Hits - 6 Antworten

Archiv - Programm für Münzen
Laguna  22.09.2008 - 24 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026