Sql MS ACCESS 2007-使用未绑定值删除特定记录

Sql MS ACCESS 2007-使用未绑定值删除特定记录,sql,ms-access,vba,Sql,Ms Access,Vba,我有一个名为CrewName、KitNumber和ActionDate的子ROM“Crew”,里面有3个字段文本框。此表单由按钮中的数据填充。我想做的是让用户在Crew子表单之外的名为“ClearEntry”的未绑定文本字段中输入一个数字,比如“111111”。然后,在名为“ClearSelected”的下方有一个命令按钮,单击该按钮将清除我的工作组子窗体中的相应记录。所以基本上我想在这个未绑定的表单中输入文本,点击按钮,让这个数字与Crew子表单中的相同数字对应,然后删除该表单中的记录。我现在

我有一个名为CrewName、KitNumber和ActionDate的子ROM“Crew”,里面有3个字段文本框。此表单由按钮中的数据填充。我想做的是让用户在Crew子表单之外的名为“ClearEntry”的未绑定文本字段中输入一个数字,比如“111111”。然后,在名为“ClearSelected”的下方有一个命令按钮,单击该按钮将清除我的工作组子窗体中的相应记录。所以基本上我想在这个未绑定的表单中输入文本,点击按钮,让这个数字与Crew子表单中的相同数字对应,然后删除该表单中的记录。我现在的命令按钮代码如下

Private Sub ClearSelected_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL = "DELETE FROM Crew WHERE KitNumber = '" & Me.ClearEntry & "'"
Crew.Form.Requery
End Sub
可以这样做吗?

编译错误“参数非可选”是由
=
符号在
DoCmd.RunSQL
之后引起的。摆脱它:

DoCmd.RunSQL“从机组中删除*,其中KitNumber=”&Me.txtClearKitEntry&“
然后您将收到一个错误,抱怨“条件中的类型不匹配”,因为
Crew.KitNumber
是数字而不是文本。因此,不要在
Me.txtClearKitEntry
周围添加单引号

DoCmd.RunSQL“从机组中删除*,其中KitNumber=“&Me.txtClearKitEntry
但是,我建议使用这种方法,而不是
DoCmd.RunSQL
。当您不使用
RunSQL
时,您不会主动关闭
SetWarnings
False

Private Sub clearkit选中\u Click()
作为字符串的Dim strMsg
作为字符串的Dim strSql
关于错误转到错误处理程序
strSql=“从机组中删除,其中KitNumber=“&Me.txtClearKitEntry
CurrentDb.执行strSql,dbFailOnError
Me.Crew.Requery
出口:
错误转到0
出口接头
错误处理程序:
strMsg=“Error”&Err.Number&(“&Err.Description_
&)在程序中,单击“表格搜索”
MsgBox strMsg
去那里
端接头
编译错误“参数非可选”是由
DoCmd.RunSQL
之后的
=
符号引起的。摆脱它:

DoCmd.RunSQL“从机组中删除*,其中KitNumber=”&Me.txtClearKitEntry&“
然后您将收到一个错误,抱怨“条件中的类型不匹配”,因为
Crew.KitNumber
是数字而不是文本。因此,不要在
Me.txtClearKitEntry
周围添加单引号

DoCmd.RunSQL“从机组中删除*,其中KitNumber=“&Me.txtClearKitEntry
但是,我建议使用这种方法,而不是
DoCmd.RunSQL
。当您不使用
RunSQL
时,您不会主动关闭
SetWarnings
False

Private Sub clearkit选中\u Click()
作为字符串的Dim strMsg
作为字符串的Dim strSql
关于错误转到错误处理程序
strSql=“从机组中删除,其中KitNumber=“&Me.txtClearKitEntry
CurrentDb.执行strSql,dbFailOnError
Me.Crew.Requery
出口:
错误转到0
出口接头
错误处理程序:
strMsg=“Error”&Err.Number&(“&Err.Description_
&)在程序中,单击“表格搜索”
MsgBox strMsg
去那里
端接头

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

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

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

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

你的代码做你想要的吗?如果不是,将
SetWarnings
从关闭更改为打开时会发生什么情况?(
DoCmd.SetWarnings-True
)@HansUp,我的代码不是我想要的。更改SetWarnings只会让我知道何时选择删除记录。当我点击命令按钮时遇到的问题是,我有一个“参数不是可选的”,它会突出显示。调试程序中的ClearEntry这是很好的信息,谢谢。如果表单模块包含一个过程(子例程或函数),也被命名为
ClearEntry
,则可能发生这种情况。将文本框的名称更改为
txtClearEntry
,并修改
RunSQL
以匹配--
Me.txtClearEntry
。现在发生了什么(使用
SetWarnings
仍然
True
)?如果您有两个名为
Crew
的表单对象,您可能会遇到问题。您的查询指示一个具有该名称的表,您说有一个具有该名称的表单。我很欣赏HansUp的建议,但仍然想提出一些解决问题的一般建议:让此查询作为简单查询运行,而不是VBA。一旦你确信你能做到这一点,就开始VBA实现,并在这个级别上进行故障排除。你的代码做了你想要的吗?如果不是,将
SetWarnings
从关闭更改为打开时会发生什么情况?(
DoCmd.SetWarnings-True
)@HansUp,我的代码不是我想要的。更改SetWarnings只会让我知道何时选择删除记录。当我点击命令按钮时遇到的问题是,我有一个“参数不是可选的”,它会突出显示。调试程序中的ClearEntry这是很好的信息,谢谢。如果表单模块包含一个过程(子例程或函数),也被命名为
ClearEntry
,则可能发生这种情况。将文本框的名称更改为
txtClearEntry
,并修改
RunSQL
以匹配--
Me.txtClearEntry
。现在发生了什么(使用
SetWarnings
仍然
True
)?如果您有两个名为
Crew
的表单对象,您可能会遇到问题。您的查询指示一个具有该名称的表,您说有一个具有该名称的表单。我很欣赏HansUp的建议,但仍然想提出一些解决问题的一般建议:让此查询作为简单查询运行,而不是VBA。一旦你确信你能做到这一点,就开始VBA的实现,并在这一级别进行故障排除。非常感谢!我真的是新手,所以我非常感谢你的帮助。不客气,帕特里克。很抱歉,我花了这么长时间才注意到
=
之后的
RunSQL