ASP进阶教程Ⅴ:留言簿在线留言编辑
类别: ASP教程
在第六章的第一部分我们已经简单地介绍了一下Command对象所提供的属性和方法以及它们的相应功能。而为了更方便大家读懂如何给留言簿添加在线留言编辑功能的程序,我将先进一步再解释一下Command对象所提供的属性及Recordset对象的Open函数。
Command对象所提供的属性:
ACTIVECONNECTION:ActiveConnection属性可以用来设定该Command对象要依赖哪一个Connection通道来与数据库互相沟通,因此该属性可以直接传入一已与数据库建立链接的Connection对象或是更方便的使用数据库链接字符串取代。
COMMANDTEXT:CommandText属性允许三种类型的数据查询信息,包括一般的SQL语句、数据库表单名称以及子程序名称,而决定是哪一种数据查询信息则是由另一属性CommandType来设定。
COMMANDTIMEOUT:有时候网络的状况不好造成网络响应缓慢,这时候Command对象的Execute方法在执行后会因此而造成服务器端数据库无法正常响应,从而造成停止运行,处于等待状态,遇到这种情况我们可以利用CommandTimeout属性来设定从开始执行数据查询(执行Execute)后允许继续执行的最长时间。CommandTimeout的默认值来30秒。
COMMANDTYPE:可以用CommandType属性来指定数据查询信息的类型见下表:
名称值 整数值 功能
adcmdtext 1 指定数据查询信息的类型为SQL语句
adcmdtable 2 指定数据查询信息的类型为数据库表名称
adcmdstoredproc 4 指定数据查询信息的类型为子程序名称
adcmdunknown 8 未知的请求信息类型
PREPARED:如果服务器的数据库链接控制(例如ODBC)提供数据查询信息先行编译的功能,那么我们可以把Prepared属性设为true,如此一来可以加快数据库查询的速度。
Recordset对象的Open函数:
Rs.Open 数据表名称或SQL指令,Connection对象,Recordset类型,锁定类型
参数一:若指定成数据表名称,则打开整个数据表,若指定成Select指令,则所建立的Recordset对象是Select指令选取的数据记录的结果。
参数二:传入某一个已打开的数据库的Connection对象。
参数三:是Recordset类型,它含有下表的四种设置值:
Recordset类型的设置值 意义
AdOpenForwardOnly(=0) 只读,且当前数据记录只能向下移动
AdOpenStatic(=3) 只读,当前数据记录可自由移动
AdOpenKeyset(=1) 可读写,当前数据记录可自由移动
AdOpenDynamic(=2) 可读写,当前数据记录可自由移动
AdOpenKeyset和AdOpenDynamic的差别只表现在多人共用数据库时,若以AdOpenKeyset
模式打开数据表,则无法看到其他人新增的数据记录(除非重新启动),如果是以AdOpenDynamic模式打开数据库,则可以看到其他人新增的数据记录。
参数四:是锁定类型,它同样含有四种设置值,见下表:
锁定类型的设置值 意义
adLockReadOnly(=1) 默认值,用来打开只读的数据记录
adLockPessimistic(=2) 悲观锁定
adLockOptimistic(=3) 乐观锁定
adLockBatchOptimistic(=4) 批次乐观锁定
如何给留言簿添加在线留言编辑的功能呢?综述起来我们大致可以将其分成以下三个步骤来实现。
步骤一:首先用第八章中所介绍的给每条留言的上面添加一个“删除留言”按钮的方法,在每条留言的上面再加添一个“留言编辑”的按钮。
步骤二:实现当我们单击“留言编辑”按钮时,从留言数据库中选取对应的留言记录以供“留言编辑”,见下图:
很明显,这里的关键所在就是:如何才能从留言数据库中选取对应的留言记录以供我们编辑?实现该功能的程序被我存成了文件Edit.asp,请看下面:
......
< %
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set cmd = Server.CreateObject("ADODB.Command")
Set CmdEdit = Server.CreateObject("ADODB.Recordset")
cmd.CommandText = "SELECT guestbook.* FROM guestbook WHERE (ID = " & Request.QueryString("id") & ")"
cmd.CommandType = 1
Set cmd.ActiveConnection = Conn
CmdEdit.Open cmd, , 3, 1
%>
\'选取ID = " & Request.QueryString("id") & ")"的留言记录,因为该程序只是打开留言,并不需要更改留言内容,所以这里设定该留言记录为只读,以免破坏数据。其它参数的意义请大家参照上一章节的资料,我在这里不再重复说明。
< % memo = CmdEdit("留言") %>
< % memo = Replace(memo,"< br>",str) %>
\'将留言数据表单中“留言”字段的数据赋予留言编辑页面的memo文本域,并将数据转换成字符串,以便对其进行编辑。
......
< input type="TEXT" name="Name" size="20" value="< %=CmdEdit("姓名")%>">
......
< input type="TEXT" name="Tel" size="20" value="< %=CmdEdit("电话")%>">
......
< input type="TEXT" name="Subject" size="55" value="< %=CmdEdit("主题")%>">
......
< textarea name="Memo" rows="6" cols="60">< %= memo %>< /textarea>
......
< input type="hidden" name="ID" value="< %=CmdEdit("ID")%>">
< input type="submit" value="保存留言">
\'分别将留言表单中的“ 姓名”、“电话”、“主题”和“留言”各字段的数据赋予各“留言编辑”页面中对应的文本域。
......
步骤三:保存编辑后的留言(Editsave.asp)。
< %@ LANGUAGE="VBSCRIPT" %>
< % Response.Buffer = "True" %>
\'设置将Web页面输出至缓存区。当一个Web页面输出至缓存区时,除非当前页的所有服务器端文件都已被处理完毕或者是程序中调用了Flush或End方法,服务器才将响应客户端浏览器。因此Response.Buffer一般都是放在.asp文件的第一行,放在其他位置可能会造成执行的错误。
< % ID = Request.Form("ID") %>
\'获取被编辑留言的“ID”序列号。
......
< %
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set cmd = Server.CreateObject("ADODB.Command")
Set CmdEdit = Server.CreateObject("ADODB.Recordset")
cmd.CommandText = "SELECT guestbook.* FROM guestbook WHERE (ID = " & ID & ")"
cmd.CommandType = 1
Set cmd.ActiveConnection = Conn
CmdEdit.Open cmd, , 1, 3
%>
< % NAME = Request.Form("NAME")
if NAME="" THEN
CmdEdit.Fields("姓名") = NULL
Else
CmdEdit.Fields("姓名") = NAME
END IF %>
< % EMAIL = Request.Form("EMAIL")
if EMAIL="" THEN
CmdEdit.Fields("EMAIL") = NULL
Else
CmdEdit.Fields("EMAIL") = EMAIL
END IF %>
< % memo = Request.Form("memo")
if memo="" THEN
CmdEdit.Fields("留言") = NULL
Else
memo = Replace(memo,str,"< br>")
memo = Replace(memo,vbCr,"< br>")
CmdEdit.Fields("留言") = memo
END IF %>
< % TEL = Request.Form("TEL")
if TEL="" THEN
CmdEdit.Fields("电话") = NULL
Else
CmdEdit.Fields("电话") = TEL
END IF %>
\'将编辑留言页面表单中对应文本域中的内容存储到留言表单中相对应的字段下。
< % CmdEdit.Update
CmdEdit.Close %>
< % Sub delaySecond(DelaySeconds)
SecCount = 0
Sec2 = 0
While SecCount < DelaySeconds + 1
Sec1 = Second(Time())
If Sec1 <> Sec2 Then
Sec2 = Second(Time())
SecCount = SecCount + 1
End If
Wend
End Sub %>
< % delaySecond(2) %>
< % Response.Redirect "page2.asp" %>
Command对象所提供的属性:
ACTIVECONNECTION:ActiveConnection属性可以用来设定该Command对象要依赖哪一个Connection通道来与数据库互相沟通,因此该属性可以直接传入一已与数据库建立链接的Connection对象或是更方便的使用数据库链接字符串取代。
COMMANDTEXT:CommandText属性允许三种类型的数据查询信息,包括一般的SQL语句、数据库表单名称以及子程序名称,而决定是哪一种数据查询信息则是由另一属性CommandType来设定。
COMMANDTIMEOUT:有时候网络的状况不好造成网络响应缓慢,这时候Command对象的Execute方法在执行后会因此而造成服务器端数据库无法正常响应,从而造成停止运行,处于等待状态,遇到这种情况我们可以利用CommandTimeout属性来设定从开始执行数据查询(执行Execute)后允许继续执行的最长时间。CommandTimeout的默认值来30秒。
COMMANDTYPE:可以用CommandType属性来指定数据查询信息的类型见下表:
名称值 整数值 功能
adcmdtext 1 指定数据查询信息的类型为SQL语句
adcmdtable 2 指定数据查询信息的类型为数据库表名称
adcmdstoredproc 4 指定数据查询信息的类型为子程序名称
adcmdunknown 8 未知的请求信息类型
PREPARED:如果服务器的数据库链接控制(例如ODBC)提供数据查询信息先行编译的功能,那么我们可以把Prepared属性设为true,如此一来可以加快数据库查询的速度。
Recordset对象的Open函数:
Rs.Open 数据表名称或SQL指令,Connection对象,Recordset类型,锁定类型
参数一:若指定成数据表名称,则打开整个数据表,若指定成Select指令,则所建立的Recordset对象是Select指令选取的数据记录的结果。
参数二:传入某一个已打开的数据库的Connection对象。
参数三:是Recordset类型,它含有下表的四种设置值:
Recordset类型的设置值 意义
AdOpenForwardOnly(=0) 只读,且当前数据记录只能向下移动
AdOpenStatic(=3) 只读,当前数据记录可自由移动
AdOpenKeyset(=1) 可读写,当前数据记录可自由移动
AdOpenDynamic(=2) 可读写,当前数据记录可自由移动
AdOpenKeyset和AdOpenDynamic的差别只表现在多人共用数据库时,若以AdOpenKeyset
模式打开数据表,则无法看到其他人新增的数据记录(除非重新启动),如果是以AdOpenDynamic模式打开数据库,则可以看到其他人新增的数据记录。
参数四:是锁定类型,它同样含有四种设置值,见下表:
锁定类型的设置值 意义
adLockReadOnly(=1) 默认值,用来打开只读的数据记录
adLockPessimistic(=2) 悲观锁定
adLockOptimistic(=3) 乐观锁定
adLockBatchOptimistic(=4) 批次乐观锁定
如何给留言簿添加在线留言编辑的功能呢?综述起来我们大致可以将其分成以下三个步骤来实现。
步骤一:首先用第八章中所介绍的给每条留言的上面添加一个“删除留言”按钮的方法,在每条留言的上面再加添一个“留言编辑”的按钮。
步骤二:实现当我们单击“留言编辑”按钮时,从留言数据库中选取对应的留言记录以供“留言编辑”,见下图:
很明显,这里的关键所在就是:如何才能从留言数据库中选取对应的留言记录以供我们编辑?实现该功能的程序被我存成了文件Edit.asp,请看下面:
......
< %
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set cmd = Server.CreateObject("ADODB.Command")
Set CmdEdit = Server.CreateObject("ADODB.Recordset")
cmd.CommandText = "SELECT guestbook.* FROM guestbook WHERE (ID = " & Request.QueryString("id") & ")"
cmd.CommandType = 1
Set cmd.ActiveConnection = Conn
CmdEdit.Open cmd, , 3, 1
%>
\'选取ID = " & Request.QueryString("id") & ")"的留言记录,因为该程序只是打开留言,并不需要更改留言内容,所以这里设定该留言记录为只读,以免破坏数据。其它参数的意义请大家参照上一章节的资料,我在这里不再重复说明。
< % memo = CmdEdit("留言") %>
< % memo = Replace(memo,"< br>",str) %>
\'将留言数据表单中“留言”字段的数据赋予留言编辑页面的memo文本域,并将数据转换成字符串,以便对其进行编辑。
......
< input type="TEXT" name="Name" size="20" value="< %=CmdEdit("姓名")%>">
......
< input type="TEXT" name="Tel" size="20" value="< %=CmdEdit("电话")%>">
......
< input type="TEXT" name="Subject" size="55" value="< %=CmdEdit("主题")%>">
......
< textarea name="Memo" rows="6" cols="60">< %= memo %>< /textarea>
......
< input type="hidden" name="ID" value="< %=CmdEdit("ID")%>">
< input type="submit" value="保存留言">
\'分别将留言表单中的“ 姓名”、“电话”、“主题”和“留言”各字段的数据赋予各“留言编辑”页面中对应的文本域。
......
步骤三:保存编辑后的留言(Editsave.asp)。
< %@ LANGUAGE="VBSCRIPT" %>
< % Response.Buffer = "True" %>
\'设置将Web页面输出至缓存区。当一个Web页面输出至缓存区时,除非当前页的所有服务器端文件都已被处理完毕或者是程序中调用了Flush或End方法,服务器才将响应客户端浏览器。因此Response.Buffer一般都是放在.asp文件的第一行,放在其他位置可能会造成执行的错误。
< % ID = Request.Form("ID") %>
\'获取被编辑留言的“ID”序列号。
......
< %
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("book2.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set cmd = Server.CreateObject("ADODB.Command")
Set CmdEdit = Server.CreateObject("ADODB.Recordset")
cmd.CommandText = "SELECT guestbook.* FROM guestbook WHERE (ID = " & ID & ")"
cmd.CommandType = 1
Set cmd.ActiveConnection = Conn
CmdEdit.Open cmd, , 1, 3
%>
< % NAME = Request.Form("NAME")
if NAME="" THEN
CmdEdit.Fields("姓名") = NULL
Else
CmdEdit.Fields("姓名") = NAME
END IF %>
< % EMAIL = Request.Form("EMAIL")
if EMAIL="" THEN
CmdEdit.Fields("EMAIL") = NULL
Else
CmdEdit.Fields("EMAIL") = EMAIL
END IF %>
< % memo = Request.Form("memo")
if memo="" THEN
CmdEdit.Fields("留言") = NULL
Else
memo = Replace(memo,str,"< br>")
memo = Replace(memo,vbCr,"< br>")
CmdEdit.Fields("留言") = memo
END IF %>
< % TEL = Request.Form("TEL")
if TEL="" THEN
CmdEdit.Fields("电话") = NULL
Else
CmdEdit.Fields("电话") = TEL
END IF %>
\'将编辑留言页面表单中对应文本域中的内容存储到留言表单中相对应的字段下。
< % CmdEdit.Update
CmdEdit.Close %>
< % Sub delaySecond(DelaySeconds)
SecCount = 0
Sec2 = 0
While SecCount < DelaySeconds + 1
Sec1 = Second(Time())
If Sec1 <> Sec2 Then
Sec2 = Second(Time())
SecCount = SecCount + 1
End If
Wend
End Sub %>
< % delaySecond(2) %>
< % Response.Redirect "page2.asp" %>
- 上一篇: ASP进阶教程Ⅳ:加入精彩留言
- 下一篇: ASP进阶教程Ⅵ:留言簿在线删除留言
-= 资 源 教 程 =-
文 章 搜 索