Recordset delete

Hi Leute, ich versuche aus einer Tabelle „FW“ in access via VBA-Schleife die Datensätze herauszulöschen, die im Feld [Anrede]
„Herrn und Frau“ haben.

Das hab ich bisher:

Public Sub Gemeinschaftskunden_löschen()

Dim db As Database, rs As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)

Dim recLesen, recSchreiben, recDepotnummer As Recordset
Dim intPos As Variant
Dim Depotnummer As Double

Set recLesen = db.OpenRecordset(„Select * From [FW] Order By Personennummer“)

Do Until recLesen.EOF
'recLesen.Edit
Debug.Print recLesen![Personennummer]
Debug.Print recLesen![Anrede]
Debug.Print recLesen![Nachname]

If recLesen![Anrede] = „Herrn und Frau“ Then rs.Delete

recLesen.Update
recLesen.MoveNext
Loop
End Sub

aber das klappt nicht so richtig kann jemand helfen ?

Gruß Christian

Hallo,

ich versuche aus einer Tabelle „FW“ in access via
VBA-Schleife die Datensätze herauszulöschen, die im Feld
[Anrede]
„Herrn und Frau“ haben.

Das hab ich bisher:

Public Sub Gemeinschaftskunden_löschen()

Dim db As DAO.Database, rs As DAO.Recordset
Set db = DBEngine.Workspaces(0).Databases(0)

Dim recLesen as DAO.Recordset , recSchreiben as DAO.Recordset , recDepotnummer As DAO.Recordset
Dim intPos As Long
Dim Depotnummer As Double 'Wieso Double??

Set recLesen = db.OpenRecordset(„Select * From [FW] Order By
Personennummer“, dbOpenDynaset )

Do Until recLesen.EOF
'recLesen.Edit
Debug.Print recLesen![Personennummer]
Debug.Print recLesen![Anrede]
Debug.Print recLesen![Nachname]

If recLesen![Anrede] = „Herrn und Frau“ Then recLesen.Delete

'recLesen.Update 'unnötig
recLesen.MoveNext
Loop
End Sub

aber das klappt nicht so richtig kann jemand helfen ?

Warum nicht gleich so:

Public Sub Gemeinschaftskunden_löschen()

Dim db As DAO.Database, rs As DAO.Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set rs = db.OpenRecordset("Select * From [FW] where Anrede=‚Herrn und Frau‘ ", dbOpenDynaset)

Do Until rs.Eof
rs.Delete
rs.MoveNext
Loop

rs.Close
set rs=Nothing
set db=nothing
End Sub

oder so:

Public Sub Gemeinschaftskunden_löschen()
Currentdb.Execute "Delete From [FW] where Anrede=‚Herrn und Frau‘ "
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Danke Franz !

vielleicht hilft das
wenn Tabelle in Lokaler DB oder verknüpft

alle Datensätze löschen
Dim STRSQL As String

STRSQL = „DELETE [FW.* FROM FW;“
DoCmd.RunSQL STRSQL

bestimmte Datensätze löschen
Dim STRSQL As String
STRSQL = „DELETE FW.*,FW.Anrede FROM [FW] WHERE (((FW.“ & _
„[Anrede])=’“ & „Herrn und Frau“ & „’));“
DoCmd.RunSQL STRSQL

Die flexible Lösung

Aufruf bestimmte Datensätze löschen
Call TblDatenlöschen(„FW“, „Anrede“, „[Anrede])=’“ & _
„Herrn und Frau“ & „’“)

Function TblDatenlöschen(strTblName As String, strFeldName As String,
strWHEREFilter As String)
On Error GoTo Fehler_ERR
Dim STRSQL As String

STRSQL = „DELETE " & strTblName & „.*,“ & strTblName & „.“ & _
strFeldName & " FROM " & strTblName & " WHERE (((“ & _
strTblName & „.“ & strWHEREFilter & „));“
DoCmd.RunSQL STRSQL

Exit Function
Fehler_ERR:
Msgbox = „Fehler# " & Str(Err.Number) & " TblDatenlöschen“
Resume Next
End Function

Bei Text in Where auf Semikol ’ vor und hinter Text achten

Hallo,

die Verwendung der Feldliste in der Delete-Anweisung ist überflüssig… Auch wenn kein Fehler von der Jet-Engine produziert wird, wird immer der gesamte Datensatz und damit immer alle Felder darin gelöscht.
Einzig die Where-Condition ist sinnvoll.

Weiterhin sollte auf Docmd.RunSql verzichtet werden (allenfalls ist das zum Testen brauchbar) und das SQL-Statement direkt auf die Jet-Engine losgelassen werden:

Dim DB as Dao.Database, lngID as Long
set Db=currentdb
lngID =1 ' z.B.. 
db.Execute "Delete from tblTabelle1 where Id= " & lngID,dbFailOnError
' oder bezgl. Problem
'db.Execute "Delete from [FW] where Anrede='Herr und Frau'" ,dbFailOnError

Msgbox "Es wurden " & db.Recordsaffected & " gelöscht"
set db=nothing

hallo

darüber liese sich streiten

Hallo

darüber liese sich streiten

na denn, dann mal los! :wink: