Hi,
meine Kontakte sind in verschiedene Typen unterteilt, da sich beim Klicken auf einen Kontakt, welcher z.B. in einem Endlosformular erscheint, je nach Typ ein anderes Fenster öffnen soll. Die Typeinteilung erfolgt über eine zugewiesene Spalte in der Kontakttabelle. Hier wird eine ID erfasst. Eine Tabelle "Typen" liefert dafür den FS.
Ein Formular, welche die Kontaktdetails dann pro Datensatz anzeigt beinhaltet auch eine Schaltfläche "Löschen", um den Kontakt zu löschen. Dieses Ereignis beinhaltet folgenden Code:
Private Sub Txt_SEC_KontaktLöschen_Click()
If MsgBox("Kontakt wirklich löschen", vbYesNo, "Achtung") = vbYes Then
DoCmd.RunCommand acCmdDeleteRecord
Else
End If
End Sub
Nun habe ich folgendes Problem: Wenn ich aus einer Liste von Kundenkontakten (Endlosform) einen Kunden aufrufe, so wird das sich nun öffnende Fenster als Dialog geöffnet. Wenn ich dann von diesem Kundenkontakt einen weiteren Kontakt aufrufe (ebenfalls Dialog) und diesen Kontakt dann mit Klick auf die o.g. Schaltfläche lösche, so wird der Kontakt gelöscht, aber auch der Kontakt von dem aus ich den zweiten Kontakt aufgerufen habe. Weiterhin wird mir in der Tabelle "Typen" der Typeeintrag gelöscht, ohne dass irgendwelche referentiellen Einstellungen getroffen worden sind.
Wie kann das sein und wie kann ich es so hinbekommen, dass wirklich nur der Kontakt gelöscht wird, um den es geht.
Hinweis: meine Datenbank ist in FE und BE geteilt wobei das BE ein SQL Server ist.
Hallo,
Zitatohne dass irgendwelche referentiellen Einstellungen getroffen worden sind.
das kann ja wohl nicht sein, von allein kann das nicht passieren. Aber da du ein
SQL-Server Backend hast, kann man sich das ja wohl kaum einmal anschauen.
Da weiß ich jetzt leider auch keinen anderen Rat, als dass du dir die Tabellenbeziehungen noch einmal ganz genau ansehen solltest. Evtl. sind auch Trigger/SQL-Skripte im Einsatz?
Hi, es sind definitiv keine Trigger oder sonstige Skripte im Einsatz....
Handelt es sich um ein und dasselbe Formular das zweimal geöffnet wird?
Dann solltest du den Datensatz besser per SQL (-> Löschabfrage) gezielt löschen.
Was die Löschung des Typs in der anderen Tabelle betrifft, so sehe ich da keinen Zusammenhang.
Ich würde mir angewöhnen, auf dem Server nur mittels ADODB.Command zu löschen und nicht mit DoCmd.
Spickvorlage
Public Function EmpfaengerLoeschen(ByVal EmpfNr As String) As Boolean
On Error GoTo Fehlerbehandlung
Dim i As Integer
Dim intGeloescht As Integer
i = MsgBox("Soll der Empfänger " & EmpfNr & " (" & WieHeisstDerKundeLang(EmpfNr) & ") gelöscht werden? ", vbQuestion + vbYesNo + vbDefaultButton2, "FI-Dialog: Empfängerstammdaten löschen ")
If i = 6 Then
Dim strLoeschanweisung As String
strLoeschanweisung = "DELETE FROM tblEmpf WHERE EmpfNr='" & EmpfNr & "'"
conn.BeginTrans
Dim Loeschbefehl As New Command
With Loeschbefehl
Set .ActiveConnection = conn
.CommandType = adCmdText
.CommandText = strLoeschanweisung
.Execute intGeloescht
End With
If intGeloescht = 1 Then
conn.CommitTrans
EmpfaengerLoeschen = True
Exit Function
Else
conn.RollbackTrans
MsgBox "SQL: " & strLoeschanweisung & " ", vbCritical, "Fehler: Es wurden " & intGeloescht & " Einträge gelöscht "
Exit Function
End If
End If
Exit Function
Fehlerbehandlung:
MsgBox "In der Funktion EmpfaengerLoeschen ist der Fehler " & Err.Description & " aufgetreten! ", vbCritical, "Debugging "
End Function