Jen*_*off 5 sql delphi excel odbc
我正在尝试使用ODBC使用SQL查询工作表范围中的已定义名称.
我已经知道这有效:
SELECT * FROM [worksheet1$] -- Query a whole worksheet
SELECT * FROM [worksheet1$A1:C10] -- Query A1:C10 of a worksheet
SELECT * FROM myname -- Query a workbook scoped defined name
Run Code Online (Sandbox Code Playgroud)
请注意,这myname是工作簿范围,而不是工作表作用域.
我原以为像Excel公式中的东西也适用于ODBC表名:
SELECT * FROM worksheet1!myname -- Query a worksheet scoped defined name
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,我尝试了一些语法变体.
这是可能的,如果是,那么使用什么语法?
注意Delphi开发者:该A1:C10语法会导致麻烦TADOQuery,你必须设置ParamCheck到False为了这个工作.
更新:
我正在使用随附的Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)版本.12.00.6606.1000Microsoft Office 2007
我已经检查过我正在使用的Delphi数据库组件的行为方式与Microsoft Query和Microsoft Access 2007相同.
假设您有一个 Excel 文件(在我的例子中为 xlsx),其名称如下(Excel 公式表示法):
mynameworksheet1!mynameworksheet2!myname不同版本的 Excel ODBC 驱动程序具有不同的行为:
附带的版本的行为Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)如下:12Microsoft Office 2007
命名空间被扁平化。
您可以查询的只有SELECT * FROM myname. 显然,这会返回定义的名字的数据。
附带的版本(可以从 Microsoft 单独下载Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb))的行为如下:14Microsoft Office 2010
您确实可以查询所有三个:
SELECT * FROM myname
SELECT * FROM [worksheet1$myname]
SELECT * FROM [worksheet2$myname]
Run Code Online (Sandbox Code Playgroud)
所以这显然是固定在Microsoft Office 2010.
该修复不向后兼容。当您在 2007 年定义了工作表范围名称时,您可以使用myname仅适用于 2010 年工作簿范围名称的语法来查询它。因此,在不同版本的 Office 中处理这种情况时需要小心。
注意:如果下载链接失效,请搜索Microsoft Access Database Engine 2010 Redistributable.
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |