搜索
首页数据库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
access如何设置验证规则access如何设置验证规则Apr 10, 2024 am 10:59 AM

Access 验证规则是一种数据验证工具,用于确保数据符合特定条件,防止输入无效数据。设置验证规则的步骤:1. 选择要设置验证规则的字段;2. 打开“字段属性”对话框并切换到“查找”选项卡;3. 在“验证规则”字段中输入验证规则;4. 在“验证文本”字段中输入不符合规则时的错误消息;5. 单击“确定”保存更改。

microsoft access是什么软件microsoft access是什么软件Mar 03, 2023 am 11:37 AM

microsoft access是由微软发布的关系数据库管理系统;它结合了MicrosoftJet Database Engine和图形用户界面两项特点,是Microsoft Office的系统程序之一。

access和trunk端口的区别是什么access和trunk端口的区别是什么Oct 31, 2023 pm 05:59 PM

access和trunk端口的区别:1、Access端口用于连接终端设备,提供单个VLAN的接入,而Trunk端口用于连接交换机之间,提供多个VLAN的传输;2、Access端口只传输属于指定VLAN的数据,而Trunk端口可以传输多个VLAN的数据,并使用VLAN标签进行区分。

vb中怎么连接access数据库vb中怎么连接access数据库Oct 09, 2023 am 11:38 AM

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。详细介绍:1、引用必要的命名空间,在VB项目中,首先需要引用“System.Data`和`Microsoft.Office.Interop.Access”命名空间,以便使用ADO.NET和Access相关的类和方法,可以在VB项目的引用中添加这些命名等等。

access中如何导入excel数据access中如何导入excel数据Apr 10, 2024 pm 01:44 PM

将 Excel 数据导入 Access 的步骤:1. 打开 Access 数据库。2. 创建链接的表,选择 Excel 工作簿。3. 选择 Excel 表格。4. 映射字段。5. 选择数据选项。6. 导入数据。7. 管理链接的数据。

access数据库的扩展名是什么access数据库的扩展名是什么Apr 10, 2024 am 11:10 AM

Access 数据库文件的扩展名为 .accdb,自 Microsoft Access 2007 起开始使用,用于识别包含结构化数据的容器文件,如表、查询和窗体。

access是什么软件access是什么软件Apr 10, 2024 am 10:55 AM

Microsoft Access 是一款关系型数据库管理系统 (RDBMS),用于存储、管理和分析数据。它主要用于数据管理、导入/导出、查询/报表生成、用户界面设计和应用程序开发。Access 优势包括易用性、集成数据库管理、强大灵活、与 Office 集成和可扩展性。

access数据库sql语言中如何把数字1显示为01access数据库sql语言中如何把数字1显示为01Apr 10, 2024 pm 01:17 PM

在 Access SQL 中,使用 FORMAT 函数,并将格式指定为 "00",可以将数字 1 显示为文本格式 "01"。

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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器