单击按钮时如何删除子窗体中的记录

时间:2013-05-10 11:30:09

标签: ms-access ms-access-2007 access-vba

我在3131子句中遇到运行时错误FROM语法错误。谁能告诉我我做错了什么?

Dim strSQL
If Not (Me.PlantTransactionQuery.Form.Recordset.EOF And Me.PlantTransactionQuery.Form.Recordset.BOF) Then
If MsgBox("Are you sure you want to delete", vbYesNo) = vbYes Then
strSQL = "Delete * FROM PlantTransactionQuery" & _
"WHERE TransactionID=" & Me![TransactionID] & Me.PlantTransactionQuery.Form.Recordset.Fields("TransactionID")
CurrentDb.Execute strSQL
Me.PlantTransactionQuery.Form.Requery
End If
End If
End Sub

3 个答案:

答案 0 :(得分:1)

除非确实没有其他选项,否则我不建议使用SQL语句来删除记录。

您可以将按钮放在子窗体上吗?我认为除数据表视图外,所有子表单都允许您在其上设置按钮。然后只需运行正常代码即可删除记录。

DoCmd.RunCommand acCmdDeleteRecord

<强> EDIT1: 由于您使用的是数据表视图,因此基本上有两个选项。

1)数据表视图提供了一个右键单击菜单,用于删除记录,如果你走到该行的最左侧。

2)您的另一个选择是在运行上面列出的代码的子窗体上创建一个公共函数,然后在用户单击主窗体上的按钮时从主窗体中调用它。

答案 1 :(得分:1)

SQL语句的一个问题是PlantTransactionQueryWHERE之间没有分隔符(空格或换行符)。我缩短了字符串,使其更加明显。

strSQL = "Delete * FROM PlantTransactionQuery" & _
"WHERE TransactionID="

在构建字符串后立即将此行添加到代码中。

Debug.Print strSQL

然后您可以转到立即窗口( Ctrl + g )来检查您要求数据库引擎执行的语句。如果问题不明显,请复制语句文本并将其粘贴到新的Access查询的SQL视图中以进行测试。

答案 2 :(得分:1)

错误是因为SQL字符串缺少表名和WHERE子句之间的空格。当前语句(... PlantTransactionQuery“&amp; _”WHERE TransactionID =“...”)将生成一个如下所示的SQL字符串:“Delete * FROM PlantTransactionQueryWHERE TransactionID =“&amp; [parameters]。访问将无法找到名为 PlantTransactionQueryWHERE 的表格。 要解决此问题,只需在表名和引号(... PlantTransactionQueryWHERE“&amp; _)之间或WHERE子句(”WHERE ...“)之间添加一个空格。