【问题标题】:Excel: Use a cell value as a parameter for a SQL queryExcel:使用单元格值作为 SQL 查询的参数
【发布时间】:2009-08-16 23:58:34
【问题描述】:

我正在使用 MS Excel 通过 ODBC 从 MySQL 数据库中获取数据。
我使用 SQL 查询成功获取数据。但现在我希望将该查询参数化。
所以我想知道是否可以使用单元格值(电子表格单元格)作为此类查询的参数。
例如,对于这个查询:

select name from user where id=1

我想从电子表格中的单元格 D4 中获取 id 值。

这是参数化查询的正确方法吗?我该怎么做?

谢谢。

【问题讨论】:

    标签: excel odbc


    【解决方案1】:

    我和你有同样的问题,没人能理解我,但我是这样解决的。

    SELECT NAME, TELEFONE, DATA
    FROM   [sheet1$a1:q633]
    WHERE  NAME IN (SELECT * FROM  [sheet2$a1:a2])
    

    您需要在其他工作表中插入一个参数,SQL 会将该信息视为 数据库,然后您可以选择信息并将它们与您喜欢的参数进行比较。

    【讨论】:

    • 谢谢,我不知道。我试试看。
    • 您好,很抱歉迟到的问题,我想知道我们还可以使用命名函数/命名范围/命名单元作为参数吗?
    • 这似乎正是我们想要的,但我得到一个错误,说工作表是无效对象。
    • 不起作用,无法连接,“尝试连接时出错”:详细信息:“Microsoft SQL:无效的对象名称'Sheet2$a1:a2'。”
    • 是的,我也是。我收到此“Microsoft SQL:无效的对象名称...”错误。
    【解决方案2】:

    如果您使用的是微软查询,您可以添加“?”到您的查询...

    从 id= 的用户中选择名称?

    当您返回 excel 时,会弹出一个小窗口询问单元格/数据/等。

    在弹出窗口中,您还可以选择“始终使用此单元格作为参数”,从而无需在每次刷新数据时定义该单元格。这是最简单的选择。

    【讨论】:

    • 这只是给我一个错误。 DataSource.Error: Microsoft SQL: Incorrect syntax near '?'. Must declare the scalar variable [...].
    【解决方案3】:
    queryString = "SELECT name FROM user WHERE id=" & Worksheets("Sheet1").Range("D4").Value
    

    【讨论】:

    • 我想我必须在 VBA 脚本中这样做,对吧?我不认为我可以在 SQL 窗口中键入该表达式。
    【解决方案4】:

    SQL 有点像 MS SQL 的语法。

    SELECT * FROM [table$] WHERE *;
    

    重要的是表名以 $ 符号结尾并将整个内容放在括号中。作为条件,您可以使用任何值,但到目前为止 Excel 不允许我使用我所谓的“SQL 撇号”(´),因此建议使用一个单词的列标题。

    如果您在名为“Users”的表中列出了用户,并且 ID 在标题为“id”的列中,而名称在标题为“Name”的列中,您的查询将如下所示:

    SELECT Name FROM [Users$] WHERE id = 1;
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2015-11-20
      • 2018-08-01
      • 2018-04-08
      相关资源
      最近更新 更多