广州地铁运营事业总部计算机中心 周振喜 吕利
着计算机应用的发展,越来越多的数据被存储在中心机房的服务器上,由于一些管理人员的地理位置不在中心机房,于是带来了数据的远程管理问题。本文以广州地铁运营事业总部的图书资料管理系统为例,介绍利用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>” & rs.Fields(i).Name & “</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>”& rs.Fields(i).Value & “</td>
1”
2else
3Response.WRITE “
<td>” & “—” & “</td>
1”
2end if
3else
4linkstr = “
<a &="" bookidvalue="" href="”" linkstr="linkstr" “="" “_blank”="" “bookmodi.asp?bookid="”" “target="”" ““””="">”
alignstr = “<p &="" &“center”="" align="”&" “="" ““””="">”
if trim(rs.Fields(i).Value) <> “” then
Response.WRITE “<td>” & alignstr & linkstr & rs.Fields(i).Value & “</td></p></a>
1” & “
2”
3else
4Response.WRITE “
<td>” & alignstr & linkstr & “无” & “” & “</td>
1”
2end 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)