【问题标题】:Insert statement in access gives error在访问中插入语句给出错误
【发布时间】:2016-06-17 21:22:06
【问题描述】:

我一直致力于创建一个非常简单的数据库,它只有 4 个表,每列只有几条信息。我的一张桌子叫做“客户”,在这张桌子里面有 4 列信息。

我的“AddCustomerForm”上有一个运行以下命令的按钮

Private Sub cmdadd_Click()
CurrentDb.Execute "INSERT INTO Customer(Customer ID, Email, Identifier) " & _
 = VALUES(Customer ID, Email, Identifier)  
End Sub

我的添加客户表单如下所示:

有人可以指出我在搞砸什么吗?我收到的错误是:

语法错误。

【问题讨论】:

  • 位置字段匹配科罗拉多斯普林斯或丹佛。这些选项可基于为这些位置定义业务 ID 1 或 2 的业务表提供。
  • @miroxlav 我做了一些修改并添加了 VALUES,我只是没能写出来。我已经更新了问题。
  • 我还删除了插入位置的尝试,因为我将该表映射到了代表另一个表中位置的 ID。

标签: ms-access vba sql-insert


【解决方案1】:

我看到了一些问题 - [客户 ID] 是自动编号字段吗?如果是,请不要包含它。

另外 - 如果您正在运行手动插入,我假设您的表单未绑定到您的表格,但我开始想知道为什么客户 ID 在表单上显示为可编辑?

最后,Location 看起来是一个数字 ID,属于填写 Business ID 字段的 Location 下拉列表的 ID 字段

这将帮助您调试 SQL 并向我们展示问题所在

将其添加到您的按钮,并在代码停止时向我们显示立即窗口中显示的值

    Dim strSQL as string
    strSQL = "INSERT INTO Customer ([Customer ID], Email, Identifier) VALUES (" _
    & me.[Customer ID] & ",""" & Me.[Email] & """,""" & Me.[Identifier] & """)"
    Debug.print strSQL

    CurrentDb.Execute strSQL

如果客户 ID 是自动编号,请改用此方法(假设表单为 UNBOUND)并且位置是下拉列表第一列的 ID 值

    Dim strSQL as string
    strSQL = "INSERT INTO Customer (Email, Identifier) VALUES (" _
    & me.[Customer ID] & ",""" & Me.[Email] & """, & Me.[Identifier] & ")"
    Debug.print strSQL

    CurrentDb.Execute strSQL

【讨论】:

  • 感谢您的帮助。无法使其正常工作,因此我将其归结为我缺乏知识和理解。一旦我浏览了我的数据库并重新处理表/行并重新学习单独的部分,我会很乐意回来接受答案。在那之前+1 :)。非常感谢您的帮助!
  • 我添加了一对双引号来包裹电子邮件值 - 也许这就是问题所在?
【解决方案2】:
Private Sub cmdadd_Click()
CurrentDb.Execute "INSERT INTO Customer ([Customer ID], Email, Identifier) VALUES([Forms]![MyFormName]![CustomerIDTextboxName], [Forms]![MyFormName]![EmailtextboxName], [Forms]![MyFormName]![IdentifierTextboxName]);"  
End Sub

Access 需要在任何字段名称两边加上空格并用括号括起来。我还删除了 VALUES 之前的 = 并更改了值以引用您的表单控件,您必须正确命名。您还需要一个分号来完成该语句并需要关闭您的双引号。

This 页面可能有助于语法。

【讨论】:

  • 我按照你的建议做了,这就是我想出的。 CurrentDb.Execute "INSERT INTO Customer ([Customer ID], Email, Identifier) VALUES([Forms]![AddCustomerForm]![Customer ID], [Forms]![AddCustomerForm]![Email], [Forms]![AddCustomerForm]![Identifier]);"
  • 我收到“预期参数太少 3”的错误。这让我很困惑,因为我明确指出了 3(客户 ID、电子邮件和标识符)
  • @bluerojo 确保您的表单在表单视图中并且所有引用的控件都不为空。
  • me 的使用可能更容易,分号是可选的
  • @LiamH +1 for Me 但我认为我们不应该考虑分号可选。从技术上讲,您是正确的。但忽略它是不好的做法,尤其是在处理任何语法错误时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多