我的一个数据库存在问题,我有一段时间有点烦恼。
我在连续视图中有一个表单,用户必须为每个记录填写一些信息,然后单击“提交”按钮(对于每个记录)。
根据为该记录输入的值,“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。
我主要担心的是此运行时错误。我可以抓住它并让它处理不当,但我更喜欢实际修复它并整理出这种有缺陷的形式。有什么想法吗?
答案 0 :(得分:4)
答案 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