工作表范围内已定义名称的表名是啥?
Posted
技术标签:
【中文标题】工作表范围内已定义名称的表名是啥?【英文标题】:What's the table name for a defined name in the scope of a worksheet?工作表范围内已定义名称的表名是什么? 【发布时间】:2013-07-18 16:07:18 【问题描述】:我正在尝试使用 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
请注意,myname
是工作簿范围的,而不是工作表范围的。
我原以为 Excel 公式中的内容也适用于 ODBC 表名:
SELECT * FROM worksheet1!myname -- Query a worksheet scoped defined name
但是这不起作用,我尝试了一些语法变化。
这可能吗?如果可以,使用什么语法?
Delphi 开发人员注意事项:A1:C10
语法会导致 TADOQuery
出现问题,您必须将 ParamCheck
设置为 False
才能使其正常工作。
更新:
我正在使用Microsoft Office 2007
附带的Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
版本12.00.6606.1000
。
我检查了我使用的 Delphi 数据库组件的行为方式与 Microsoft Query 和 Microsoft Access 2007 相同。
【问题讨论】:
有人认为[worksheet1$myname]
不起作用?
您是仅从 Delphi 中尝试过,还是从其他 MS Office 产品中尝试过?例如 MS Access?
另见:***.com/questions/18798522/…
【参考方案1】:
尝试以下方法来帮助您找出 Delphi 正在寻找的名称。
-
在表单上放置一个组合框。
运行以下代码以使用 Delphi 将接受的名称填充组合框:
AdoConnection1.GetTableNames(ComboBox1.Items,True);
运行应用程序。组合框应为您提供可查询名称的列表。
使用 Delphi XE2 和 Office 2010(保存为 office 97 xls 格式的 Excel 文件)我创建了一个工作表范围命名为 range (sheet1!numberlist) 并在 Delphi 中运行了一个 ADO 查询。查询是SELECT * FROM [sheet1$numberlist]
。也许是你的 ODBC 驱动程序?
【讨论】:
确实有不同的ODBC驱动,我去看看。 GetTableNames 调用是个好主意。 我使用的驱动是Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
版本12.00.6606.1000
【参考方案2】:
假设您有一个具有以下名称(Excel 公式表示法)的 Excel 文件(在我的例子中为 xlsx):
myname
worksheet1!myname
worksheet2!myname
不同版本的 Excel ODBC 驱动程序有不同的行为:
Microsoft Office 2007
附带的Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
版本12
的行为如下:
命名空间是扁平的。
您可以查询的只有SELECT * FROM myname
。显然,这会从定义的名字返回数据。
14
附带的Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
版本Microsoft Office 2010
(and can be downloaded separatly from Microsoft) 的行为如下:
您确实可以查询所有三个:
SELECT * FROM myname
SELECT * FROM [worksheet1$myname]
SELECT * FROM [worksheet2$myname]
所以这显然已在 Microsoft Office 2010
中修复。
该修复不向后兼容。如果您在 2007 年定义了工作表范围名称,则可以使用 myname
语法对其进行查询,该语法仅适用于 2010 年的工作簿范围名称。因此,在跨不同版本的 Office 处理这种情况时需要小心。
注意:如果下载链接失效,请搜索Microsoft Access Database Engine 2010 Redistributable
。
【讨论】:
以上是关于工作表范围内已定义名称的表名是啥?的主要内容,如果未能解决你的问题,请参考以下文章
请问下在sql server中,我创建约束的时候没有定义约束名,它默认的约束名是啥呀?
Windows 中的 MySQL 小写表名 Unix 上的大写名称