【问题标题】:Record is deleted error after executing vb code (that deletes the record)执行vb代码后记录被删除错误(删除记录)
【发布时间】:2015-10-28 23:17:07
【问题描述】:

我的一个数据库有问题,我已经有一段时间了,这有点令人烦恼。

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

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

它的伪代码在这里:

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 记录,但经常会抛出“记录已删除”错误。

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

我主要关心的是这个运行时错误。我可以抓住它而不处理它,但我更愿意实际修复它并整理出这个错误的表格。有什么想法吗?

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

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

    【讨论】:

    • 我喜欢这个。这也解决了我的一些用户在完成记录后抱怨的“跳到屏幕顶部”的问题。我需要将此代码 sn-p 保存到我的武器库中
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我知道这已经发布了几年,但我遇到了同样的问题(Access 2010),在阅读了上面的 cmets 之后,想出了下面的解决方案,即在删除之前移动到下一条记录。

              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
      

      【讨论】:

        【解决方案4】:

        试试这样的:

        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 执行该操作。

        【讨论】:

          【解决方案5】:

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

              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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-22
            • 1970-01-01
            • 1970-01-01
            • 2013-08-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多