数据库是大量有序数据的集合,在网站建设中被大量使用,同时也用在多媒体软件中,但是常用的多媒体创作软件Authweaver和Director都没有直接提供数据库支持,需要第三方插件才能完成数据库的存取,非常不方便;在Asp网页中使用数据库十分容易,于是是否可以在不需要服务器支持的情况下,在本地网页中使用数据库呢,答案是可以的,笔者在多媒体软件开发中,通过调用网页,完成数据库的访问,达到了很好的效果,总结了一些经验,希望对你在多媒体软件中使用数据库有所帮助。
这里我们以Access数据库说明,类似的只要支持ODBC、SQL的数据库系统都可以使用类似的方法在本地网页中使用数据库。
1. ADO基础
ADO对象即Active Data Objects,是ASP网页访问数据库的基础,它包含三种对象:Connection、Recordset和Command,其中Connection用来连接数据库,Recordset记录集用来存取记录,Command用来执行SQL命令。同时你的计算机必须安装相应的ODBC驱动后才可以使用ADO对象访问相应的数据库。


2. Asp中怎么访问数据库
一般在使用ADO对象访问数据库的时候,先建立Connection连接,再生成Recordset对象存取数据。下面是Asp网页访问数据库的代码:
set conn = server.createobject("ADODB.Connection")
‘建立Connection对象
conn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\example.mdb;"
‘打开数据库连接
sql = " SELECT * FROM spheres "
‘SQL查询语句
set rs = conn.execute(sql)
‘执行Sql查询语句,并返回记录集到rs,这个时候就可以按rs(“字段名”)来访问查询结果中指定字段的值了


另一种用法先建立记录集对象,如下
str_conn= "DBQ=F:\ example.mdb;Driver={Microsoft Access Driver (*.mdb)};"
‘连接字符串

set rs = Server.CreateObject("ADODB.Recordset")
‘建立记录集对象
rs.ActiveConnection = str_conn
‘打开数据库连接
rs.Source = "SELECT * FROM spheres"
‘SQL查询语句
rs.CursorType = 0
‘游标类型
rs.CursorLocation = 2
‘游标位置
rs.LockType = 3
锁定类型
rs.Open()
‘打开记录集,并返回给rs

对于语句Del、Update、Insert into,是不返回数据的,可以使用conn.execute sql即可


下面的代码完整的说明了,Asp如何使用ADO对象访问数据库并将记录集对象id的值循环显示在网页上的,示例数据库为example.mdb,包括一个有三个字段id、color、radius的表spheres,代码如下:
<%
str_conn= "DBQ=G:\htmlsearch\example.mdb;Driver={Microsoft Access Driver (*.mdb)};"
Set conn = server.CreateObject("ADODB.Connection")
conn.Open str_conn
sql= "SELECT * FROM spheres"
Set rs = conn.Execute( sql )


‘循环显示所有记录
While (NOT rs.EOF)
response.write "id=" & rs("id").Value & "<br>"
rs.MoveNext()
Wend


rs.Close()
conn.Close()
'关闭对象,必须的
%>
参见: asp_all.asp



3. 在本地网页中访问数据库
将上面的代码保存为文件html_all.htm,看看还能不能访问数据库,注意把标记<% %>修改为<script> </script>,代码如下:
<html>
<head>
<title>本地数据库访问</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language=vbscript>
str_conn= "DBQ=G:\htmlsearch\example.mdb;Driver={Microsoft Access Driver (*.mdb)};"
Set conn = server.CreateObject("ADODB.Connection")
conn.Open str_conn
sql= "SELECT * FROM spheres"
Set rs = conn.Execute( sql )


‘循环显示所有记录
While (NOT rs.EOF)
response.write "id=" & rs("id").Value & "<br>"
rs.MoveNext()
Wend


set rs=nothing
conn.close
'关闭对象,必须的
</script>
</head>
<body>
</body>
</html>
参见:html_all_1.htm

执行后页面什么也没有显示,也没有提示,问题在哪里呢?
我们注意到这里的两个Asp服务器对象:server和response,可是现在我们没有服务器,网页只是在浏览器端执行的,所以我们试着把sever去掉,response对象用document对象代替,因为asp中response的主要作用也是向浏览器输出内容,改变后的代码如下:
<html>
<head>
<title>本地数据库访问</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language=vbscript>


str_conn= "DBQ=G:\htmlsearch\example.mdb;Driver={Microsoft Access Driver (*.mdb)};"
Set conn = CreateObject("ADODB.Connection")
conn.Open str_conn
sql= "SELECT * FROM spheres"
Set rs = conn.Execute( sql )


While (NOT rs.EOF)
document.write "id=" & rs("id").Value & "<br>"
rs.MoveNext()
Wend


set rs=nothing
conn.close
</script>
</head>
<body>
</body>
</html>
参见:html_all.htm
运行该网页,正如你所看见的,数据库的内容被输出到浏览器了,和Asp执行后的结果一样,说明本地访问数据库是可以的。

4. ‘注意只读属性
在实际的多媒体光盘应用中,注意设置游标、锁定类型,特别是在多媒体光盘中使用的时候,一定要设置为只读数据类型,同时不要使用Del、Update、Insert into等Sql语句,以免发生错误,类似的如下:
这里调用记录集对象的Open方法创建记录集

rs.open Sql语句,conn,1,1
第一个参数为要执行的Sql语句

第二个参数为已经创建的connection连接对象

最后两个参数比较重要,第三个参数是记录集类型,可以包括

0, 只读且只能向下移动

3, 只读可自由移动

1,可读写可自由移动

2,可读写可自由移动,但新增数据共享



第四个参数是锁定类型,包括

1,默认值,只读

2,悲观锁定

3,乐观锁定

4,次乐观锁定



5. 数据传递
asp对象已经不可能在这里使用了,在本地网页中使用数据库最麻烦的是数据传递,当提交一个查询的时候,查询的数据如何传递到下一个页面,这里我给出自己的做法:
a) 代替Server.mappath
Server.mappath()用来获取指定文件的磁盘路径,这里我们可以用一个Vb函数代替,代码如下:
Founction mappath(x)
spath=document.location.pathname
spath=mid(spath,2, instrrev(spath,"\")-1)
mappath=spath & “\” & x
end founction

b) request
c) 其他解决办法
6. 应用,结束