2016-07-30 5 views
0

Ich habe den folgenden Code für eine Schaltfläche zum Löschen in Visual Basic in Microsoft Access geschrieben.Laufzeitfehler 3021 - kein aktueller Datensatz zum Löschen der Schaltfläche

Private Sub Delete_Click() 
If Not (Me.ComputerSubform.Form.Recordset.EOF And Me.ComputerSubform.Form.Recordset.BOF) Then 
    If MsgBox("Are you sure to delete?", vbYesNo) = vbYes Then 
     CurrentDb.Execute "DELETE FROM Computer " & _ 
       " WHERE PCSN=" & Me.ComputerSubform.Form.Recordset.Fields("PCSN") 
     Me.ComputerSubform.Form.Requery  
    End If 
    End If 
End Sub 

Das erste Mal, es Worte gut. Aber wenn ich versuche, einen anderen Datensatz zu löschen, werde ich auf "Laufzeitfehler 3021 - kein aktueller Datensatz" stoßen. Ich konnte es nicht verstehen, da der Code für mich eine Strafe ist und Daten verfügbar sind. Ich würde jede Hilfe schätzen. Vielen Dank!

P.S. Es tut mir leid, dass ich meine Tabelle nicht veröffentlichen kann, da sie viele vertrauliche Daten enthält.

+0

Nach Löschen eines Datensatzes in einem MS-Access-Verzeichnis dset, ich glaube, du musst in die nächste Zeile gehen, um erfolgreich darauf zugreifen zu können. Es ist eine Weile her, seit ich dieses Problem gelöst habe, so dass einige Versuche und Fehler erforderlich sein könnten. –

+0

@ron tornambe Danke! Sie haben recht, wenn Sie in die nächste Zeile wechseln, wird dieses Problem nicht auftreten. Gibt es eine Codierungsmethode, um es zu lösen? – user292965

+0

Versuchen Sie @dbmitch Antwort, aber ich denke, dass Sie an die Spitze der RS ​​bringen können. Sie können auch versuchen, mich.ComputerSubform.Form.MoveNext –

Antwort

1

Statt

Me.ComputerSubform.Form.Requery 

sollten Sie verwenden
Me.ComputerSubform.Form.Recordset.Requery

Dies wird das zugrunde liegende Recordset mit dem neuesten Update löschen

0

Try this:

dim rs as dao.recordset 
set rs = currentdb.openrecordset("computers", _ 
dbopendynaset) 
rs.findfirst "[pcsn] = " & _ 
me.computersubform.form!pcsn 
'If pcsn is text instead of a number you need chr(34) 
' on either side 
if rs.nomatch = false then 
    rs.edit 
    rs.delete 
    rs.update 
    rs.close 
me.refresh 
end if 
+0

Sorry ersten Beitrag .... Von meinem Handy. Muss die Formatierung herausfinden. –

Verwandte Themen