admin

在带有Microsoft OLE DB Provider for Jet 4.0的EXCEL中有关SQL的任何参考/手册?

sql

与Jet的Microsoft OLE DB提供程序连接的 EXCEL中 是否有关于SQL语法的参考/手册?

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

有哪些关键字/功能/条款?


阅读 297

收藏
2021-05-10

共1个答案

admin

当使用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

关于可以在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中,将同时评估TRUEFALSE条件,在Jet
4.0中,仅评估匹配的条件。CDEC()(广播到DECIMAL)功能在Jet4.0中损坏

如何编写日期类型的常量?我是说,用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')


[最初认为OP的意思是“如何创建类型的列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可以看到的数据类型可能会更改为结果。

2021-05-10