Neuigkeiten:

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

Mobiles Hauptmenü

Datensatz inkl. Zuordnungseinträge löschen

Begonnen von Micharius, November 27, 2017, 13:53:04

⏪ vorheriges - nächstes ⏩

Micharius

Hallo zusammen

Wieder mal ich. In meiner Datenbank werden Datensätze aus der Tabelle tblProjekte in einem Formular dargestellt. Auf den PK ProID dieser Tabelle existieren zudem in 2 Zuordnungstabellen Einträge, wo Kontakte damit in Verbindung gebracht werden.
Wenn ich nun dem Benutzer die Möglichkeit geben will, den Datensatz im Formular zu löschen, müssten also diese Verweise auch gelöscht werden, sonst kann der Datensatz nicht entfernt werden. Als Anfänger hätte ich jetzt probiert, zuerst die Einträge in der Zuordnungstabelle zu löschen, und dann den Datensatz selbst.

Gesetzten Fall, dass dies auch Sinn macht, hätte ich es mit folgendem Code probiert:

DoCmd.Execute "DELETE * FROM tblZuoKontakte WHERE ProIDRef = " & Me!ProID

Doch das funktioniert nicht, bei Me!ProID scheint irgendein Fehler zu sein (Fehler beim Kompilieren).

Anschliessend würde ich natürlich dann den Datensatz selber auch noch löschen lassen.

Ob das empfehlenswert ist, weiss ich aber nicht und wäre deshalb froh um eine Einschätzung und ggf. eine Angabe, was ich Code verändern müsste.

Liebe Grüsse

Micharius

MzKlMu

Hallo,
wenn Du in den Beziehungen referentielle Integrität (wie es unbedingt sein sollte) Löschweitergabe eingestellt hast, geht das automatisch. Löschung eines 1-Datensatzes löscht dann auch die zugehörenden n-Datensätze.
Ohne irgendetwas programmieren zu müssen.

Und dann noch ein grundsätzliche Anmerkung:
Warum sollen Datensätze gelöscht werden ?
Macht man in einer Datenbank normalerweise nicht.
Gruß Klaus

Lachtaube

Es gibt kein DoCmd.Execute, was Du im Objekt-Katalog im VBA-Editor (wohl nie nie geöffnet - oder?) leicht überprüfen kannst. Sehr wohl wirst Du, wenn Du dort nach Execute suchst, herausfinden, dass die DAO.Database-Klasse eine Execute-Methode zum Ausführen von Aktionsabfragen bereitstellt.    CurrentDb.Execute "DELETE FROM tblZuoKontakte WHERE ProIDRef = " & Nz(Me.ProID, 0), _
                      dbFailOnError
Grüße von der (⌒▽⌒)

Micharius

Hallo
Danke für die raschen Antworten!

@MzKlMu
Referentielle Intergrität habe ich aktiviert. Aber - und auf die Gefahr, dass ich jetzt mich als kompleten Volldummy oute - keine Löschweitergabe. Ich habe das schlichtweg nicht so gelernt. Ist die Aktivierung dieser bei allen Beziehungen empfohlen, oder speziell - weil bei mir der Fall - bei n:m Beziehungen?

@Lachtaube
Wenn man überhaupt kein VBA kann, klaut man sich die Schnipsel eben im Netz zusammen. Manchmal hat man Glück und es funktioniert, manchmal bringt man es mit Ausprobieren hin, und manchmal gar nicht. So sieht die traurige Wahrheite aus  :'( In diesem Sinne: Ja, im Objekt-Katalog im VBA Editor habe ich nicht nachgeschaut. Wenn was rot markiert raus kommt weiss ich jeweils, das was falsch ist. Das wahr hier aber nicht der Fall....
Mich zumindest in die Grundlagen einzuarbeiten ist seit längerem eine Pendenz bei mir - leider aber noch nicht umgesetzt.

Grüsse

Micharius

MzKlMu

Hallo,
ZitatIch habe das schlichtweg nicht so gelernt
so pauschal hast Du da was falsches gelernt. Ob das zur Anwendung hängt vom Fall ab und das musst Du als Entwickler entscheiden. Wenn Du die Detaildatensätze nicht mehr brauchst, dann lösche sie über die Löschweitergabe dazu ist die da.
Ob das 1:n ist oder n:m spielt dabei keine Rolle.

Aber noch mal der Hinweis/Frage warum löschst Du Datensätze ?
In einer Datenbank löscht man keine Datensätze die mal gültig waren. Man nimmt allenfalls ein Flag auf um diese bei Bedarf auszufiltern.
Gruß Klaus

Micharius

Hi MzKlMU

Besten Dank für den Input - ich buch das unter "wieder etwas gelernt" ab.

ZitatAber noch mal der Hinweis/Frage warum löschst Du Datensätze ?

Ja eigentlich eine gute Frage. Ich habe die Möglichkeit eingebaut, ein Projekt auf "inaktiv" zu setzen, wenn es z.B. nicht mehr benötigt wird. Löschen wäre einfach dazu, einen z.B. irrtümlich erfassten Datensatz zu löschen. Gelöscht habe ich bis anhin nichts und werde mir natürlich das Ganze unter Anbetracht
Zitatvon In einer Datenbank löscht man keine Datensätze die mal gültig waren
noch überlegen. :-\

Herzlichen Dank!

Grüsse

Micharius

MzKlMu

Hallo,
da wäre dann das Löschen richtig. Aber es ist relativ unwahrscheinlich, dass dieser zu löschende DS dann auch einen n-Eintrag bekommen hat.
Gruß Klaus