ACCESS数据库的连接和读取记录.docx
ACCESS数据库的连接和读取记录ACCESS数据库的连接和读取记录 今天要学习的内容有一点枯燥,但是很重要。在这里大家不需要知道命令具体的运行情况,外面的很多书籍之所以不适合入门就是因为介绍了太多的理论知识,让初学者一头雾水。 下面开门见山,看两句话: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") %> 第一句话定义了一个adodb数据库连接组件,第二句连接了数据库,大家只要修改后面的数据库名字就可以了。是不是很简单? 下面再看三句: <% exec="select * from guestbook" set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,1 %> 这三句加在前面两句的后面,第一句:设置查询数据库的命令,select后面加的是字段,如果都要查询的话就用*,from后面再加上表的名字,我们前面建立的是不是一个gustbook表阿?第二句:定义一个记录集组件,所有搜索到的记录都放在这里面,第三句是打开这个记录集,exec就是前面定义的查询命令,conn就是前面定义的数据库连接组件,后面参数“1,1”,这是读取,后面讲到修改记录就把参数设置为1,3,好了接下来我们读取记录。 <table width="100%" border="0" cellspacing="0" cellpadding="0"> <%do while not rs.eof%><tr> <td><%=rs("name")%></td> <td><%=rs("tel")%></td> <td><%=rs("message")%></td> <td><%=rs("time")%></td> </tr><% rs.movenext loop %> </table> 在一个表格中,我们用4列分别显示了上次建立的表里面的四个字段,用do循环,not rs.eof的意思是条件为没有读到记录集的最后,rs.movenext的意思是显示完一条转到下面一条记录,<%=%>就等于<%response.write%>用于在html代码里面插入asp代码,主要用于显示变量。 学会数据库的基本操作1 数据库的基本操作无非是:查询记录,写入记录,删除记录,修改记录。今天我们先学习写入记录。 先建立一个表单: <form name="form1" method="post" action="example5.asp"> name <input type="text" name="name"><br> tel <input type="text" name="tel"><br> message <input type="text" name="message" value=""><br> <input type="submit" name="Submit" value="提交"> <input type="reset" name="Submit2" value="重置"> </form> 表单提交到example5.asp,下面是example5.asp的代码: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") name=request.form("name") tel=request.form("tel") message=request.form("message") exec="insert into guestbook(name,tel,message)values('"+name+"',"+tel+",'"+message+"')" conn.execute exec conn.close set conn=nothing response.write "记录添加成功!" %> 在这里前面两句我不说了,后面三句我也不说了,前面说过exec里面的是执行的命令,添加记录的比较繁,大家要仔细看。insert into后面加的是表的名字,后面的括号里面是需要添加的字段,不用添加的或者字段的内容就是默认值的可以省略。注意,这里的变量一定要和ACCESS里面的字段名对应,否则就会出错。values后面加的是传送过来的变量。exec是一个字符串,"insert into guestbook(name,tel,message)values('"是第一段,在ASP里面不能嵌双引号,所以可以用'代替双引号,放在双引号里面,连接两个变量用+或者&所以"',"又是一段,中间夹了一个name就是表单传来的变量,这样就可以在这个变量外面加两个'',表示是字符串了,后面的tel是数字型变量所以不需要外面包围'',大家慢慢分析这句话,如果用表单传来的数据代替变量名字的话这句话为:"insert into guestbook(name,tel,message)values('aaa',111,'bbb')"。 接下来的conn.execute 就是执行这个exec命令,最后别忘记把打开的数据库关闭,把定义的组件设置为空,这样可以返回资源。上次的读取为了简单,我没有关闭,大家可以补充上去: rs.close set rs=nothing conn.close set conn=nothing 记住,次序不可以颠倒! 学会数据库的基本操作2 在第四天中我们有这样一个程序: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") exec="select * from guestbook" set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,1 %> 我们查询的是所有的记录,但是我们要修改、删除记录的时候不可能是所有记录,所有我们要学习检索合适的记录。先看一条语句: a="张三" b=111 exec="select * from guestbook where name='"+a+"'and tel="+b where后面加上的是条件,与是and,或是or,我想=,<=,>=,<,>的含义大家都知道吧。这句话的意思就是搜索name是张三的,并且电话是111的记录。还有一点就是如果要搜索一个字段里面是不是包含一个字符串就可以这么写:where instr(name,a)也就是搜索name里面有a这个字符串的人。 我这里的a,b,是常量,大家可以让a,b是表单提交过来的变量,这样就可以做一个搜索了。 下面大家看看这个代码,理解一下: <form name="form1" method="post" action="example6.asp"> 搜索:<br> name = <input type="text" name="name"> and tel= <input type="text" name="tel"> <br> <input type="submit" name="Submit" value="提交"> <input type="reset" name="Submit2" value="重置"> </form> example6.asp: <% name=request.form("name") tel=request.form("tel") set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") exec="select * from guestbook where name='"+name+"' and tel="+tel set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,1 %> <html> <head> <title>无标题文档</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#FFFFFF" text="#000000"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <% do while not rs.eof %><tr> <td><%=rs("name")%></td> <td><%=rs("tel")%></td> <td><%=rs("message")%></td> <td><%=rs("time")%></td> </tr> <% rs.movenext loop %> </table> </body> </html> 学会数据库的基本操作3 开门见山,大家直接看程序。 exec="delete * from guestbook where id="&request.form("id") 上面这句话完成了删除记录的操作,不过锁定记录用了记录唯一的表示id,我们前面建立数据库的时候用的是系统给我们的主键,名字是编号,由于是中文的名字不是很方便,大家可以修改为id,不修改的话就是 exec="delete * from guestbook where 编号="&request.form("id") 下面我们看完整的代码:一个表单传给ASP文件一个ID,然后这个ASP文件就删除了这个ID。 <form name="form1" method="post" action="example7.asp"> delete: <input type="text" name="id"> <input type="submit" name="Submit" value="提交"> </form> example7.asp: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") exec="delete * from guestbook where 编号="&request.form("id") conn.execute exec %> 我在示例里面加了一个example72.asp,和example4.asp差不多,就是加了一个id字段,大家可以先运行这个文件看一下所有记录的ID和想删除记录的ID,删除记录以后也可以通过这个文件复查。等到最后一天,我们会把所有的这些东西整合的。大家就不会需要这么麻烦的操作。 example72.asp: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("example3.mdb") exec="select * from guestbook" set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,1 %> <html> <head> <title>无标题文档</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#FFFFFF" text="#000000"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <% do while not rs.eof %><tr> <td><%=rs("编号")%></td> <td><%=rs("name")%></td> <td><%=rs("tel")%></td> <td><%=rs("message")%></td> <td><%=rs("time")%></td> </tr> <% rs.movenext loop %> </table> </body> </html> 1. 学会数据库的基本操作4 先来看代码: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("test.mdb")/这不是以前的一个数据库,里面就aa,bb两个字段 exec="select * from test where id="&request.querystring("id") set rs=server.createobject("adodb.recordset") rs.open exec,conn %> <form name="form1" method="post" action="modifysave.asp"> <table width="748" border="0" cellspacing="0" cellpadding="0"> <tr> <td>aa</td> <td>bb</td> </tr> <tr> <td> <input type="text" name="aa" value="<%=rs("aa")%>"> </td> <td> <input type="text" name="bb" value="<%=rs("bb")%>"> <input type="submit" name="Submit" value="提交"> <input type="hidden" name="id" value="<%=request.querystring("id")%>"> </td> </tr> </table> </form> <% rs.close set rs=nothing conn.close set conn=nothing %> 大家到现在应该分析这个代码没有什么问题,这个代码的作用是接受前面一个页面的ID然后显示这条记录,文本框即是输入的地方也是显示的地方,如果需要修改的话修改以后按提交;如果不需要修改就可以直接按提交按钮。这里还有一个东西以前没有说,那就是隐藏的表单元素:hidden元素,里面的value是不用用户输入的,会随着表单一起提交,用于传递变量。下面是modifysave.asp的代码: <% set conn=server.createobject("adodb.connection") conn.open "driver=microsoft access driver (*.mdb);dbq="&server.mappath("test.mdb") exec="select * from test where id="&request.form("id") set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,3 rs("aa")=request.form("aa") rs("bb")=request.form("bb") rs.update rs.close set rs=nothing conn.close set conn=nothing %> 在这里,rs.open exec,conn,1,3后面的参数是1,3,这我以前提过,修改记录就要用1,3。实际上修改记录很容易看懂,记录集是rs,rs("aa")就是当前记录aa字段的东西,让它等于新的数据request.form("aa")当然就修改了,不过最后别忘记保存,那就是rs.update! 说到这里,记录的搜索,读取,修改,插入都说了,通过这最基本的东西就可以作出复杂的东西了,外面的大型数据库:新闻系统,留言簿就是字段多一点罢了。今天的示例中的代码是结合以前的数据库的,大家DOWN了以后回去调试分析一下。 由于IE浏览器升级禁用了alt+x快捷键,请用alt+q快捷键来快速进入写说说入口undefined 基本的SESSION组件,总结response,request组件。 首先,有会员系统的任何程序都会用到检测是不是用户已经登陆这个步骤。这就用到了SESSION组件,下面我们 看一个代码来说明。 <% session("islogin")="yes" %> 这句话的意思就是在session里面定义一个islogin字符串变量,值为"yes",直接可以赋值,不需要声明。是不是很简单? 如果我们做管理员登陆系统的话,首先是一段检测是不是管理员 if 是 then session("isadmin")=yes" else session("isadmin")="no" end if 在每一个需要管理员才能看的页面最前面加上 <% if not session("isaadmin")="yes"then response.redirect "login.htm" %> 这样一般用户就无法打开这个页面。解释一下response.redirect,它是转向的意思,后面的"login.htm"就是转向的文件。这样没有登陆的管理员是无法看到后面的内容的。 下面总结一下 response组件基本就是用到response.write ,response.redirect 分别是写字符串和转向的作用 request基本就是request.form,request.querystring 分别是接受post,get方法传来的信息 分页技术,总结 今天最后一天我们学习一下ASP里面稍微难一点地分页技术,毕竟当我们有N条记录的时候我们不可能把所有记录显示在一个页面里面吧。 <% exec="select * from test" set rs=server.createobject("adodb.recordset") rs.open exec,conn,1,1 rs.PageSize=3 pagecount=rs.PageCount page=int(request.QueryString ("page") if page<=0 then page=1 if request.QueryString("page")="" then page=1 rs.AbsolutePage=page %> rs.pagesize设置一个页面里面显示的记录数,pagecount是我们自己定义的一个变量,rs.pagecount是记录的个数,page也是我们自己定义的一个变量,我们下一页的链接可以设置为list.asp?page=<%=page+1%>,下一页的链接可以设置为list.asp?page=<%=page-1%>,这样当按下链接的时候调用页面自己,page这个变量就+1或者-1了,最后我们让rs.absolutepage为第page页就可以了。 if request.QueryString("page")="" then page=1,这句话的作用就是我们打开list.asp的时候没有跟随page变量,自动设置为page=1,防止出错,还有当我们if.then.放在一行的时候end if可以省略。是不是分页也不难? 下面说一种特殊情况: if page=1 and not page=pagecount,这个时候没有上一页,但是有下一页 elseif page=pagecount and not page=1,这个时候没有下一页,但是有上一页 elseif page<1,这个时候没有任何记录 elseif page>pagecount then,这个时候没有任何记录 elseif page=1 and page=pagecount,这个时候没有上一页,没有下一页 else,这个时候有上一页,也有下一页。 下面看一段显示1到n页,且每一个数字点击以后就出现这个数在代表的页面的代码,很常见哦。 <%for i=1 to pagecount%> <a href="list.asp?page=<%=i%>"><%=i%></a><%next%> for.next是循环从i=1开始,循环一次加1到pagecount为止。 最后我的实例里面包含了一个最简单的ASP程序,但是功能样样有,是ASP的精髓,每一个ASP大型程序都包含了它。 add.htm增加记录页面 add.asp增加记录操作 conn.asp数据库链接 del.asp删除记录操作 modify.asp修改记录页面 modifysave.asp修改记录操作 list.asp这个是这个程序的核心,通过这个页面实现记录的添加、修改、删除。 test.mdb数据库,里面有aa,bb两个字段:aa数字型只能接受数字,bb是字符型。