数据库远程控制的ASP实现

广州地铁运营事业总部计算机中心 周振喜 吕利

着计算机应用的发展,越来越多的数据被存储在中心机房的服务器上,由于一些管理人员的地理位置不在中心机房,于是带来了数据的远程管理问题。本文以广州地铁运营事业总部的图书资料管理系统为例,介绍利用ASP技术实现这种数据库远程控制的具体方法和步骤。
问题的提出
广州地铁运营事业总部已经实现计算机内部联网,因为个人计算机在人们下班后都处于关机状态,为使员工可以24小时通过联网本地计算机查知图书资料的实时状态信息,因此将图书资料管理数据库放在计算机中心的服务器上,而不是放在资料室的个人计算机中。这样就带来了数据库的远程管理问题。
因为只有在仍有复本可借的情况下,员工才有必要去资料室办理借阅手续,并且如果已无复本可借而本人正急需使用时,还可以查询借阅人信息,以便同借阅人共同参阅或请其尽快归还以便借阅。所以,公司资料室图书资料管理数据库必须能向查询员工提供复本总量、剩余复本量、借阅人等实时状态信息。
为此,在运营事业总部内部网主页上给图书资料管理员提供一个对图书资料借阅情况进行管理的入口。当图书资料管理员进入时,进行身份验证,凭用户名和密码进入图书资料借阅情况管理页面。对图书资料管理员来说,对数据库的操作就像在本地计算机上一样。
操作该网络数据库时用到的对象主要有Request对象和ADO组件的Connection、Response、CreateObject对象,用到的方法主要是SQL语言的一些命令如Select、Update等。Request对象用来从地址栏中取回参数值;Connection对象用来建立和管理应用程序和ODBC数据库之间的连接,该对象具有各种属性和方法,可以使用它们打开和关闭数据库的连接,并且可以发出查询请求更新信息; SQL命令主要实现数据记录的查询、更新等操作。
下面是各主要功能模块的关键代码和解释。
用户登录(login.asp)

 1   
 2// 获取操作计算机的IP地址   
 3Dim ipaddr   
 4Ipaddr = Request.ServerVariables(“REMOTE_ADDR”)   
 5// 限制只有资料室的计算机(固定IP地址)才能进入图书资料数据库维护系统   
 6if Ipaddr<>“172.16.1.56” and paddr<>“172.16.1.58” and Ipaddr<>“172.16.3.61” then   
 7IpError=1   
 8end if   
 9// 要求输入用户名与密码,与上一条件构成双重保护,并将输入的用户名和密码与用户管理数据库中的用户名和密码对照,如果有此用户且密码正确,则继续执行   
10name=trim(request(“name”))   
11password=trim(request(“password”))   
12if name<>“” and password<>“” then   
13Set conn=Server.CreateObject(“ADODB.Connection”)   
14Set rs=Server.CreateObject(“adodb.recordset”)   
15sql=“select * from user where username=‘”&name&“’and passwd=‘”&password&“’”   
16Set rs=conn.execute(sql)   
17……   
18if not(rs.eof) then   
19Session(“pass”)=1   
20Session(“user”)=name   
21Response.Redirect (“bmanage.asp”)   
22……   
23end if   
24……   
25end if   

创建用户查询界面(bmanage.asp)
//保证只有通过登录的人才能进入

1   
2if session(“pass”)<>1 then   
3response.redirect (“login.asp”)   
4end if   

// 创建表单,给出几个类别(分类号、借阅情况、题名、出版者、著编者),供自选查询条件

 1<form action="“inq_modi.asp”" name="“form_choice”">
 2<input name="“choice”" type="“radio”" value="“type”"/>分类号   
 3<input checked="" name="“choice”" type="“radio”" value="“borrow”"/>借阅情况   
 4<input name="“choice”" type="“radio”" value="“title”"/>题名   
 5<input name="“choice”" type="“radio”" value="“press”"/>出版者   
 6<input name="“choice”" type="“radio”" value="“author”"/>著编者   
 7<b>包含: </b>
 8<input =include="" ```”="" maxlength="“30”" name="“include”" type="“text”" value="“```"/>
 9<input name="“Submit”" type="“submit”" value="“" ”="" 搜索=""/>
10</form>

执行查询操作(inq_modi.asp)

 1   
 2//利用Request传回的值到数据库中查询相应的记录   
 3choice=Request(“choice”)   
 4include=Request(“include”)   
 5sql = “Select * From 图书目录”   
 6Select Case choice   
 7case “borrow”   
 8sql = sql & “Where 借阅情况 like ‘%” & include & “%’”   
 9titlestr=“借阅情况”   
10……   
11End Select   
12titlestr = titlestr & “ 包含 ” & include & “图书目录”   
13sql = sql & “Order by 分类号”   

// 调用RsToModi.asp显示查询结果

