搜索
首页数据库mysql教程Access数据库问题锦集

很少采用Access做数据库开发,前段时间,朋友接了一个小单,让我帮忙做后台开发,采用Access + Asp.Net开发,结果在开发过程使用Access碰到不少问题,所以把这些问题总结一下,希望对其它人有些帮助 1: Access分页脚本问题 使用Access作为数据库开发系统时

很少采用Access做数据库开发,前段时间,朋友接了一个小单,让我帮忙做后台开发,采用Access + Asp.Net开发,结果在开发过程使用Access碰到不少问题,所以把这些问题总结一下,希望对其它人有些帮助

1: Access 分页脚本问题

使用Access作为数据库开发系统时,页面数据分页的方案有好几种:

    1.1  使用DataGridView自带的分页功能.

    1.2.  使用SELECT TOP  NOT IN 来实现。类似如下所示:

 

<p><span>SELECT</span><span>TOP</span><span>100</span><span><br><br>        </span><span>[</span><span>ID</span><span>]</span><span> ,<br><br>        </span><span>[</span><span>Message</span><span>]</span><span> ,<br><br>        </span><span>[</span><span>CreateDate</span><span>]</span><span><br><br></span><span>FROM</span><span>    ScrollMessage<br><br></span><span>WHERE</span><span>   ID </span><span>NOT</span><span>IN</span><span> ( </span><span>SELECT</span><span>TOP</span><span>900</span><span><br><br>                            ID<br><br>                    </span><span>FROM</span><span>    ScrollMessage<br><br>                    </span><span>ORDER</span><span>BY</span><span> ID )<br><br></span><span>ORDER</span><span>BY</span><span> ID</span></p>
 

     1.3.使用嵌套的TOP结合分页控件AspNetPager来实现

     1.4. 设置一个自增长字段.并且该字段为INDEX.(网上有方案,我没有研究过这种方案)

其实上面几种方案中,我觉得效率最高的应该是使用TOP嵌套方案(特别是当数据量大的时候),也是我下面将要讲解的。 如下图所示:假设有些滚动信息需要分页显示,则我们可以这样处理

Access数据库问题锦集

 

 

 

 

 

 

 

 

 

 

1.1 解决Access 分页,首页或最后一页数据显示错误、混乱问题

 

<p><span>///</span><span><summary></summary></span><span><br><br>        </span><span>///</span><span> 分页获取滚动消息数据<br><br>        </span><span>///</span><span></span><span><br><br>        </span><span>///</span><span><param name="pageSize"></span><span>一页显示数据条数</span><span></span><span><br><br>        </span><span>///</span><span><param name="curPageSize"></span><span>当前页的数据在所有数据中位置(排序)</span><span></span><span><br><br>        </span><span>///</span><span><param name="condition"></span><span>查询条件</span><span></span><span><br><br>        </span><span>///</span><span><returns></returns></span><span>返回当前条件下的滚动消息</span><span></span><span><br></span><span><br>        </span><span>public</span><span> DataTable GetScrollMessage(</span><span>int</span><span> pageSize, </span><span>int</span><span> curPageSize, </span><span>string</span><span> condition)<br><br>        {<br><br>            </span><span>string</span><span> cmdText </span><span>=</span><span>string</span><span>.Format(</span><span>@"</span><span>SELECT * FROM<br><br>                                               (SELECT TOP {0} * FROM<br><br>                                                (<br><br>                                                    SELECT TOP {1}  ID,  Message,CreateDate<br><br>                                                    FROM ScrollMessage<br><br>                                                    WHERE 1=1 {2}<br><br>                                                    ORDER BY ID DESC<br><br>                                                ) T<br><br>                                                 ORDER BY T.ID ASC   <br><br>                                                ) TT ORDER BY TT.ID DESC;        <br><br>                                        </span><span>"</span><span>, pageSize, curPageSize, condition);<br><br> <br><br> <br><br>            </span><span>return</span><span> DbHelper.ExecuteDataSet(cmdText).Tables[</span><span>0</span><span>];<br><br> <br><br>        }</span></p>

Access数据库问题锦集Access数据库问题锦集View Code

