Office中国论坛/Access中国论坛
标题: 我的SQL出错,请问JET SQL与ANSI SQL之区别 [打印本页]
作者: antywjl 时间: 2006-5-19 00:07
标题: 我的SQL出错,请问JET SQL与ANSI SQL之区别
我的SQL出错,请问JET SQL与ANSI SQL之区别?
我在里面的查询里SQL视图中输入下面SQL语句,窗口打开就要输入参数(原因是查询分析器不能标识由查询指定的对象或者估价某个表达式时,便会出现“输入参数值”对话框)
我想知道问题是出在字段名上吗,可这些字段名与表中,窗体中相符?
Select 企业.名称, 企业.客户号, 企业.法人代码, 企业.账号, 企业.网点编号, 企业.客户经理编号
From 企业
Where(((企业.网点编号)=[Forms]![企业资料]![网点编号Q]) And ((企业.名称)=[Forms]![企业资料]![企业名称Q]) And ((企业.客户经理编号)=[Forms]![企业资料]![客户经理编号Q]))
Or
(((企业.网点编号)=[Forms]![企业资料]![网点编号Q]) And ((企业.名称)=[Forms]![企业资料]![企业名称Q]) And ([Forms]![企业资料]![客户经理编号Q] IsNull))
Or
(((企业.网点编号)=[Forms]![企业资料]![网点编号Q]) And ([Forms]![企业资料]![企业名称Q] Is Null) And ((企业.客户经理编号)=[Forms]![企业资料]![客户经理编号Q]))
Or (([Forms]![企业资料]![网点编号Q] IsNull) And ((企业.名称)=[Forms]![企业资料]![企业名称Q]) And ((企业.客户经理编号)=[Forms]![企业资料]![客户经理编号Q]))
Or
(((企业.网点编号)=[Forms]![企业资料]![网点编号Q]) And ([Forms]![企业资料]![企业名称Q] IsNull) And ([Forms]![企业资料]![客户经理编号Q] IsNull))
Or
(([Forms]![企业资料]![网点编号Q] IsNull) And ((企业.名称)=[Forms]![企业资料]![企业名称Q]) And ([Forms]![企业资料]![客户经理编号Q] IsNull))
Or
(([Forms]![企业资料]![网点编号Q] IsNull) And ([Forms]![企业资料]![企业名称Q] IsNull) And ((企业.客户经理编号)=[Forms]![企业资料]![客户经理编号Q]))
Or
(([Forms]![企业资料]![网点编号Q] IsNull) And ([Forms]![企业资料]![企业名称Q] IsNull) And ([Forms]![企业资料]![客户经理编号Q] IsNull))[attach]17872[/attach]
[此贴子已经被作者于2006-5-18 17:30:57编辑过]
作者: LucasLynn 时间: 2006-5-19 00:15
发个附件上来,看得有点晕了。
作者: fan0217 时间: 2006-5-19 00:17
Microsoft Jet SQL 和 ANSI SQL 的比较
Microsoft Jet 数据库引擎
SQL 通常与 ANSI-89 Level 1 相兼容。但是,某些 ANSI
SQL 特性并没有在 Microsoft® Jet SQL 中实现。在 Microsoft Jet 4.X 版本发行后,Microsoft OLE DB
Provider for Jet 使用了更多的 ANSI-92
SQL 语法。而 Microsoft Jet SQL 则包含 ANSI SQL 不支持的关键字和特性。
主要区别
- Microsoft Jet SQL 和 ANSI SQL 各自拥有不同的保留字和数据类型。有关详细信息,请参阅 Microsoft Jet Database
Engine SQL 保留字和等价的 ANSI SQL
数据类型。如果将 Jet 4.X 和 Microsoft OLE DB Provider for Jet 一起使用,还有其他保留字。
- 应用于 Between...And 结构的规则不同,该结构具有以下语法:
expr1 [NOT] Between value1 And
value2
在 Microsoft Jet SQL 中,value1 可以大于 value2;在 ANSI SQL 中,value1 必须小于或等于
value2。
- Microsoft Jet SQL 支持 ANSI SQL 通配符和 Microsoft Jet 专用的通配符以用于运算符 Like。ANSI 和 Microsoft Jet 通配符的使用是互不包括的。必须使用其中一种而不能混合使用。ANSI SQL
通配符仅在使用 Jet 4.X 和 Microsoft OLE DB Provider for Jet 时才是可用的。如果试图通过 Microsoft
Access 或者 DAO 来使用 ANSI SQL 通配符,那么它们会被解释为文本。相反,使用 Microsoft OLE DB Provider for
Jet 和 Jet 4.X 时,才会成功执行。
匹配字符
Microsoft Jet SQL
ANSI SQL
任何单个字符
?
_(下划线)
零个或多个字符
*
%
- Microsoft Jet SQL 通常限制性很少。例如,它允许对表达式进行分组和排序。
- Microsoft Jet SQL 支持更加强大的表达式。
Microsoft Jet SQL 的增强功能
Microsoft Jet SQL 提供了如下增强功能:
TRANSFORM 语句,它对交叉表查询提供支持。
- 增加了其他 SQL 聚合函数,如StDev 和 VarP。
PARAMETERS 声明用于定义参数查询。
Microsoft Jet SQL 不支持的 ANSI SQL 功能。
Microsoft Jet SQL 不支持如下 ANSI SQL 功能:
- DISTINCT 聚合函数引用。例如,Microsoft Jet SQL 不允许 SUM(DISTINCT columnname)。
- 用于限制查询返回的行数的 LIMIT TO nn ROWS 子句。只能使用 WHERE 子句来限制查询的范围。
请参阅
等价的 ANSI SQL
数据类型
Microsoft Jet
数据库引擎 SQL 保留字
Like
SQL 聚合函数
Microsoft Jet 数据库引擎
SQL 数据类型
使用通配符进行字符串比较
作者: Benjamin_luk 时间: 2006-5-19 00:24
因为你引用了窗体:[企业资料]的值,在这个窗体没有打开的情况下,ACCESS当然会提示你输入参数。你先打开你引用的窗体,再打开SQL就不会有这个问题了。
[此贴子已经被作者于2006-5-18 16:30:22编辑过]
作者: antywjl 时间: 2006-5-19 00:50
我输入SQL再打开窗体时也出现一样的问题,不只是在打开查询的时候。试了你的方法,还是有问题。
作者: Benjamin_luk 时间: 2006-5-19 01:11
如果以上是用在窗体里的SQL,请注意通配符的引用.另外
先将要引用的窗体打开.
请将(...IsNull改为
IsNull(...)
最好能将你的MDB放上来.
作者: antywjl 时间: 2006-5-19 01:37
我的SQL语句是在查询里的SQL视图中,在输入语句打开相应的企业资料窗体(在这窗体中引用到此查询)或打开查询都会要求输入参数。
ISNULL和IS NULL有什么特别的区别吗,()IS NULL和ISNULL()又有什么区别呢
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |