标准表达式中的数据类型不匹配

时间:2015-06-06 20:16:40

标签: sql access-vba

在VBA中的这个SQL语句中是否有任何错误:

myConnection.Execute "update item_gallery set quantity = 'qtToTotal' where item =  'Desc' and gallery ='Gallery_Name'"
where 
qtToTotal = qtTo + qtFrom

 While Not myRecordSetItem.EOF

        If !item_ID = myRecordSetItem.Fields("item_ID").Value Then
            Desc = myRecordSetItem.Fields("Desc").Value
        End If

        myRecordSetItem.MoveNext

    Wend

    While Not myRecordSetGallery.EOF

        If !To = myRecordSetGallery.Fields("Gallery_ID").Value Then
            Gallery_Name = myRecordSetGallery.Fields("Gallery_Name").Value
        End If

        myRecordSetGallery.MoveNext

    Wend

它总是给我留言:

  

“条件表达式中的数据类型不匹配”

1 个答案:

答案 0 :(得分:0)

此:

myConnection.Execute "update item_gallery set quantity = 'qtToTotal' where item =  'Desc' and gallery ='Gallery_Name'"
where 
qtToTotal = qtTo + qtFrom

看起来它应该更像这样(但我不是100%,因为我有一些问题要问):

myConnection.Execute "UPDATE item_gallery" _
                   & " SET quantity = qtToTotal" _
                   & " WHERE item = Desc" _
                   & " AND gallery = Gallery_Name" _
                   & " AND qtToTotal = (qtTo + qtFrom)"

我猜你是因为你用单引号(')包围了字段名称而得到这个错误,这就是你在告诉SQL时所做的事情您需要一段文本而不是数据库中的某个字段。

何时使用单引号的示例:

  

...如果您只想在格式为文本的字段中引用一段文字:

     

"SELECT * FROM tblNames WHERE FirstName = 'John'"

     

...当您想要引用当前位于格式为文本的打开表单上的字段中的文字时:

     

"SELECT * FROM tblNames WHERE FirstName = '" & Me.txtFirstName & "'"

但在您的情况下,您似乎想要从基础表中获取字段,因此您不需要在字段名称周围添加任何单引号。

您的quantity字段听起来很可能是一个数字字段,您基本上要求它尝试放置一段文字" qtToTotal"在quantity字段中,如果该字段仅设置为接受数字,则无法执行此操作。

虽然有几个问题,但我怀疑这里可能会有更多问题(我会根据您的回答更新此问题):

  1. 所有这些领域都是......

    • 数量
    • qtToTotal
    • 项目
    • 说明
    • qtToTotal
    • qtTo
    • qtFrom
  2. ...位于表格 item_gallery

    如果他们不是那么你需要在 item_gallery 表和其他字段来自的任何表中使用SQL语句创建JOIN(s)匹配/关联两个表中记录的字段。

    1. 每个字段的数据类型是什么?
    2. 如果您在2个字段之间使用了=,那么这两个字段的数据类型是否相同?否则会导致不匹配。

      :我建议不要使用" Desc"作为字段名称DESC是为"降序"保留的字。在SQL中的ORDER BY子句中。