[返回]
中国计算机报2000年第88期

基于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中对多媒体数据进行输出的控制。