资源描述
WEB数据库技术与应用复习大纲及课后习题
P123
6.15 建立一种Access数据库DB1和数据表Student,它包括字段如下表所示:
字段名
数据类型
阐明
Stno
文本
学号
Stname
文本
姓名
Sex
文本
性别
Age
数字
年龄
Addr
文本
住址
E-mail
文本
电子邮件
输入5位学生模仿数据,运用Connection对象编写ASP程序来显示Student中内容。
解答:
建立数据库DB1和数据表Student:
点击“开始”,在子菜单中再点击“程序”,在下级菜单中点击“办公软件”,选取“Microsoft Access”打开,选取“空数据库”,选取好存储途径后命名为“DB1”。然后打开数据库,弹出如下对话框:
然后点击“设计”,弹出如下对话框:
输入各字段信息得到表如下所示:
然后关闭这个界面,另存为“student”表,而后向“student”表中输入数据,如下所示:
向数据库中添加信息,设计一种输入界面,用IE浏览器打开如下所示:
它代码如下所示:
<html>
<head><title>信息输入</title></head>
<body>
<form action="lx615_add.asp" method="post" >
<table align="center">
<TR><center><H2> 输入学生信息</H2></center></TR>
<TR>
<TD>学号:</TD>
<TD><INPUT type=text name="Stno" size=12></TD>
</TR>
<TR>
<TD>姓名:</TD>
<TD><INPUT type=text name="Stname" size=12></TD>
</TR>
<TR>
<TD>性别:</TD>
<TD><INPUT type=radio name="Sex" value="女"> 女
<INPUT type=radio name="Sex" value="男"> 男
</TD>
</TR>
<TR>
<TD>年龄:</TD>
<TD><INPUT type=text name="Age" size=6></TD>
</TR>
<TR>
<TD>住址:</TD>
<TD><INPUT type=text name="Addr" size=16></TD>
</TR>
<TR>
<TD>E-mail:</TD>
<TD><INPUT type=text name="Email" size=30></TD>
</TR>
<TR> <TD><INPUT type=submit name"insert" value="添加"></TD>
<TD> <INPUT type=reset value="重置"> </TD>
</TR>
</table>
</form>
</body>
</html>
向界面输入完信息之后,点击添加转入ASP解决程序:
(1)“condb.asp”程序如下:
<%
set conn=server.CreateObject("adodb.connection")
set urs=server.CreateObject("adodb.recordset")
set ers=server.CreateObject("adodb.recordset")
usqlstr="select * from user"
esqlstr="select * from emp"
connstr="driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("zhgdb.mdb") '与参数顺序无关
conn.open connstr
'将Recordset 输出成HTML “表格”
Sub list(rs)
' Part I:输出数据库“表头”
Response.Write "<CENTER><TABLE BORDER=1>"
Response.Write "<TR BGCOLOR=#00FFFF>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
' Part II:输出数据库“内容”
While Not rs.EOF
Response.Write "<TR>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
Wend
Response.Write "</TABLE></CENTER>"
End Sub
%>
(2)“lx615_add.asp”程序如下:
<%
stno=request.form("Stno")
stname=request.form("Stname")
sex=request.form("Sex")
age=request.form("Age")
addr=request.form("Addr")
email=request.form("Email")
set conn=server.CreateObject ("adodb.connection")
set rs=server.CreateObject ("ADODB.Recordset")
sqlstr="select * from student"
connstr="driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db1.mdb")
conn.open connstr
rs.open sqlstr,conn,1,2 '要添加数据,把参数改成了1,2
rs.addnew '告诉rs,要添加一种空行
rs("stno")=stno
rs("stname")=stname '给要添加行一种字段赋值
rs("sex")=sex
rs("age")=age '同上
rs("Addr")=addr '同上
rs("E-mail")=email
rs.update '告知rs,要把这个行写入数据库
response.Redirect("lx615.htm") '定向到信息输入界面
%>
(3)“lx615_list.asp”程序如下:
<%
'将Recordset 输出成HTML “表格”
Sub RsToTable( rs )
' Part I:输出数据库“表头”
Response.Write "<CENTER><TABLE BORDER=1>"
Response.Write "<TR BGCOLOR=#00FFFF>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
' Part II:输出数据库“内容”
While Not rs.EOF
Response.Write "<TR>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
Wend
Response.Write "</TABLE></CENTER>"
End Sub
set conn=server.CreateObject ("adodb.connection")
sqlstr="select * from student"
connstr="driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("db1.mdb") '与参数顺序无关
conn.open connstr
set rs=conn.execute(sqlstr)
if rs.eof and rs.bof then '如果数据指针同步指到记录集头部根尾部阐明记录集为空
response.write "没有可以显示数据" '打印“没有可以显示数据”
end if
RsToTable( rs )
%>
<!--
for i=0 to rs.fields.count-1 '输出字段名
response.write rs(i).name+" "
next
response.write "<br>" '换行
do until rs.EOF '循环直到记录集尾部为止
response.write rs("stno")+" " '显示一种行第一种字段值
response.write rs("stname")+" " '同上
response.write rs("sex")+" " '同上
response.write rs("age") '同上
response.write " "+rs("addr")+" " '同上
response.write rs("E-mail")+" " '同上
response.write "<br>" '一种行打印完毕,换行
rs.MoveNext '将数据指针移到下一种行
loop -->
<% '循环结束
rs.close
set rs=nothing
conn.close
%>
(4)“lx615.asp”(链接数据库)程序如下:
<%
set conn=server.CreateObject ("adodb.connection")
sqlstr="select * from student"
'1.使用ODBC驱动程序直接与数据库连接
'与Access数据库连接
connstr="driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("studentdb.mdb") &";PWD=bbb" '与参数顺序无关
conn.open connstr
'或者
'connstr="driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("studentdb.mdb") '与参数顺序无关
'conn.open connstr,"aaa","bbb"
'与SQL Server数据库连接
'connstr="driver={SQL Server};server=localhost;database=studentdb;UID=aaa;PWD=bbb"
'conn.open connstr
'2.使用OLE DB驱动程序直接与数据库连接
'与Access数据库连接
'connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("studentdb.mdb") &";Jet OLEDB:Database Password=bbb" '不能用PWD=bbb形式定义数据库密码
'conn.open connstr
'与SQL Server数据库连接
'connstr="Provider=SQLOLEDB.1;Data Source=localhost;database=studentdb;UID=aaa;PWD=bbb"
'conn.open connstr
'3.使用DSN与数据库连接
'ODBC数据源管理器”提供了三种DSN,分别为顾客DSN、系统DSN和文献DSN。
'其中,顾客DSN会把相应配备信息保存在Windows注册表中,但是只容许创立该DSN登录顾客使用。
'系统DSN同样将关于配备信息保存在系统注册表中,但是与顾客DSN不同是系统DSN容许所有登录服务器顾客使用。但必要使用账号和密码。
'与上述两种数据库DSN不同,文献DSN把详细配备信息保存在硬盘上某个详细文献中。
'文献DSN容许所有登录服务器顾客使用,并且虽然在没有任何顾客登录状况下,也可以提供对数据库DSN访问支持。
'此外,由于文献DSN被保存在硬盘文献里,因此可以以便地复制到其他机器中。这样,顾客可以不对系统注册表进行任何改动就可直接使用在其他机器上创立DSN。
'在以上三种数据库DSN中,建议顾客选取系统DSN或文献DSN,如果顾客更喜欢文献DSN可移植性,可以通过在NT系统下设定文献访问权限获得较高安全保障。
'使用顾客DSN连接数据库
'connstr="DSN=MyTb1;UID=aaa;PWD=bbb"
'conn.open connstr
'使用系统DSN连接数据库
'connstr="DSN=MyTb;UID=aaa;PWD=bbb"
'conn.open connstr
'使用文献DSN连接数据库
' 如果显示"错误类型:Microsoft OLE DB Provider for ODBC Drivers (0x80040E4D)
'[Microsoft][ODBC SQL Server Driver][SQL Server]顾客 'sa' 登录失败。"
' 错误解决:一方面用ODBC数据源配备你DSN属性,选取sql server验证并输入顾客名和密码.
' 然后用文本编辑器打开你文献DSN,修改其中UID属性,并添加PWD=你密码,即可.
'connstr="FILEDSN=" &server.mappath("MyTb3.dsn")
'conn.open connstr
'conn.Open
'conn.open connstr
'set rs=server.CreateObject ("ADODB.Recordset")
set rs=conn.execute(sqlstr)
if rs.eof and rs.bof then '如果数据指针同步指到记录集头部根尾部阐明记录集为空
response.write "没有可以显示数据" '打印“没有可以显示数据”
end if
for i=0 to rs.fields.count-1 '输出字段名
response.write rs(i).name+" "
next
response.write "<br>" '换行
do until rs.EOF '循环直到记录集尾部为止
response.write rs("sno")+" " '显示一种行第一种字段值
response.write rs("sname")+" " '同上
response.write rs("sex")+" " '同上
response.write rs("age") '同上
response.write " "+rs("addr")+" " '同上
response.write rs("E-mail")+" " '同上
response.write "<br>" '一种行打印完毕,换行
rs.MoveNext '将数据指针移到下一种行
loop '循环结束
rs.close
set rs=nothing
conn.close
%>
打开数据库DB1,显示如下界面:
输入密码:“bbb”,点击“拟定”,进入数据库,打开“student”表如下所示:
6.18 建立一种Access数据库DB2和数据表emp,它包括字段如下表所示:
字段名
数据类型
Ename
文本
Esex
文本
Eage
数字
Eaddr
文本
Etelno
文本
运用RecordSet组件编写ASP程序,通过表单输入四个职工模仿数据,并在浏览器上显示emp表中所有内容。
解答:
建立数据库DB1和数据表Student:
点击“开始”,在子菜单中再点击“程序”,在下级菜单中点击“办公软件”,选取“Microsoft Access”打开,选取“空数据库”,选取好存储途径后命名为“DB2”。然后打开数据库,弹出如下对话框:
然后点击“设计”,弹出如下对话框:
输入各字段信息得到表如下所示:
点击“关闭”,弹出对话框“另存为”,输入表名“emp”,点击“拟定”。
向数据库中添加信息,设计一种输入界面,用IE浏览器打开如下所示:
程序代码如下:<html>
<head><title>信息输入</title></head>
<body>
<form action="lx618.asp" method="post" >
<table align="center">
<TR><center><H2> 输入职工信息</H2></center></TR>
<TR>
<TD>姓名:</TD>
<TD><INPUT type=text name="Ename" size=12></TD>
</TR>
<TR>
<TD>性别:</TD>
<TD><INPUT type=radio name="Esex" value="女"> 女
<INPUT type=radio name="Esex" value="男"> 男
</TD>
</TR>
<TR>
<TD>年龄:</TD>
<TD><INPUT type=text name="Eage" size=6></TD>
</TR>
<TR>
<TD>住址:</TD>
<TD><INPUT type=text name="EAddr" size=16></TD>
</TR>
<TR>
<TD>电话:</TD>
<TD><INPUT type=text name="Etelno" size=10></TD>
</TR>
<TR> <TD><INPUT type=submit name"insert" value="添加"></TD>
<TD> <INPUT type=reset value="重置"> </TD>
</TR>
</table>
</form>
</body>
</html>
输入完信息之后,点击“添加”,转到解决界面:
<%
ename=request.form("Ename")
esex=request.form("Esex")
eage=request.form("Eage")
eaddr=request.form("EAddr")
etelno=request.form("Etelno")
set conn=server.CreateObject ("adodb.connection")
set rs=server.CreateObject ("ADODB.Recordset")
sqlstr="select * from emp"
connstr="driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.MapPath("db2.mdb")
conn.open connstr
rs.open sqlstr,conn,1,2 '要添加数据,把参数改成了1,2
rs.addnew '告诉rs,要添加一种空行
rs("Ename")=ename '给要添加行一种字段赋值
rs("Esex")=esex
rs("Eage")=eage '同上
rs("EAddr")=eaddr '同上
rs("Etelno")=etelno
rs.update '告知rs,要把这个行写入数据库
response.Redirect("lx618.html") '定向到信息输入界面
%>
添加完后,打开数据库“DB2”,再打开“emp”表,如下所示:
6.21 综合题
编写一种小型人事档案管理系统,使其功能具备:
(1)职工注册功能
(2)增长或减少一种职工记录
(3)修改职工记录
(4)查询(条件查询)职工记录
(5)退出系统功能
解答:
(1)打开IE浏览器,在地址栏中输入“http://localhost/”+子站点+“lx621_enter.html”进入登陆界面。
程序如下:
<HTML>
<HEAD><TITLE>顾客登录</TITLE></HEAD>
<BODY>
<FORM action="lx621_checklogin.asp" method="post" >
<TABLE align=center>
<TR>
<CENTER> <H2>输入登录信息</H2></CENTER>
</TR>
<TR>
<TD>顾客名:</TD>
<TD><INPUT type=text size=12 name="uname" value=""></TD>
</TR>
<TR>
<TD>密码:</TD>
<TD><INPUT type=password size=12 name="password" value=""> </TD>
</TR>
<TR>
<TD><INPUT type=submit value=登录 name="login"></TD>
<TD>
<INPUT type=submit value=注册 name="login">
<INPUT type=reset value=重置>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
进入输入登录信息界面后,输入对的顾客名和密码,按“登录”进入主界面,如果没有注册,按注册按纽进入“职工注册界面”。
登录界面如下图所示:
输入顾客名和密码,按“登录”,转到“lx621_checklogin.asp”解决。
“lx621_checklogin.asp”程序如下:
<!-- #include file=conndb.asp -->
<%
dim name,pwd,login,flag
name=request.form("uname")/*取表单相应值送给变量*/
pwd=request.form("password")
login=request.form("login")
urs.open usqlstr,conn,1,1/*只读取数据设立1,1;添加数据设立1,2;改写数据2,3*/
if login="登录" then
session("count")=session("count")+1
do while not urs.eof
if name=urs("uname") then
if pwd=urs("password") then
flag=1 '登录成功标志
exit do
else
flag=0
exit do
end if
else
urs.MoveNext
end if
loop
end if
if session("count")<=3 then
if urs.eof then
response.write "<center> 顾客名错误,请重新登录!<a href=lx621_enter.html>返回 </a></center>"
end if
if flag then
response.redirect "lx621_main.html"
else
response.write "<center> 密码错误,请重新登录! <a href=lx621_enter.html>返回 </a></center>"
end if
else
response.write "<center><font color=red> 非法顾客,无权使用本系统!</font></center>"
end if
if login="注册" then
response.redirect "lx621_login.html"
end if
%>
(2)登录“人事档案管理系统”(“lx621_main.html”)面
程序如下:
<html>
<head><title>人事档案管理系统</title></head>
<body>
<br>
<h1><center>人事档案管理系统</center></h1>
<hr size=2 width=65%>
<p><center>
<a href=lx621_login.html target=_blank >职工注册</a>
<a href=lx621_add.html target=_blank >添加一条职工记录</a>
<a href=lx621_delete.asp target=_blank >删除职工记录</a> </p>
<p>
<a href=lx621_update.asp target=_blank >修改职工信息</a>
<a href=lx621_select.asp target=_blank >查询职工信息</a>
<a href=lx621_list.asp target=_blank >显示职工信息</a>
<a href="lx621_exit.html" onclick="javascript:location.replace(this.href);
event.returnValue=false;" >退出系统</a>
</center>
</p>
</body>
</html>
(3)在“人事档案管理系统”界面中,点击“职工注册”,转入“职工注册”(“lx621_login.html”)界面
a. “lx621_login.html”,向界面中输入职工信息
程序如下:
<HTML>
<HEAD><TITLE>职工注册</TITLE>
</HEAD>
<BODY>
<FORM action="lx621_login.asp" method="post">
<TABLE align=center>
<TR>
<CENTER> <H2>输入注册信息</H2></CENTER>
</TR>
<TR>
<TD>职工号</TD>
<TD><INPUT type="text" size=12 name="eno" value=""> *必要填写</TD>
</TR>
<TR>
<TD>顾客名</TD>
<TD><INPUT type="text" size=12 name="uname" value=""> *必要填写</TD>
</TR>
<TR>
<TD>密码</TD>
<TD><INPUT type="password" size=12 name="password" > </TD>
</TR>
<TR>
<TD><INPUT type="submit" name="MyLogin" value="提交"></TD>
<TD><INPUT type="reset" value="重置"></TD>
</TR>
</TABLE>
</SCRIPT>
</FORM>
</BODY>
</HTML>
b.当信息输入完毕,按“提交”按钮转入“lx621_login.asp”界面进行解决。
程序如下:
<!-- #include file=conndb.asp -->
<%
sub eno_check_ers(num)
do while not ers.eof
if num<>ers("eno") then
ers.MoveNext
else
exit do
end if
loop
end sub
sub eno_check_urs(num)
urs.MoveFirst
do while not urs.eof
if num<>urs("eno") then
urs.MoveNext
else
exit do
end if
loop
end sub
sub uname_check(name)
if name="" then
response.write "<script language=javascript>alert('顾客名不能为空,请重新输入!')</script>"
response.write "<center><a href=lx621_login.html>返回</a></enter>"
else
urs.MoveFirst
do while not urs.eof
if name<>urs("uname") then
urs.MoveNext
else
exit do
end if
loop
if not urs.EOF then
response.write "<script language=javascript>alert('顾客名已经存在,请重新输入!')</script>"
response.write "<center><a href=lx621_login.html>返回</a></enter>"
end if
end if
end sub
dim eno,uname,pwd
eno=request.form("eno")
uname=request.form("uname")
pwd=request.form("password")
urs.open usqlstr,conn,1,2/*只读取数据设立1,1;添加数据设立1,2;改写数据2,3*/
ers.open esqlstr,conn,1,1
eno_check_ers eno
if ers.EOF then
response.write "<script language=javascript>alert('职工号为空或非本单位职工,请重新输入!')</script>"
response.write "<center><a href=lx621_login.html>返回</a></enter>"
else
eno_check_urs eno
if not urs.EOF then
response.write "<script language=javascript>alert('本职工已经注册,请重新输入!')</script>"
response.write "<center><a href=lx621_login.html>返回</a></enter>"
else
uname_check uname
end if
end if
if not ers.EOF and urs.EOF then
urs.addnew /*告诉urs,要添加一种空行*/
urs("eno")=eno /*给要添加行一种字段赋值*/
urs("uname")=uname
urs("password")=pwd /*同上*/
urs("logindate")=date /*同上*/
urs.update
response.write "<script language=javascript>alert('恭喜你,注册成功,请登录系统!')</script>"
response.write "<center><a href=lx621_enter.html>返回</a></center>"
end if
'ers.close
'set ers=nothing
%>
(4)在“人事档案管理系统”中,点击“添加一条职工记录”转到“输入职工信息”(“lx621_add.html”)界面
a.在“输入职工信息”界面输入职工信息
程序如下:
<html>
<head><title>添加职工信息</title></head>
<body>
<br>
<form action="lx621_add.asp" method="post" >
<table align="center">
展开阅读全文