<p><span>private</span><span>void</span><span> BindGridView()<br>    {<br>        </span><span>//</span><span> 当前页数据显示个数</span><span><br></span><span>int</span><span> pageSize </span><span>=</span><span> AspNetPager1.PageSize;<br><br>        </span><span>//</span><span> AspNetPager 控件中当前显示的页</span><span><br></span><span>int</span><span> pageIndex </span><span>=</span><span> AspNetPager1.CurrentPageIndex;<br>        </span><span>int</span><span> curPageSize </span><span>=</span><span>0</span><span>;<br>        MessageMangent module </span><span>=</span><span>new</span><span> MessageMangent();<br><br>        </span><span>//</span><span>设置AspNetPager 的RecordCount属性</span><span><br></span><span>        AspNetPager1.RecordCount </span><span>=</span><span> module.GetScrollMessageCount(</span><span>""</span><span>);<br><br>        </span><span>if</span><span> (pageIndex </span><span>==</span><span> AspNetPager1.PageCount)<br>        {<br>            pageSize </span><span>=</span><span> AspNetPager1.RecordCount </span><span>-</span><span> (pageIndex </span><span>-</span><span>1</span><span>) </span><span>*</span><span> pageSize;<br><br>            </span><span>if</span><span> (curPageSize </span><span>==</span><span>0</span><span>)<br>                curPageSize </span><span>=</span><span> AspNetPager1.RecordCount;<br><br>        }<br>        </span><span>else</span><span><br>        {<br>            curPageSize </span><span>=</span><span> pageSize </span><span>*</span><span> pageIndex;<br>        }<br><br>   <br><br>        DataTable dtDataSource </span><span>=</span><span> module.GetScrollMessage(pageSize, curPageSize, </span><span>""</span><span>);<br><br>        gvMessage.DataSource </span><span>=</span><span> dtDataSource;<br>        gvMessage.DataBind();<br>    }</span></p>

上面代码已经能解决分页数据错乱问题,但是其实里面还有个隐藏的bug,就是当数据表没有任何记录时,它会报错:“SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确”。 可能有些人被这个人弄得莫名其妙,其实主要是TOP 0引起的, 你用SELECT TOP 0 * FROM A去查询设计里面执行下,就会弹出那个错误提示。所以要修改下上面的代码如下:

Access数据库问题锦集Access数据库问题锦集View Code

<p><span>private</span><span>void</span><span> BindGridView()<br>    {<br>        </span><span>//</span><span> 当前页数据显示个数</span><span><br></span><span>int</span><span> pageSize </span><span>=</span><span> AspNetPager1.PageSize;<br><br>        </span><span>//</span><span> AspNetPager 控件中当前显示的页</span><span><br></span><span>int</span><span> pageIndex </span><span>=</span><span> AspNetPager1.CurrentPageIndex;<br>        </span><span>int</span><span> curPageSize </span><span>=</span><span>0</span><span>;<br>        MessageMangent module </span><span>=</span><span>new</span><span> MessageMangent();<br><br>        </span><span>//</span><span>设置AspNetPager 的RecordCount属性</span><span><br></span><span>        AspNetPager1.RecordCount </span><span>=</span><span> module.GetScrollMessageCount(</span><span>""</span><span>);<br><br>        </span><span>if</span><span> (pageIndex </span><span>==</span><span> AspNetPager1.PageCount)<br>        {<br>            pageSize </span><span>=</span><span> AspNetPager1.RecordCount </span><span>-</span><span> (pageIndex </span><span>-</span><span>1</span><span>) </span><span>*</span><span> pageSize;<br><br>            </span><span>if</span><span> (curPageSize </span><span>==</span><span>0</span><span>)<br>                curPageSize </span><span>=</span><span> AspNetPager1.RecordCount;<br><br>        }<br>        </span><span>else</span><span><br>        {<br>            curPageSize </span><span>=</span><span> pageSize </span><span>*</span><span> pageIndex;<br>        }<br><br>        </span><span>if</span><span> (curPageSize </span><span>==</span><span>0</span><span>&&</span><span> pageSize </span><span>==</span><span>0</span><span>)<br>        {<br>            curPageSize </span><span>=</span><span>1</span><span>;<br>            pageSize </span><span>=</span><span>1</span><span>;<br>        }<br><br><br>        DataTable dtDataSource </span><span>=</span><span> module.GetScrollMessage(pageSize, curPageSize, </span><span>""</span><span>);<br><br>        gvMessage.DataSource </span><span>=</span><span> dtDataSource;<br>        gvMessage.DataBind();<br>    }</span></p>

1.2 SELECT TOP 失效问题,比如只需前十条记录,结果它给你查出了所有记录。这主要是查询TOP语句的后面使用Order by,而且Order by字段中有重复值的话,那么这个TOP很会失效而会返回所有记录,所以Order by后面最好用主键字段。我又一次就是犯了这个错误,查询语句如下所示,本来工作好好的,但是由于客户需求,把CreateDate字段从yyyy-MM-dd HH:mm 改成yyyy-MM-dd 结果排序全部混乱了。

Access数据库问题锦集Access数据库问题锦集View Code

<p><span>string</span><span> cmdText </span><span>=</span><span>string</span><span> .Format(<br>                                </span><span>@"</span><span>SELECT * FROM <br>                                (<br>                                    SELECT TOP {0} * <br>                                    FROM (<br>                                            SELECT TOP {1} * FROM  Images I<br>                                            INNER JOIN BaseImgPage P ON I.PageID = P.PageID AND I.SubType = P.SubType <br>                                            WHERE I.PageID =@PageID AND I.SubType=@SubType</span><span>"</span><span>+</span><span> searchCondtion </span><span>+</span><span>@"</span><span><br>                                            ORDER BY CreateDate ASC<br>                                    ) ORDER BY CreateDate DESC<br>                                )  ORDER BY ImageSortNum DESC;</span><span>"</span><span>, pageSize, curpageSize);</span></p>

2 关键字问题,像password等,这样网上介绍很多了,想必大家都比较了解。这里就不多说了

3 错误提示"操作必须使用一个可更新的查询",部署到服务器上,插入或更新数据时,有时会爆出这样的错误

      1.Win 2000/ Win 2003 系统,在数据库文件上(*.mdb)点鼠标右键,选择属性,点安全,查看是否存在everyone用户,如果没有,添加everone用户,勾选"完全控制".

     2.Win XP 系统,打开 data 文件夹,点击“工具”->“文件夹选项”->“查看”,找到“使用简单文件共享(推荐)”这项,把前面的勾去掉。然后在数据库文件上(*.mdb)点鼠标右键,选择属性,点安全,查看是否存在everyone用户,如果没有,添加everone用户,勾选"完全控制".

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL和其他SQL方言之间的语法有什么区别?MySQL和其他SQL方言之间的语法有什么区别?Apr 27, 2025 am 12:26 AM

mysqldiffersfromothersqldialectsinsyntaxforlimit,自动启动,弦乐范围,子征服和表面上分析。1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

什么是mysql分区?什么是mysql分区?Apr 27, 2025 am 12:23 AM

MySQL分区能提升性能和简化维护。1)通过按特定标准(如日期范围)将大表分成小块,2)物理上将数据分成独立文件,3)查询时MySQL可专注于相关分区,4)查询优化器可跳过不相关分区,5)选择合适的分区策略并定期维护是关键。

