日期:2014-02-11  浏览次数:20920 次

前言:很多网页设计者可能都面临过这样一个问题:设计一个表单让使用者输入之后,将使用者所输入的内容建立到数据库中,可是一但使用者输入的内容有不合型态(数字字段却输入文字)的情况或者使用者所输入的内容不符合系统管理者的要求时,却无法提醒使用者哪里出错以便让使用者重新填写表单,一般人或许会使用浏览器的后退按钮回到表单页然后将填错的资料重填,但是如果加入数据库的程序与表单内容放在同一个程序之内的话,那使用者就没有机会回上一页重填资料了。大多数人通常是用Session解决这个问题,但这又就带来了一个问题:Session占系统资源很大!解决上述问题有两种方法:一种是通过JavaScript使用前端控制,另一种是通过ASP子程序来作服务器端控制。下面我就是介绍的如何使用通过ASP子程序来作服务器端控制来完成。在数据库的使用上也跟以往不同,我这一次使用的是SQL 7.0为大家作介绍,下面程序所连结的数据库是SQL 7.0中所内建的Pubs数据库,使用者不必重新建立,只要将预存程序建立在Pubs数据库上即可。
附注:下面的程序是我在为一个超市设计网页时编写的,由于这里主要是介绍编写技巧,所以我不再进行编整,不过读者可以根据需要对里面的内容进行修改。
BookStore.asp
<%@ TRANSACTION=Required LANGUAGE="VBScript"%>
<%Response.Buffer=True%>
<!-- #include file=adovbs.inc -->
<%
注解:建立数据库连结:
SET Conn = Server.CreateObject("ADODB.Connection")
注解:利用数据库连结的ConnectionString属性指定欲连结的数据库信息,在这里我们将数据库驱动程序设为SQL Server,数据库服务器名称为Jackal,数据库为Pubs数据库:
Conn.ConnectionString = "driver={SQL Server}" & _
";SERVER=Jackal;UID=sa;PWD=;DATABASE=pubs"
注解:以open方法开启数据库:
Conn.Open
注解:建立Command对象;以ActiveConnection属性来连结数据库连结对象Conn:
Set Cmd = Server.CreateObject("ADODB.Command")
Cmd.ActiveConnection = Conn
注解:建立资料集合对象;SET rsForm = Server.CreateObject("ADODB.RecordSet"),定义strFeedBack, strTitle字符串变量,分别代表表单错误信息和数据库错误信息:
DIM strFeedBack, strTitle
注解:定义表单变量:
DIM stor_id, stor_name, stor_address, city, state, zip
%>
<html>
<head>
<script RUNAT="Server" LANGUAGE="VBScript">
下面就要编写RetrieveForm子程序了,其作用是接收由表单所提供的资料:
SUB RetrieveForm(stor_id)  
注解:搭配 Cmd.ActiveConnection = Conn使用,并将commamndtype属性设定为 adCmdStoredProc,表示commandtext为预存程序:
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "proc_retrieve_store"
注解:以Parameters.Append的方法加入一个参数"stor_id"以作为预存程序的输入参数之用:
Cmd.Parameters.Append cmd.CreateParameter("stor_id",adChar, adParamInput,4,stor_id)
注解:执行预存程序:
SET rsForm = Cmd.Execute  
注解:删除stor_id参数:
Cmd.Parameters.Delete(0)
END SUB
完成上一步骤,下一步就是编写SetFromForm子程序,其作用是将使用者之前所输入的表单值回写至表单:
SUB SetFromForm
注解:取出表单中各字段值并传给指定变量:
stor_id = Request.Form("stor_id")
stor_name = Request.Form("stor_name")
stor_address = Request.Form("stor_address")
city = Request.Form("city")
state = Request.Form("state")
zip = Request.Form("zip")
END SUB
(注解:从资料集合对象中将值取出并显示在表单中, strName 代表表单名称, intSize代表表单大小, intMax代表表单所允许输入最大字段长度, Server.HTMLEncode(strValue) 代表表单内容。)
Sub ShowText(strName, strValue, intSize, intMax)
Response.Write "<INPUT TYPE=Text NAME=" & strName & _
" ID=" & strName & _
" onFocus=select()" & _
" SIZE=" & intSize & _
" MAXLENGTH=" & intMax & _
" VALUE=" & chr(34) & Server.HTMLEncode(strValue) & chr(34) & ">"
End Sub  
下面是EditForm子程序,其作用是更新数据区段:
Function EditForm()
注解:定义错误信息字符串变量:
DIM strErr
strErr = ""
IF NOT Len(Request("stor_id")) > 0 THEN
strErr = strErr & "请输入编号.<BR>"
END IF
IF NOT Len(Request("stor_name")) > 0 THEN
strErr = strErr & "请输入名称.<BR>"
END IF
IF NOT Len(Request("stor_address")) > 0 THEN
strErr = strErr & "请输入地址.<BR>"
END IF
IF NOT Len(Request("city")) > 0 THEN
strErr = strErr & "请输入城市名.<BR>"
END IF
IF NOT Len(Request("state")) > 0 THEN
strErr = strErr & "请输入省名.<BR>"
END IF
注解:将表单错误信息传回EditForm:
EditForm = strErr
End Function
下面是InsertForm子程序:
Function InsertForm()
DIM strSQL
strSQL = "proc_insert_store"
注解:以Command对象的CommandText 属性指定对数据库下达的命令是通过proc_insert_store这个预存程序来完成:
Cmd.CommandText = strSQL
注解:以Command对象的CommandType 属性决定对数据库请求的型态是为预存程序:
Cmd.CommandType = adCmdStoredProc
注解:呼叫SetParms子程序:
SetParms
注解:以Command对象的Execute方法执行预存程序:
Cmd.Execute
注解:将SetParms子程序中所附加的msg参数传回给strMsg错误信息字符串变量:
strMsg = cmd.Parameters("msg")