EXCEL中的任何SQL和Microsoft OLE DB Provider for Jet 4.0的参考手册?

问题描述:

是否有任何有关SQL语法的参考资料/手册EXCEL与Microsoft OLE DB Provider for Jet 4.0连接?EXCEL中的任何SQL和Microsoft OLE DB Provider for Jet 4.0的参考手册?

例如,如何编写date类型的常量?

什么关键字/函数/子句可用?

当使用Excel作为一个Jet 4.0数据源,我知道最好的参考就是:

How To Use ADO with Excel Data from Visual Basic or VBA

特别重要的是,当包含mixed data types时,如何确定现有列的整体数据类型。

至于在Microsoft OLE DB提供程序为Jet 4.0,最相关的文章是这样的:

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)

什么样的关键字/功能/子句 可用?

由于使用Jet 4.0 SQL认为,这篇文章是我所发现的最好的:

Intermediate Microsoft Jet 4.0 SQL

从理论上讲,SQL section of the Access Help应该是相关的,但它是一个particularly low quality和Jet 4.0特别是遭受较差的覆盖。

同样,并非所有东西都可以直接在Excel中工作。例如,尽管您可以使用CREATE TABLE SQL DDL来创建新的工作表和工作簿,但无法创建能够列的NOT NULL,因为这在物理上不可行。另外,Excel的数据类型不像粒度细小大多数数字类型映射到DOUBLE FLOAT

至于可以在SQL中使用的表达式,Jet 4.0表达式服务以某种方式使用VBA表达式服务。一般来说,Jet可以使用任何VBA 5.0(不是最新版本,VBA 6.0)函数,它不是一种调用值的方法,并且返回一个简单的内在数据类型的值(没有数组,没有对象等)。 )。我认为我说的是微软从未明确发布过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和更高版本“。)

请注意,某些函数在Jet 4.0中的行为与在VBA中的行为不同。关于我的头顶,我可以想到两个。IIF()可以在Jet 4.0中使用快捷方式(无证,AFAIK):在VBA中,对TRUEFALSE条件进行评估,在Jet 4.0中只评估匹配条件。 (投到DECIMAL)功能是broken in Jet 4.0

我该如何编写date类型的常量? 我的意思是,在SQL中使用 2011.01.20(这个常数值)来表示 '2011-01-20'或#2011-01-20#或 其他的东西吗?

我知道这是'字面值'。

这与VBA相同,即#m/d/yyyy#,所以今天的日期将是#1/20/2011#。然而,我更喜欢使用ISO 8601日期格式和单引号(为了便于携带)并且始终包含时间字段(因为Jet 4.0只有一个时间数据类型,为DATETIME),并且为了确保区域设置得到遵守,请使用CDATE()强制转换例如,今天的日期将是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 
); 

注意,尽管喷气4.0将兑现的DATETIME数据类型,有工作簿时在Excel编辑没有这样的限制:如果表Range延伸并非暂时数据然后加入数据类型'看到'由Jet 4.0可能会因此而改变。


+0

通过说写入类型日期的常量,我的意思是,在SQL中表示2011.01.20(此常数值)的方式,例如,我使用“2011-01-20”还是#2011-01-20 #, 或者是其他东西? – deerchao 2011-01-20 00:47:52

+0

使用#2011-01-20# – Juancentro 2012-12-26 19:56:39

什么样的关键字/功能/条款有哪些?

关于功能列表中,我发现文件MSMDCB80.DLL下面的名称列表:

YEAR, WEEKDAY, VarType, Val, UCase$, UCase, TypeName, TRIM$, TRIM, TIMEVALUE, TimeSerial, Timer, TIME$, TIME, TAN, SYD, Switch, String$, String, StrConv, StrComp, Str$, Str, Sqr, Space$, Space, SLN, SIN, Sgn, SECOND, RTrim$, RTrim,Round, Rnd, RIGHTB$, RIGHTB, RIGHT$, RIGHT, RGB, RATE, QBColor, PV, PPMT, PMT, Partition, Oct$, Oct, NPV, NPER, NOW, MONTH, MIRR, MINUTE, MIDB$, MIDB, MID$, MID, LTrim$, LTrim, LOG, LENB, LEN, LEFTB$, LEFTB, LEFT$, LEFT, LCase$, LCase, IsObject, IsNumeric, IsNull, ISERROR, IsEmpty, IsDate, IRR, IPMT, INT, InStr, IMEStatus, IIF, HOUR, Hex$, Hex, Fv, Format$, Format, Fix, EXP, Error$, Error, DDB, Day, DATEVALUE, DATESERIAL, DatePart, DateDiff, DATEADD, DATE$, Date, CVErr, CvDate, CVAR, CSTR, CSNG, COS, CLNG, CINT, CHRW$, CHRW, CHRB$, CHRB, CHR$, CHR, Choose, CDBL, CDATE, CCUR, CBYTE, CBOOL, ATN, ASCW, ASCB, ASC, Array, ABS

他们的理由和描述可以发现here

每个功能是工作在我的SQL查询,所以我猜想,这是一个125个函数的综合列表。