【问题标题】:Update Excel Sheet Using SQL使用 SQL 更新 Excel 工作表
【发布时间】:2014-08-04 18:24:16
【问题描述】:

我正在尝试编写一个过程,该过程将使用 ADODB 连接来更新已关闭工作簿中的记录(行)。

我似乎想不通的是如何在 Excel 中引用多个表(工作表)和多个字段(列)...

我的 SQL 语句如下所示:

SQLstr = "UPDATE [Location$] " & vbNewLine & _
        "SET [Location$].[City]=[Current Location$].[City] " & vbNewLine & _
        "WHERE [Location$].[Name]=[Current Location$].[Name]"

cn.Execute SQLstr

此语句的目标是使用当前位置表上的城市字段(在同一工作簿中)更新位置表上的城市字段。

问题是当我尝试执行上述语句时,我得到一个运行时错误:

-2147217904:没有为一个或多个必需参数指定值。

看起来这应该很简单,但我遗漏了一些东西,而且我找不到任何关于如何在 SQL 中处理多个工作表/字段/工作簿的好的文档。

另外,我对 SQL 还不是很熟练,所以我的 SQL 语法也可能是错误的……但我不确定。

欢迎任何帮助。

【问题讨论】:

    标签: sql vba excel excel-2010


    【解决方案1】:

    以防万一我们遗漏了连接字符串或其他外围问题,以下是您希望找到的关于该主题大部分方面的信息来源: http://www.xtremevbtalk.com/showthread.php?t=217783

    但我认为您需要 JOIN 来完成这项工作 - 我使用 EXCEL/ADODB 已经有一段时间了,但您可以尝试一下:

    SQLstr = "UPDATE [Location$] tLoc " & _
             "INNER JOIN [Current Location$] tCur ON tCur.Name = tLoc.Name " & _
             "SET tLoc.City = tCur.City"
    

    编辑:跨 2 个文件的连接

    SQLstr = "UPDATE [Location$] IN 'D\Data\target.xls' tLoc " & _
             "INNER JOIN [Current Location$] tCur ON tCur.Name = tLoc.Name " & _
             "SET tLoc.City = tCur.City"
    

    未经测试 - 可能需要交换表别名

    【讨论】:

    • +1 那个 SQL 字符串工作得很好!谢谢!我也非常感谢这个链接!
    • 这可能是不适合评论的内容,我可能需要提出一个新问题...但是如果“当前位置”表不在同一个工作簿中怎么办?有没有办法在SQLstr 中引用另一个连接,或者是在 ADO 领域之外?
    • 谢谢你,蒂姆!我会玩弄那个。
    • 所以我花了几个小时尝试您提供的示例(以及示例的多种变体),但没有成功。而且我在网上找不到任何例子。有没有机会看看有什么问题?我得到的错误是Syntax error in UPDATE statement.
    【解决方案2】:

    我认为您的问题是您缺少一些 sql 语句中需要的引号 ''。例如

       "WHERE [Location$].[Name]=[Current Location$].[Name]" should be something like "WHERE    
        [Location$].[Name]= '" & [Current Location$].[Name] & "'". 
    

    【讨论】:

    • 感谢您的回复。该语法不适用于 VBA。它假定[Current Location$].[Name] 是一个对象或变量,但它不是。此外,在 [Current Location$].[Name] 周围添加刻度线也会出现相同的错误。
    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多