ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4600|回复: 5

通过ASP与ACCESS数据库建立连接(转)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-9-15 18:02 | 显示全部楼层 |阅读模式

如何通过ASP与数据库建立连接是一个非常现实的问题,我尽量写得非常详细。相信看了这篇文章相信您已经能够写出类似的比较简单和实用的程序了。 (一)数据库的选择:   有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。那么到底选择什么数据库最合适呢?其中SQL SERVER是服务器级的,足以应付每天上万次的访问量。对于非服务器级的数据库建议使用ACCESS97。因为:(1)只要安装了PWS或IIS4肯定有ACCESS的ODBC驱动,即你的系统肯定支持ACCESS数据库的存取。(2)ACCESS支持的SQL指令非常齐全。(3)ACCESS ODBC驱动程序的效率非常高。虽然它不是服务器级的数据库,但是作为中小型企业内部网的数据库支持还是绰绰有余的。(4)ACCESS97在OFFICE97中就有,非常方便得到和使用。   本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。 (二)例子:我们建立一个“客户”数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。 (1)首先建立ACCESS数据库customer.mdb(今后有用的)。建立如下字段:  客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。将表保存为"客户"(今后有用的,===>看看图)。注意:建立字段时多作了2个(客户编号、时间),因为在今后排序时要用到它们。建议今后做数据库时最好都加上这2项,不会没用的。此外,在保存表时ACCESS会询问是否建立一个住关键字,我们不需要它所以不必建立。还有:时间字段的"默认值"设成"now()",即去系统当时的时间。同时将索引项设成"有(允许重复)",含义:WEB上极有可能同时存取数据,所以允许重复,索引设成"有"可以加快排序速度。===>看看图 (2)建立递交表单add.htm: 源代码如下: <html> <head> <title>添加数据库记录</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#FFFFFF"> <p align="center"><font size="5">添加数据库记录</font></p> <form method="post" action="adddatabase.asp"> <div align="center"> <table width="46%" border="0"> <tr> <td width="28%"> <div align="right">公司名称: </div> </td> <td width="72%"> <input type="text" name="CompanyName"> </td> </tr> <tr> <td width="28%"> <div align="right">联络人姓名: </div> </td> <td width="72%"> <input type="text" name="CName"> </td> </tr> <tr> <td width="28%"> <div align="right">所在城市: </div> </td> <td width="72%"> <input type="text" name="City"> </td> </tr> <tr> <td width="28%"> <div align="right">电话号码:</div> </td> <td width="72%"> <input type="text" name="Tel"> </td> </tr> <tr> <td width="28%"> <div align="right"> </div> </td> <td width="72%"> <input type="submit" name="Submit" value="Submit"> <input type="reset" name="reset" value="Reset"> </td> </tr> </table> </div> </form> </body> </html>   这与普通的HTML没有任何区别,关键部分已经用黄色标记了。递交方法用POST,递交后处理的程序是adddatabase.asp(下一步就重点讨论它)。还有就是给每一个项目取一个名字(NAME,后面有用)。 (三)关键部分:建立与数据库的联系并将表单中收集到的信息添加到ACCESS数据库中。 ASP代码放在〈%和%>之间。 <% CompanyName = Request("CompanyName") CName = Request("CName") City = Request("City") Tel = Request("Tel")   以上,首先取得表单中填写的数据,使用ASP的Request对象非常容易可以实现数据的收集。双引号中的就是上一步建立的各个项目的名字(NAME)。所以今后为每个项目起名字是个好习惯,尽管有时候并不一定用得到。这样取得的数据就保存在等号坐侧的变量中了。 If CompanyName = "" Or CName = "" Or City = "" Or Tel = "" Then “Response.Write "<html><body><center><font size=5> 请将资料填写完整。</font></center></body></html>" Response.Redirect "error.htm" Response.End End If   这里是检测各个项目是否输入了东西,如果为空则不往下继续执行,显示错误信息。注意:你可以使用两种方法。我都列出了。 方法一:使用Response.Write方法写一个出错页面,类似于javascripts的document.write写法,只是ASP使用Response.write罢了。 方法二:使用Response.Redirect方法导向出错页面error.htm。我在方法一的代码前加上单引号表示注释。(ASP中表示注释用单引号“)。 set dbconnection=Server.CREATEOBJECT("ADODB.CONNECTION") DBPath = Server.MapPath("customer.mdb") dbconnection.Open "driver={Microsoft Access Driver (*.mdb)}; dbq=" & DBPath (1)建立Connection对象:dbconnection,建立一个连接(Connection)是数据库存取的开始。我们使用ASP的内建对象方    Server.Createobject建立与数据库的连接。ADODB是ASP的数据库存取组件,不必担心只要有ASP就有它了,是内置的。 (2)使用dbconnection.open方法打开数据库customer.mdb。driver参数    语法: driver={Microsoft Access Driver (*.mdb)}必须这么写。    告诉系统使用ACCESS ODBC驱动处理。dbq参数用来指定打开的数据库文件,它必须是完整的路径。例如    "c:\inetpub\wwwroot\customer\customer.mdb"    我们使用Server.MapPath的方法取得数据库的完整路径。 Set rs = Server.CreateObject("ADODB.Recordset")   建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接,要存取数据还应该再建立Recordset对象。 rs.Open "客户", dbconnection, adOpenDynamic, 3 打开数据库中的表"客户"(客户是表名)。 语法: rs.open 数据表名或SQL指令,已经建立的Connection对象(这里是dbconnection), 锁定类型 rs.AddNew rs("公司名称") = CompanyName rs("联络人姓名") = CName rs("所在城市") = City rs("电话号码") = Tel rs.Update   用AddNew向数据库请求添加数据。最后用Update写入。注意:等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段,应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。   Response.Write "<html><body><center><font size=5>   祝贺,您的数据已经添加进数据库了!<p>"   Response.Write "<a href=“viewdatabase.asp“>查看数据</a>"   Response.Write "</font></center></body></html>"  写入成功后显示祝贺信息并建立查看数据库记录的连接。 %> <html> <head> <title></title> </head> <body> </body> </html> (三)显示/查看数据库记录: <% set dbconnection=Server.CREATEOBJECT("ADODB.CONNECTION") DBPath = Server.MapPath("customer.mdb") dbconnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath 建立与数据库的连接,与上同。 SQL="select * from 客户 Order By 时间 DESC" SET CustomerList=dbconnection.EXECUTE(SQL) %>   建立SQL查询语句,表示从"客户"表中查询所有记录,Order By 时间DESC表示"按时间降序排序,"这样最后添加的信息再最上面显示。下面一句执行SQL查询并将结果返回给Recordset对象CustomerList。 <html> <body> <FONT SIZE="5"><center>数据库记录</center></FONT> <CENTER> <TABLE BORDER=1> <tr> <td>编号</td> <td>公司名称</td> <td>联络人姓名</td> <td>所在城市</td> <td>电话号码</td> </tr> <% DO WHILE NOT CustomerList.EOF %> 检测记录是否到了最后一条。EOF表示End of File。 <TR> <TD><% =CustomerList("客户编号") %></TD> <TD><% =CustomerList("公司名称") %></TD> <TD><% =CustomerList("联络人姓名") %></TD> <TD><% =CustomerList("所在城市") %></TD> <TD><% =CustomerList("电话号?quot %></TD> </TR> <% =CustomerList("客户编号") %>可以说是Response.Write方法的简写。 将"客户编号"字段内的数据写入TD标签间。 <% CustomerList.movenext loop %>   如果还没有到最后一条则指针移动到下一条。用Do While ... Loop循环逐一取得所有的记录。 </TABLE> </CENTER> <center> <input type="button" onclick="javascript:location.href=“add.htm“" value="添加数据"> </center> </BODY> </HTML>   缺陷:仅仅实现了最基本的功能。先不说其它功能,仅就数据的添加和查看功能来看,比较完美的还应该加入“分页功能”。否则数据大到一定程度显示全部数据基本上是不可能的。我将在下一期推出改进了的版本。

PS:最近在研究ASP+ACCESS,陆续收集一些资料共享.

[此贴子已经被作者于2004-9-15 18:05:16编辑过]

TA的精华主题

TA的得分主题

发表于 2004-11-16 16:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-17 16:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看不懂!我现在已经做好了一个access的查询窗口数据库,请问如何能将该查询窗体导出为asp,即在asp上就可以直接查询你所需信息!

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-10-23 20:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-9 23:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 05:42 , Processed in 0.021426 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表