技术文章 > 利用ASP编写动态回复表单

利用ASP编写动态回复表单

2018-05-22 16:07

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
前言:很多网页设计者可能都面临过这样一个问题:设计一个表单让使用者输入之后,将使用者所输入的内容建立到数据库中,可是一但使用者输入的内容有不合型态(数字字段却输入文字)的情况或者使用者所输入的内容不符合系统管理者的要求时,却无法提醒使用者哪里出错以便让使用者重新填写表单,一般人或许会使用浏览器的后退按钮回到表单页然后将填错的资料重填,但是如果加入数据库的程序与表单内容放在同一个程序之内的话,那使用者就没有机会回上一页重填资料了。大多数人通常是用Session解决这个问题,但这又就带来了一个问题:Session占系统资源很大!解决上述问题有两种方法:一种是通过JavaScript使用前端控制,另一种是通过ASP子程序来作服务器端控制。下面我就是介绍的如何使用通过ASP子程序来作服务器端控制来完成。在数据库的使用上也跟以往不同,我这一次使用的是SQL 7.0为大家作介绍,下面程序所连结的数据库是SQL 7.0中所内建的Pubs数据库,使用者不必重新建立,只要将预存程序建立在Pubs数据库上即可。
附注:下面的程序是我在为一个超市设计网页时编写的,由于这里主要是介绍编写技巧,所以我不再进行编整,不过读者可以根据需要对里面的内容进行修改。
BookStore.asp
<%@ TRANSACTION=Required LANGUAGE="VBScript"%>
<%Response.Buffer=True%>

<%
注解:建立数据库连结:
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
%>




设定新商店


<%
(注解:决定表单内容,表单传送目的为同一个档案。)
%>
" METHOD="post" >
<%
注解:以表单按钮决定该执行更新加入或删除资料
SELECT CASE Request("Process")
CASE "加入资料"
DIM intNewID
注解:使用者填完表单先呼叫SetFromForm子程序取得表单内容先将表单错误信息传回:
SetFromForm
strStatus = EditForm
注解:如果没有发生表单错误就呼叫InsertForm子程序将资料写入数据库:
IF strStatus = "" THEN
注解:更新数据库设定,显示变量,重新显示表单输入值,并让使用者知道运作情形.
strStatus = InsertForm
intNewID = Cmd.Parameters("RETURN_VALUE")
IF Len(Trim(strStatus)) = 0 THEN
strFeedBack = "名称已建立至数据库.
"
ELSE
strFeedBack = strStatus
END IF
ELSE
注解:设定显示变量,重新显示表单输入值,并让使用者知道运作情形.
strFeedBack = strStatus
END IF
strTitle = "新名称设定完成"
CASE "更新资料"
注解:使用者填完表单先呼叫 SetFromForm子程序取得表单内容先将表单错误信息传回:
SetFromForm
strStatus = EditForm
IF strStatus = "" THEN
strStatus = UpdateForm (stor_id)
IF Len(Trim(strStatus)) = 0 THEN
strFeedBack = "名称资料已经更新.
"
ELSE
strFeedBack = strStatus
END IF
ELSE
strFeedBack = strStatus
END IF
strTitle = "名称资料更新完成"
CASE "删除资料"
注解:先呼叫SetFromForm子程序取得表单内容再将表单错误信息传回:
SetFromForm
注解:呼叫DeleteForm将子程序并将数据库中stor_id字段值等于表单名称为stor_id之值的资料删除并将数据库错误信息传回:
strStatus = DeleteForm (Request("stor_id"))
IF strStatus = "" THEN
注解:数据库运作无误:
strFeedback = "名称资料已经删除.
"
ELSE
注解:设定显示参数并重新显示表单内容让使用者了解问题所在
strFeedback = strStatus
END IF
strTitle = "名称删除完成"
CASE ELSE
strTitle = "名称维护与管理"
strFeedback = "不被认可的维护管理程序: " & Request("Process") & ".

"
END SELECT
注解:显示表单错误信息和数据库错误信息:
Response.Write "

" & strTitle & "


"
Response.Write "" & strFeedBack & "
"
注解:如果管理程序不为删除程序则显示表单:
IF Request("Process") <> "删除资料" THEN
%>


























编号:

<%ShowText "stor_id", stor_id, 4, 4 %>

名称:

<%ShowText "stor_name", stor_name, 40, 40 %>

通信地址:

<%ShowText "stor_address", stor_address, 40, 40 %>

城市:

<%ShowText "city", city, 20, 20 %>

省:

<%ShowText "state", state, 2, 2%>

邮政编码:

<%ShowText "zip", zip, 5, 5 %>






<% IF IsNumeric(stor_id) AND stor_id > 0 THEN
注解:如果使用者已经将资料加入数据库就显示更新资料和删除资料的按钮
%>


<% ELSE %>

<% END IF %>



<%
END IF
注解:释放数据库资源,如果数据库集合还处于连结状态则将数据库连结关闭:
IF rsForm.State = adStateOpen THEN
rsForm.Close
SET rsForm = Nothing
END IF
Conn.Close
Set Conn = Nothing
Set Cmd = Nothing
%>



小结:
经过上面几步,所有的部分就算是基本完成,大家可以拿来用了。其实上面的程序并不算太复杂,如果朋友你没有使用SQL 的经验,对一些SQL的ADO对象与属性和方法可能感觉很陌生,不过在稳定性和安全性以及扩充性来讲,SQL比Access 2000强大的太多了,如果你对Access 2000在Web Server上的应用已经有了一定的基础,我建议你学习SQL。希望这些对你有所帮助。