您如何在MySQL中授予和撤销特权?您如何在MySQL中授予和撤销特权?Apr 27, 2025 am 12:21 AM

在MySQL中,如何授予和撤销权限?1.使用GRANT语句授予权限,如GRANTALLPRIVILEGESONdatabase_name.TO'username'@'host';2.使用REVOKE语句撤销权限,如REVOKEALLPRIVILEGESONdatabase_name.FROM'username'@'host',确保及时沟通权限变更。

说明InnoDB和Myisam存储引擎之间的差异。说明InnoDB和Myisam存储引擎之间的差异。Apr 27, 2025 am 12:20 AM

InnoDB适合需要事务支持和高并发性的应用,MyISAM适合读多写少的应用。1.InnoDB支持事务和行级锁,适用于电商和银行系统。2.MyISAM提供快速读取和索引,适合博客和内容管理系统。

MySQL中有哪些不同类型的连接?MySQL中有哪些不同类型的连接?Apr 27, 2025 am 12:13 AM

MySQL中有四种主要的JOIN类型:INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLOUTERJOIN。1.INNERJOIN返回两个表中符合JOIN条件的所有行。2.LEFTJOIN返回左表中的所有行,即使右表中没有匹配的行。3.RIGHTJOIN与LEFTJOIN相反,返回右表中的所有行。4.FULLOUTERJOIN返回两个表中所有符合或不符合JOIN条件的行。

MySQL中有哪些不同的存储引擎?MySQL中有哪些不同的存储引擎?Apr 26, 2025 am 12:27 AM

mysqloffersvariousStorageengines,每个suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)记忆

MySQL中有哪些常见的安全漏洞?MySQL中有哪些常见的安全漏洞?Apr 26, 2025 am 12:27 AM

MySQL中常见的安全漏洞包括SQL注入、弱密码、权限配置不当和未更新的软件。1.SQL注入可以通过使用预处理语句防止。2.弱密码可以通过强制使用强密码策略避免。3.权限配置不当可以通过定期审查和调整用户权限解决。4.未更新的软件可以通过定期检查和更新MySQL版本来修补。

您如何确定MySQL中的慢速查询?您如何确定MySQL中的慢速查询?Apr 26, 2025 am 12:15 AM

在MySQL中识别慢查询可以通过启用慢查询日志并设置阈值来实现。1.启用慢查询日志并设置阈值。2.查看和分析慢查询日志文件,使用工具如mysqldumpslow或pt-query-digest进行深入分析。3.优化慢查询可以通过索引优化、查询重写和避免使用SELECT*来实现。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具