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