2

我在子句中收到运行时错误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
4

3 回答 3

1

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

于 2014-07-22T16:56:28.973 回答
1

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

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

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

Debug.Print strSQL

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

于 2013-05-10T22:33:21.750 回答
1

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

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

DoCmd.RunCommand acCmdDeleteRecord

Edit1: 由于您使用的是数据表视图,因此您基本上有两个选择。

1)数据表视图提供了一个右键菜单来删除记录,如果你去最左边的行。

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

于 2013-05-10T14:06:49.450 回答