1   
2Set conn = Server.CreateObject(“ADODB.Connection”)   
3conn.open “driver={Microsoft Access Driver (*.mdb)}; dbq=”& Server.MapPath(“Books.mdb”)   
4Set rs = conn.Execute(sql)   
5RsToModiTable rs   

显示查询结果(RsToModi.asp)

1   
2Sub RsToModiTable( rs )   
3’Part I 取得图书序号和借阅情况字段值   
4For i=0 to rs.Fields.Count-1   
5Response.WRITE “

<td>” &amp; rs.Fields(i).Name &amp; “</td>

 1 2if rs.Fields(i).Name = “序号” then   
 3bookidfield= i   
 4end if   
 5if rs.Fields(i).Name = “借阅情况” then   
 6linkfield= i   
 7end if   
 8Next   
 9’Part Ⅱ 创建借阅情况链接,调用借阅情况修改页面   
10While Not rs.EOF   
11For i=0 to rs.Fields.Count-1   
12if i <> linkfield then   
13if i = bookidfield then   
14bookidvalue = rs.Fields(i).Value   
15end if   
16if trim(rs.Fields(i).Value) <> “” then   
17Response.WRITE “

<td>”&amp; rs.Fields(i).Value &amp; “</td>

12else   
3Response.WRITE “

<td>” &amp; “—” &amp; “</td>

12end if   
3else   
4linkstr = “

<a &="" bookidvalue="" href="”" linkstr="linkstr" “="" “_blank”="" “bookmodi.asp?bookid="”" “target="”" ““””="">”
alignstr = “<p &="" &“center”="" align="”&amp;" “="" ““””="">”
if trim(rs.Fields(i).Value) &lt;&gt; “” then
Response.WRITE “<td>” &amp; alignstr &amp; linkstr &amp; rs.Fields(i).Value &amp; “</td></p></a>

1” & “
23else   
4Response.WRITE “

<td>” &amp; alignstr &amp; linkstr &amp; “无” &amp; “” &amp; “</td>

12end if   
3end if   
4Next   
5rs.MoveNext   
6Wend   
7End Sub   

借阅情况修改页面(BookModi.asp)
// 将Request传递来的序号所对应的记录显示在页面上,对册数、借阅情况、借阅日期字段进行修改

1   
2BookID=Request(“BookID”)   
3DbPath = Server.MapPath(“Books.mdb”)   
4Set conn = Server.CreateObject(“ADODB.Connection”)   
5conn.open “driver={Microsoft Access Driver (*.mdb)}; dbq=” & DbPath   
6sql = “Select * From 图书目录”   
7sql = sql & “ Where 序号 =” & BookID   
8Set rs = conn.Execute(sql)   

// 创建表单,对册数、借阅情况、借阅日期字段进行修改

 1<form =bookid="" ```”="" action="“BookUpdate." asp?bookid="```" method="“POST”">
 2<td height="“35”" width="“17”">序号</td>   
 3……   
 4<td height="“80”" width="“17”">```
 5=rs(“序号”)
 6```</td>   
 7……   
 8<input =rs(“册数”)="" ```="" name="“BNumber”" size="“3”" type="Text" value="```"/>
 9<input =rs(“借阅情况”)="" ```="" name="“BPerson”Value=```" type="Text"/>
10<input =rs(“借阅日期”)="" ```="" name="“BDate”" type="Text" value="```"/>
11<p><input name="“MODIFY”" type="“submit”" value="“" ”="" 修改=""/>
12<input name="“EXIT”" onclick="“window.close()”" type="“button”" value="“" ”="" 退出=""/>
13</p>
14</form>

保存修改结果(BookUpdate.asp)

 1   
 2BookID=Request(“BookID”)   
 3DbPath = SERVER.MapPath(“Books.mdb”)   
 4Set conn = Server.CreateObject(“ADODB.Connection”)   
 5conn.open “driver={Microsoft Access Driver (*.mdb)}; dbq=” & DbPath   
 6B_number = Request(“BNumber”)   
 7B_person = Request(“BPerson”)   
 8B_date = Request(“BDate”)   
 9if len(B_number) = 0 then   
10B_number = 1   
11end if   
12if len(B_person) = 0 then   
13B_person = “ ”   
14end if   
15if len(B_date) = 0 then   
16B_date = “ ”   
17end if   
18Set rs=SERVER.CreateObject(“ADODB.Recordset”)   
19rs.Open “图书目录”, conn , adOpenDynamic, adLockPessimistic   
20sql = “Update 图书目录”   
21sql = sql & “ Set 借阅情况 = ” & “‘” & B_person & “’”   
22sql = sql & “ , 借阅日期 = ” & “‘” & B_date & “’”   
23sql = sql & “ , 册数 = ”& “‘” & B_number & “’”   
24sql = sql & “Where 序号 = ” & BookID   
25Set rs = conn.Execute(sql)   
Published At
Categories with Web编程
Tagged with
comments powered by Disqus