|
|
|
7i24.Com不停为您服务
基于ASP/ADO技术的多媒体数据输出控制
2001:8:10
作者:曹新社
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中对多媒体数据进行输出的控制。
|
|
|