MS Access:SQL语句“UPDATE”给出模糊错误3144“UPDATE语句中的语法错误”

时间:2017-06-12 22:04:30

标签: sql database vba ms-access

我目前正在运行一个链接到表格的表单,其中表单中显示的其中一个控件依赖于另一个控件。具体来说,它是一个名为机器挖掘的字段,需要是手工挖掘字段中用户输入百分比的剩余百分比。这些字段属于从另一个控件中选择的特定记录,其名称为挖掘类型。例如,如果我输入30%进入手工挖掘,则机器挖掘需要为70%。我已经创建了一个代码,它将在VBA中使用RunSQL方法在手工挖掘控件中执行AfterUpdate事件时将其存储在基础表中:

Private Sub Text_HandExcvPerc_AfterUpdate()

DoCmd.RunSQL ("UPDATE tbl-ExcavationType SET [Machine Excavation] = 1 - [Hand Excavation] WHERE [Excavation Type] = Text_ExcvType.Value;") End Sub

tbl-ExcavationType 是链接到表单的表, Text_ExcvType.Value 是包含当前记录标识符的文本框控件。有人可以评论我的DoCmd.RunSQL的语法吗?我一直收到错误。

3 个答案:

答案 0 :(得分:2)

您有几个问题:

  1. 您需要将表名包装在括号中,因为它包含-
  2. 您需要将文字值用单引号(')或双引号(")括起来。
  3. 您需要将Text_ExcvType.Value的值而不是字符串"Text_ExcvType.Value"添加到查询中。
  4. 我测试过以下工作:

    Private Sub Text_HandExcvPerc_AfterUpdate()
        DoCmd.RunSQL "UPDATE [tbl-ExcavationType] SET [Machine Excavation] = 1 - [Hand Excavation] WHERE [Excavation Type] = '" & Text_ExcvType.Value "';"
    End Sub
    

答案 1 :(得分:1)

DoCmd.RunSQL ("UPDATE [tbl-ExcavationType] SET [Machine Excavation] = " & _
    "1 - [Hand Excavation] WHERE [Excavation Type] = """ & Text_ExcvType.Value & """;")

请注意,文本框值周围有三个引号。 Access使用双引号而不是单引号作为字符串。因为您在字符串中输入它,所以必须使用两个双引号来表示字符串的单引号,然后使用另一个双引号来断开字符串以连接您的值。系统看到的将是有效的:

UPDATE [tbl-ExcavationType] SET [Machine Excavation] = 1 - [Hand Excavation] WHERE [Excavation Type] = "My Data Value";

答案 2 :(得分:0)

你在这里看到的是一个计算字段:即[机器挖掘]总是1 - [手工挖掘]所以我不明白为什么你需要存储它。这就是说你需要用名为Text_ExcvType的控件中的实际值替换单词“Text_ExcvType.Value”,并且当它在语音标记内时它不能这样做。试试

dim strsql as string

strsql = "UPDATE tbl-ExcavationType SET [Machine Excavation] = "

strsql = strsql & "1 - [Hand Excavation] WHERE [Excavation Type] = '"

strsql = strsql & Text_ExcvType.Value & "';" 

DoCmd.RunSQL strsql

这允许访问首先评估Text_ExcvType.Value,将结果放入字符串然后执行sql 这样做也允许你在调试中观察字符串构建以找出出错的地方