3

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

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

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

它的伪代码在这里:

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

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

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

4

5 回答 5

4

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

于 2012-10-24T18:39:01.953 回答
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
于 2014-07-31T13:10:16.653 回答
1

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

form.RecordSouce = ""
db.execute "delete * from tblTemporary WHERE empid = me.empID"
form.RecordSouce = "tblTemporary"
于 2012-10-24T18:50:37.647 回答
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 执行该操作。

于 2012-10-24T22:37:15.720 回答
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
于 2015-10-28T15:17:07.690 回答