基于asp/ado技术的多媒体数据输出控制
曹新社
activex data oject(简称ado)技术与active server
pages(简称asp)结合使用,可以具备存取数据库的功能。在实际应用中,我们可以使用vbscript或javascript语言来控制结果集的输出,而当对web上的多媒体数据进行检索时,如何对结果集的输出进行控制呢?下面笔者就此进行论述。
■多媒体数据的存储
我们通常用支持odbc的数据库(如access、sql server、visual
foxpro等)来存储多媒体数据。在数据库中,我们不直接将多媒体数据(如.gif文件、.avi文件、.wav文件、.mp3文件等)存储在某个字段中,而是把多媒体数据的url信息存储在某个字符字段中。本文的示例中,数据库mmdb的video_t表包含mm_tittle和mm_url两个字符字段,分别存储多媒体数据的主题与url信息。
■多媒体数据的输出控制
为了使输出界面友好,关键是产生一个可前后滚动的recordset对象,并予以分页。实现步骤如下:
1. 产生一个可前后滚动的recordset对象
根据实际应用的需要,我们可以选用动态光标(dynamic
cursor)模式、键盘光标(keyset cursor)模式、静态光标(static
cursor)模式和前滚光标(forward_only cursor)模式打开recordset对象。若要移动当前记录的位置,可使用movefirst、movelast、movenext、moveprevious与move等方法以及absoluteposition、absolutepage和filter属性。而前滚的recordset对象仅支持movenext方法。当不具体指定光标模式时,asp/ado就预设为前滚光标模式。因此,我们需要指定打开recordset的光标模式为键盘光标模式,实现代码如下:
〈%
const adopenkeyset=1
'置cursortype为键盘光标模式
const adlockreadonly=1
'置locktype为只读
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open "mmdemodb",""
rs.open "select from
t_vedio",conn,adopenkeyset,adlockreadonly
%
2. 实现分页
recordset对象的下列属性、方法与分页有关,其中:
pagesize:设定recordset对象“一页”的记录数;
absolutepage:设定当前记录的位置是位于哪一页;
pagecount:显示recordset对象包含多少“页”数据;
nextrecordset:清除当前的recordset对象,并运行下一个命令以传回下一个recordset对象。
实现分页的代码如下:
〈% while not(rs is nothing) %
已检索到 〈%=rs.recordcount%
条记录 (共 〈%=rs.pagecount%
页)〈br
〈%
rowcount=rs.pagesize
while not rs.eof and rowcount
0
%
第 〈%=pageno%
页 (主题:〈%response.write rs("mm_title")%
)〈br
……显示多媒体数据……
〈%
rowcount=rowcount-1
rs.movenext
wend
set rs=rs.nextrecordset
wend
%
其中显示多媒体数据时可以使用〈img ……
或〈embed……
等命令。
■一个完整的示例
数据库mmdemodb的表vedio_t的每条记录都包含一个视频文件,根据主题进行检索。检索结果每屏显示一个,用户可通过点击屏幕上的视频播放器进行观看。源代码如下:
〈html
〈body
〈%
const adopenkeyset=1
const adlockreadonly=1
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open "mmdemodb",""
rs.open "select from
t_vedio",conn,adopenkeyset,adlockreadonly
rs.pagesize=1
name_b=request("name_b")
if name_b〈
"" then
pageno=mid(name_b,9)
if pageno〈1 then
pageno=1
end if
else
pageno=1
end if
rs.absolutepage=pageno
%
〈p
〈form method=post action="movdemo.asp"
〈% while not(rs is nothing) %
已检索到 〈%=rs.recordcount%
条记录 (共 〈%=rs.pagecount%
页)〈br
〈%
rowcount=rs.pagesize
while not rs.eof and rowcount
0
%
第 〈%=pageno%
页 (主题:〈%response.write rs("mm_title")%
)〈br
〈%rtem=rs("mm_url")%
〈img dynsrc=〈%=rtem%
width=320 height=240 start=1 controls
〈br
〈%
rowcount=rowcount-1
rs.movenext
wend
%
〈p
〈%
set rs=rs.nextrecordset
wend
conn.close
set rs=nothing
set conn=nothing
%
〈%if pageno
1 then%
〈input type="submit" name="name_b" value="〈%="〈〈_no."&&pageno-1%
"
〈% end if%
〈%if rowcount=0 then%
〈input type="submit" name="name_b" value="〈%="
_no."&&pageno+1%
"
〈%end if%
〈/form
〈/body
〈/html
通过以上程序,我们就可以基本实现在asp中对多媒体数据进行输出的控制。