【问题标题】:MS ACCESS 2007 - Deleting a specific record using an unbound valueMS ACCESS 2007 - 使用未绑定值删除特定记录
【发布时间】:2013-07-08 18:44:14
【问题描述】:

我有一个来自“Crew”的子组件,其中包含名为 CrewName、KitNumber 和 ActionDate 的 3 个字段文本框。此表单使用来自按钮的数据填充。我想要做的是让用户输入一个数字,在 Crew 子表单之外的这个名为“ClearEntry”的未绑定文本字段中输入“111111”。然后,我在名为“ClearSelected”的下方有一个命令按钮,单击该按钮时,将清除 Crew 子表单中的相应记录。所以基本上我想在这个未绑定的文本中输入文本,点击按钮,让那个数字与 Crew Subform 中的相同数字对应,然后删除该表单中的记录。我现在拥有的命令按钮代码如下。

Private Sub ClearSelected_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL = "DELETE FROM Crew WHERE KitNumber = '" & Me.ClearEntry & "'"
Crew.Form.Requery
End Sub

这个可以吗?

【问题讨论】:

  • 你的代码在做你想做的事吗?如果不是,当您将SetWarnings 从关闭更改为打开时会发生什么? (DoCmd.SetWarnings True)
  • @HansUp,我的代码没有做我想做的事。更改 SetWarnings 只会让我知道我何时选择删除记录。点击命令按钮时遇到的问题是我有一个“参数不是可选的”,它在调试器中突出显示 .ClearEntry
  • 这是很好的信息,谢谢。如果表单模块包含一个也称为ClearEntry 的过程(子例程或函数),则可能会发生这种情况。将文本框的名称更改为 txtClearEntry 并修改 RunSQL 以匹配 --- Me.txtClearEntry。现在会发生什么(SetWarnings 仍然是 True)?
  • 如果您有两个名为Crew 的表单对象,您可能会遇到问题。您的查询指示具有该名称的表,并且您说存在具有该名称的表单。
  • 我很欣赏 HansUp 的建议,但仍然想提出一些通用的解决问题的建议:让这个查询作为一个简单的查询运行,而不是 VBA。一旦你确信你可以做到这一点,就升级到 VBA 实现并在该级别进行故障排除。

标签: sql ms-access vba


【解决方案1】:

“argument not optional” 编译错误是由DoCmd.RunSQL 后面的= 符号引起的。摆脱它:

DoCmd.RunSQL "DELETE * FROM Crew WHERE KitNumber = '" & Me.txtClearKitEntry& "'"

然后你会得到一个错误,抱怨“标准类型不匹配”,因为Crew.KitNumber 是数字而不是文本。所以不要在Me.txtClearKitEntry周围加上单引号。

DoCmd.RunSQL "DELETE * FROM Crew WHERE KitNumber = " & Me.txtClearKitEntry

但是,我建议使用这种方法而不是 DoCmd.RunSQL。当您不使用RunSQL 时,您不会有动力关闭SetWarnings (False)。

Private Sub ClearKitSelected_Click()
    Dim strMsg As String
    Dim strSql As String

On Error GoTo ErrorHandler

    strSql = "DELETE FROM Crew WHERE KitNumber = " & Me.txtClearKitEntry
    CurrentDb.Execute strSql, dbFailOnError
    Me.Crew.Requery

ExitHere:
    On Error GoTo 0
    Exit Sub

ErrorHandler:
    strMsg = "Error " & Err.Number & " (" & Err.Description _
        & ") in procedure ClearKitSelected_Click of Form_Search"
    MsgBox strMsg
    GoTo ExitHere
End Sub

【讨论】:

  • 非常感谢!我对此很陌生,因此非常感谢您的帮助。
  • 不客气,帕特里克。抱歉,我花了这么长时间才注意到RunSQL 之后的=;我不使用RunSQL。我决定给你一个更好的ClearKitSelected_Click 版本。问候,H.
【解决方案2】:

这就是我最终能够让它正常工作的方式:

Private Sub cmdDelete_Click()
Dim strMsg As String
Dim strSql As String

If Me.Dirty Then
Me.Dirty = False
End If
On Error GoTo ErrorHandler
Const MESSAGETEXT = "Are you sure you wish to delete the current record?"
 If MsgBox(MESSAGETEXT, vbYesNo + vbQuestion, "Confirm") = vbNo Then
     Cancel = True
 End If
 strSql = "DELETE FROM Item WHERE ID = " & Me.txtID2
 CurrentDb.Execute strSql, dbFailOnError

 MsgBox "The Item list has been updated"
 Clear
 List40.Requery

 ExitHere:
 On Error GoTo 0
 Exit Sub

 ErrorHandler:
 strMsg = "Error " & Err.Number & " (" & Err.Description _
     & ") in procedure Delete of Items"
 MsgBox strMsg
 GoTo ExitHere

 End Sub

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2018-04-12
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多