与Jet的Microsoft OLE DB提供程序连接的 EXCEL中 是否有关于SQL语法的参考/手册?
例如,如何编写日期类型的常量?
有哪些关键字/功能/条款?
当使用Excel作为Jet 4.0数据源时,我所知道的最佳参考是:
如何将ADO与VisualBasic或VBA中的Excel数据一起使用。
特别重要的是,当现有列包含混合数据类型时,如何确定其总体数据类型。
关于用于Jet 4.0的Microsoft OLE DB提供程序,最相关的文章是这样的:
ADO提供程序属性和设置:Microsoft Jet 4.0提供程序属性
就是说,在早期的文章中可以更好地介绍Excel特定的细节。
使用Excel和SQL时应注意的一个重要陷阱:
BUG:当您通过使用ActiveX数据对象(ADO)查询打开的Excel工作表时,会发生内存泄漏
关于使用Jet 4.0 SQL,这篇文章是我所发现的最好的:
中级Microsoft Jet 4.0 SQL
从理论上讲,“访问帮助”的“ SQL”部分应该是相关的,但是它的质量特别低,并且Jet4.0的覆盖范围特别小
实际测试似乎确认该语法在Access数据库引擎的发行版本中从未存在。也许这是SQL Server团队想要添加到Jet 4.0中但Windows团队命令其回滚的那些功能之一?不管怎样,看来我们必须简单地归结为严重的文档错误,Microsoft不会花时间来纠正:(
如果您需要在服务器上进行分页**,那么我建议您考虑使用功能更强大的现代SQL产品并提供更好的文档;)
**从概念上讲,即:Access数据库引擎不是服务器DBMS。
同样,并非所有内容都可以直接在Excel中运行。例如,尽管您可以使用CREATE TABLESQL DDL创建新的工作表和工作簿,但是NOT NULL由于在物理上这是不可能的,因此您无法创建一个有能力的列。另外,Excel的数据类型不那么精细,例如大多数数字类型都映射到DOUBLE FLOAT。
CREATE TABLE
NOT NULL
DOUBLE FLOAT
关于可以在SQL中使用的表达式,Jet 4.0表达式服务以某种方式使用了VBA表达式服务。广义上讲,Jet可以使用任何VBA 5.0(不是最新版本,即VBA 6.0)函数,该函数不是卷入值并返回返回值的方法,仅具有简单的固有数据类型(无数组,无对象等)。 )。我想说的是对的,Microsoft从未明确发布过Jet 4.0支持的VBA功能的权威列表。但是,我相信以下文章中的列表恰好与Jet 4.0中可用的VBA函数的列表完全一致:
如何配置Jet 4.0以防止在Access 2003中运行不安全的功能
(该列表在子标题“对Jet 4.0 Service Pack 3和更高版本使用沙箱模式操作”下的表格中。)
请注意,某些功能在Jet 4.0中的行为不同于在VBA中的行为。从我的头顶上,我可以想到两个。IIF()可以在Jet 4.0中快捷方式(未记录,AFIAK):在VBA中,将同时评估TRUE和FALSE条件,在Jet 4.0中,仅评估匹配的条件。CDEC()(广播到DECIMAL)功能在Jet4.0中已损坏。
IIF()
TRUE
FALSE
CDEC()
DECIMAL
如何编写日期类型的常量?我是说,用SQL表示2011.01.20(此常数)的方法,例如,我使用的是“ 2011-01-20”或#2011-01-20#,还是其他?
我知道这是一种“文字价值”。
这与VBA相同,即#m/d/yyyy#今天是#1/20/2011#。但是,我更喜欢使用ISO8601日期格式和单引号(出于可移植性),并且始终包含时间字段(因为Jet4.0仅具有一种时态数据类型,即DATETIME),并且为了确保遵守区域设置,请使用CDATE()强制转换DATETIME功能例如今天的日期是CDATE('2011-01-20 00:00:00')。
#m/d/yyyy#
#1/20/2011#
DATETIME
CDATE()
CDATE('2011-01-20 00:00:00')
[最初认为OP的意思是“如何创建类型的列DATE?”]
DATE
您可以使用CREATE TABLEDDL例如
CREATE TABLE [Excel 8.0;DATABASE=C:\MyNewWorkbook.xls].MyTable ( my_date_col DATETIME );
请注意,虽然Jet 4.0将支持的数据类型DATETIME,但是在Excel中编辑工作簿时没有这样的约束:如果表Range被扩展并且添加了非临时数据,那么Jet 4.0可以看到的数据类型可能会更改为结果。
Range