执行vb代码后删除记录错误(删除记录)

时间:2012-10-24 16:48:46

标签: vba ms-access

我的一个数据库存在问题,我有一段时间有点烦恼。

我在连续视图中有一个表单,用户必须为每个记录填写一些信息,然后单击“提交”按钮(对于每个记录)。

根据为该记录输入的值,“commit”按钮将首先在两个表中的一个表中插入信息,然后从表单查询的临时表中删除该记录。

psuedocode就在这里:

IF x.checked && y > 70 then
  db.execute "Insert into tblCompleted values (me.empID,'completed',me.y);
else
  db.execute "insert into tblIncompleted values (me.empid, 'incomplete', 'me.y);
end if
db.execute "delete * from tblTemporary WHERE empid = me.empID"
 'form.requery
'form.refresh

我有时会得到'记录被删除'运行时错误,有时两次同一记录。但是,所有操作都有效。但是,完成后,记录显示## DELETED。为了解决这个问题,我在代码的末尾添加了一个Form.refresh和Form.requery语句。这将消除## DELETED记录,但经常会给我一个“记录被删除”的错误。

在你说“你为什么使用两个表之前,不能只用一个表建模”之前,这是我实际做的简化版本,对我来说,使用两个表更有意义设计-wise。

我主要担心的是此运行时错误。我可以抓住它并让它处理不当,但我更喜欢实际修复它并整理出这种有缺陷的形式。有什么想法吗?

5 个答案:

答案 0 :(得分:4)

我认为原因是在删除记录后,您的表单仍然会尝试显示它。相关post中的答案建议将书签移至上一条记录,然后使用this等代码删除当前记录。

答案 1 :(得分:1)

在删除表之前删除RecordSource,然后重新添加它。

form.RecordSouce = ""
db.execute "delete * from tblTemporary WHERE empid = me.empID"
form.RecordSouce = "tblTemporary"

答案 2 :(得分:1)

我知道自发布以来已经过了几年但是我遇到了同样的问题(Access 2010),在阅读了上述评论后,提出了下面的解决方案,转移到下一个记录之前删除。

        delBatchID = [ID]

        Me.Recordset.MoveNext

        'delete the batch headers
        qString = "Delete From T_Imported_Files Where ID = " & delBatchID & ";"
        CurrentDb.Execute qString

        'update the form to show that the batch is gone.
        Form.Requery

答案 3 :(得分:0)

尝试这样的事情:

Dim lEmpID as Long
lEmpID = Me!EmpID
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
db.Execute "DELETE * FROM tblTemporary WHERE empid = " & lEmpID

这里的基本思想是你可以使用普通的Delete命令从一个表中删除一条记录。这可能足以说服你的表格记录不再存在。

根据您如何配置参照完整性(使用Delete Cascade?),您甚至可能不必执行最后一次db.Execute。

答案 4 :(得分:0)

我知道这是一个旧线程,但我只是遇到了这个并通过将焦点移动到子窗体外的控件来解决它。问题似乎是我还在记录中我正在删除。

    Dim response As VbMsgBoxResult 
    Dim strSQL As String

    response = MsgBox("Are you sure you want to delete this record?", vbYesNo + vbQuestion, "Delete Record?")

    Select Case response
        Case vbYes
            strSQL = "DELETE FROM TABLENAME WHERE ID = " & Me.ID
            Forms("ParentForm").Form.Controls("TextBox1").SetFocus
            If ExecuteSQL(strSQL) = False Then MsgBox "There was an error deleting this record." & vbCrLf & vbCrLf & "If the problem persists, please contact your             System Administrator.", vbOKOnly + vbExclamation, "Error"
            Me.Requery
        Case vbNo

    End Select

Public Function ExecuteSQL(sSQL As String) As Boolean
On Error GoTo HandleError

    DoCmd.SetWarnings False
'    Debug.Print sSQL
    DoCmd.RunSQL sSQL

    ExecuteSQL = True

Exit_ExecuteSQL:
'    Debug.Print sSQL
    DoCmd.SetWarnings True
    Exit Function

HandleError:
    GeneralErrorHandler err.Number, err.Description, "modDatabaseCalls", "ExecuteSQL", True
    ExecuteSQL = False
    Resume Exit_ExecuteSQL

End Function