How To Use ADO with Excel Data from Visual Basic or VBA.
特别重要的是如何在包含mixed data types时确定现有列的整体数据类型.
至于Jet 4.0的Microsoft OLE DB提供程序,最相关的文章是这样的:
ADO Provider Properties and Settings: Microsoft Jet 4.0 Provider Properties
也就是说,在前面的文章中更好地介绍了特定于Excel的细节.
使用Excel和sql时应注意的一个重要问题:
BUG: Memory leak occurs when you query an open Excel worksheet by using ActiveX Data Objects (ADO)
What keywords/functions/clauses are
available?
Intermediate Microsoft Jet 4.0 SQL
从理论上讲,SQL section of the Access Help应该是相关的,但它是particularly low quality而Jet 4.0的覆盖范围很差.
同样,并非一切都可以直接在Excel中使用.例如,虽然您可以使用CREATE TABLE sql DDL创建新工作表和工作簿,但您无法创建NOT NULLable列,因为这在物理上是不可能的.此外,Excel的数据类型不那么精细,例如大多数数字类型映射到DOUBLE FLOAT.
至于可以在sql中使用的表达式,Jet 4.0表达式服务以某种方式使用VBA表达式服务.从广义上讲,Jet可以使用任何VBA 5.0(不是最新版本,即VBA 6.0)函数,它不是一个involl值的方法,并且返回只返回单个值的简单内部数据类型(没有数组,没有对象等) ).我认为我没说明微软从未明确公布过Jet 4.0支持的VBA功能的确切列表.但是,我相信以下文章中的列表恰好与Jet 4.0中可用的VBA函数列表完全一致:
How to configure Jet 4.0 to prevent unsafe functions from running in Access 2003
(该列表位于子标题“使用Jet 4.0 Service Pack 3及更高版本的SandBox模式操作”下的表格中.)
请注意,某些函数在Jet 4.0中的行为与在VBA中的行为不同.在我的头顶,我可以想到两个. IIF()可以在Jet 4.0中快捷方式(未记录,AFAIK):在VBA中,评估TRUE和FALSE条件,在Jet 4.0中仅评估匹配条件. CDEC()(强制转换为DECIMAL)函数是broken in Jet 4.0.
how do I write constants of type date?
I mean,the way to express
2011.01.20 (this constant value) in sql,for example,do I use
‘2011-01-20’,or #2011-01-20#,or
something else?
我知道这是一个“文字价值”.
这与VBA相同,即#m / d / yyyy#,所以今天的日期将是#1/20/2011#.但是,我更喜欢使用ISO 8601日期格式和单引号(用于可移植性)并始终包含时间字段(因为Jet 4.0只有一种时态数据类型,即DATETIME),并且为了确保区域设置得到遵守,请使用CDATE()转换为DATETIME函数,例如今天的日期是CDATE(‘2011-01-20 00:00:00’).
[最初认为OP意味着,“如何创建DATE类型的列?”]
你可以使用CREATE TABLE DDL,例如
CREATE TABLE [Excel 8.0;DATABASE=C:\MyNewWorkbook.xls].MyTable ( my_date_col DATETIME );
请注意,虽然Jet 4.0将遵循DATETIME的数据类型,但在Excel中编辑工作簿时没有此类约束:如果扩展表Range并添加非时态数据,则Jet 4.0“看到”的数据类型可能会更改结果是.