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中,对TRUE
和FALSE
条件进行评估,在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可能会因此而改变。
什么样的关键字/功能/条款有哪些?
关于功能列表中,我发现文件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个函数的综合列表。
通过说写入类型日期的常量,我的意思是,在SQL中表示2011.01.20(此常数值)的方式,例如,我使用“2011-01-20”还是#2011-01-20 #, 或者是其他东西? – deerchao 2011-01-20 00:47:52
使用#2011-01-20# – Juancentro 2012-12-26 19:56:39