1.access中使用select top 出现的问题
如果在查询top语句的后面使用order by,而且order by字段中有重复值的话,那么这个top很可能会失效,
会返回所有记录
比如:
select top 5 from news order by createdate
如果createdate中有重复值,那么很有可能会显示出所有的记录来,此top功能会失效的
但如果createdate中无重复值,那么top功能还是有效的
因此,在access中使用top功能要注意一下order by的字段是否会有重复值,如果象createdate是年-月-日 时:分:秒的,那基本上问题不大的。
但为了保险起见,我们也可以采用“加入主键”的方式,否则必须保证在top和order by不能在同一层查询中同时出现。
2.文件共享锁定数溢出
access数据库,同时操作大量记录(9500条以上)时报错。
错误提示:
microsoft jet database engine 错误 '80040e21'
文件共享锁定数溢出。(error 3052)
解决办法:
修改注册表。
[hkey_local_machine/software/microsoft/jet/4.0/engines/jet 4.0]
maxlocksperfile=dword:05f5e0ff
将maxlocksperfile默认的十进制值9500改大即可,可以改成十进制的99999999
3.access采用sql语句与sql的区别
access中提供查询对象,在设计时可以采用设计视图和sql视图,非常方便,sql视图中的sql语句可以在sql server中使用,但是否完全可用呢?答案是否定的,表中总结了 microsoft access 和 microsoft sql servers 的 sql 语法的重要区别。
表1
sql 语法元素
microsoft
access
microsoft sql
server
标识符
限制不超过 64 个字符。
允许使用关键字和特殊字符。
可以用任何字符开头。
sql server 6.5:
限制不超过 30 个字符。 不允许使用关键字和特殊字符。 必须用字母字符开头。 sql server 7.0 的标识符与 access 完全兼容。
输出字段
允许多个输出字段具有相同名称。
在视图中不支持多个相同输出字段名。
日期分隔符号
英镑符(#)
撇号(')
boolean 常量
true、false;on、off;yes、no。
整数:1(真)、0(假)
字符串连接
和号(&)
加号(+)
通配符
星号(*)与零个或更多字符匹配。
问号(?)与单个字符匹配。
叹号(!)意味着不在列表中。
英镑符(#)意味着单个数字。
百分号(%)与零个或更多字符匹配。
下划线(_)与单个字符匹配。
上插入符(^)意味着不在列表中。
没有与英镑符(#)对应的字符。
top
如果有一个 order by 子句,自动包含层次。
sql server 6.5 不支持。
sql server 7.0 需要一个明确的 with ties 子句。
create index
允许创建升序和降序索引。
允许声明主键,没有 null 值,并且忽略 null 值。
drop index
语法是:
drop index on 语法是:
drop index
, distinctrow
支持(允许选择单个记录)。
不支持。
owneraccess
支持(在执行时控制许可权)。
不支持。
table in union
支持(允许使用下列语法指定表:
table
不支持。
order by in unions
支持。允许通过联合查询中的子句实现多种排序。
支持。允许通过语句末尾的子句实现一种排序。
transform
支持。用于交叉表查询。
不支持。
parameters
支持(在 sql 中记录)。
不支持。
以northwind数据库为例,若要得到相同查询结果,sql语句作相应变化。主要是通配符的变化
access:
select * from products where productname like 'c*';
select * from products where productname like 'c?ang';
sql server:
select * from products where productname like 'c%'
select * from products where productname like 'c_ang'
