Access数据库问题锦集
很少采用Access做数据库开发,前段时间,朋友接了一个小单,让我帮忙做后台开发,采用Access + Asp.Net开发,结果在开发过程使用Access碰到不少问题,所以把这些问题总结一下,希望对其它人有些帮助
1: Access 分页脚本问题
使用Access作为数据库开发系统时,页面数据分页的方案有好几种:
1.1 使用DataGridView自带的分页功能.
1.2. 使用SELECT TOP NOT IN 来实现。类似如下所示:
SELECT TOP 100 [ID] , [Message] , [CreateDate] FROM ScrollMessage WHERE ID NOT IN ( SELECT TOP 900 FROM ScrollMessage ORDER BY ID ) ORDER BY ID
1.3.使用嵌套的TOP结合分页控件AspNetPager来实现
1.4. 设置一个自增长字段.并且该字段为INDEX.(网上有方案,我没有研究过这种方案)
其实上面几种方案中,我觉得效率最高的应该是使用TOP嵌套方案(特别是当数据量大的时候),也是我下面将要讲解的。 如下图所示:假设有些滚动信息需要分页显示,则我们可以这样处理
1.1 解决Access 分页,首页或最后一页数据显示错误、混乱问题
//设置AspNetPager 的RecordCount属性 AspNetPager1.RecordCount = module.GetScrollMessageCount(""); if (pageIndex == AspNetPager1.PageCount) pageSize = AspNetPager1.RecordCount - (pageIndex - 1) * pageSize; if (curPageSize == 0) curPageSize = AspNetPager1.RecordCount; else curPageSize = pageSize * pageIndex;
gvMessage.DataBind(); }上面代码已经能解决分页数据错乱问题,但是其实里面还有个隐藏的bug,就是当数据表没有任何记录时,它会报错:“SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确”。 可能有些人被这个人弄得莫名其妙,其实主要是TOP 0引起的, 你用SELECT TOP 0 * FROM A去查询设计里面执行下,就会弹出那个错误提示。所以要修改下上面的代码如下:
private void BindGridView() // 当前页数据显示个数 int pageSize = AspNetPager1.PageSize; // AspNetPager 控件中当前显示的页 int pageIndex = AspNetPager1.CurrentPageIndex; int curPageSize = 0; MessageMangent module = new MessageMangent(); //设置AspNetPager 的RecordCount属性 AspNetPager1.RecordCount = module.GetScrollMessageCount(""); if (pageIndex == AspNetPager1.PageCount) pageSize = AspNetPager1.RecordCount - (pageIndex - 1) * pageSize; if (curPageSize == 0) curPageSize = AspNetPager1.RecordCount; else curPageSize = pageSize * pageIndex; if (curPageSize == 0 pageSize == 0) curPageSize = 1; pageSize = 1;1.2 SELECT TOP 失效问题,比如只需前十条记录,结果它给你查出了所有记录。这主要是查询TOP语句的后面使用Order by,而且Order by字段中有重复值的话,那么这个TOP很会失效而会返回所有记录,所以Order by后面最好用主键字段。我又一次就是犯了这个错误,查询语句如下所示,本来工作好好的,但是由于客户需求,把CreateDate字段从yyyy-MM-dd HH:mm 改成yyyy-MM-dd 结果排序全部混乱了。
}
string cmdText = string .Format( @"SELECT * FROM SELECT TOP {0} * FROM ( SELECT TOP {1} * FROM Images I INNER JOIN BaseImgPage P ON I.PageID = P.PageID AND I.SubType = P.SubType WHERE I.PageID =@PageID AND I.SubType=@SubType" + searchCondtion + @" ORDER BY CreateDate ASC ) ORDER BY CreateDate DESC ) ORDER BY ImageSortNum DESC;", pageSize, curpageSize);
2 关键字问题,像password等,这样网上介绍很多了,想必大家都比较了解。这里就不多说了
3 错误提示"操作必须使用一个可更新的查询",部署到服务器上,插入或更新数据时,有时会爆出这样的错误
1.Win 2000/ Win 2003 系统,在数据库文件上(*.mdb)点鼠标右键,选择属性,点安全,查看是否存在everyone用户,如果没有,添加everone用户,勾选"完全控制".
2.Win XP 系统,打开 data 文件夹,点击“工具”- “文件夹选项”- “查看”,找到“使用简单文件共享(推荐)”这项,把前面的勾去掉。然后在数据库文件上 (*.mdb)点鼠标右键,选择属性,点安全,查看是否存在everyone用户,如果没有,添加everone用户,勾选"完全控制".
SqlServer注意事项总结,高级程序员必背。 本篇文章主要介绍SqlServer使用时的注意事项。 想成为一个高级程序员,数据库的使用是必须要会的。而数据库的使用纯熟程度,也侧面反映了一个开放的水平。 下面介绍SqlServer在使用和设计的过程中需要注意的事项。
潇湘隐者 网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
相关文章
- MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】
- java远程连接access数据库
- Qt编写数据库通用翻页demo(开源)
- 在千万级的数据库查询中,如何提高效率?
- 数据库设计学习⑤:ER图
- MySQL数据库普通索引
- 【数据库】KeyDB:一款比 Redis 性能强 5 倍的数据库!
- JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库
- c#程序中使用"like“查询access数据库语句的问题
- 101.第十九章 MySQL数据库 -- MySQL的日志管理(十一)
- LabVIEW创建一个Access数据库文件
- LabVIEW通过Microsoft Data Link file UDL访问Microsoft Access数据库
- java访问mysql方法数据库
- 数据库索引的作用和长处缺点
- 关于Qt数据库开发的一些冷知识
- Redis缓存数据库高可用架构
- 数据结构练手小项目(AVL树、哈希表、循环链表、MySQL数据库)
- Oracle的学习心得和知识总结(十)|Oracle数据库PL/SQL语言循环控制语句之LOOP语句技术详解
- DM的学习心得和知识总结(二)|DM数据库动态性能视图