关键词 ASP,Excel,编程,数据库
一、 问题的提出
在ASP编程中会遇到很多大大小小的难题,我有一次为一家书店设计网站的时候就遇到了一个这样的难题。起初使用Access做数据库,该数据库主要是为了保存书店内图书的信息,但是当记录的条目过多时数据库的体积将会变得很大。在实际的应用中,网站的空间是有限的,很多要建设网站的客户都没有自己的主机,网站的空间是向网站空间提供商花钱购买而来的,这就要求在网站空间一定的条件下,尽量减小网站内文件的体积。于是我选择了Excel做数据库。
二、 方法与说明
将Excel文件(例如book.xls)看成一个数据库,其中的每一个工作表(sheet)看成数据库表。假设Excel中的第一行为字段名,所以你定义的范围中必须要包括第一行的内容。
Excel中的行标题(即字段名)不能够包含数字。Excel的驱动在遇到这种问题时就会出错(例如你的行标题名为“F1”)。如果你的Excel中某一列同时包含了文本和数字的话,那么Excel的ODBC驱动将不能够正常处理这一行的数据,你必须要保证该列的数据类型一致。
使用Excel做数据库在添加数据的时候可以在本地机上使用Microsoft Excel进行编辑。书商们在做图书数据的时候往往都是从各大出版社下载所需的图书信息,这些图书信息都有固定的格式,书商把下载的数据通过复制、粘贴等方法大批量的添加到Excel数据库中。做好数据后将Excel数据库上传到网站。这种方法有以下优点:快速、方便和易 *** 作。
访问数据库信息的第一步是和数据库源建立连接。
使用Excel数据库的连接方法:
<%
Dim Conn,Driver,DBPath,Rs
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)}"
DBPath = "DBQ=" &Server.MapPath("book.mdb")
Conn.Open Driver &DBPath
%>
其中Driver = "Driver={Microsoft Excel Driver (*.xls)}"
这一行代码是关键,主要是驱动的选择问题。我们同使用Access做数据库的连接方法比较下便知。
<%
Dim Conn,Driver,DBPath,Rs
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Access Driver (*.mdb)}"
DBPath = "DBQ=" &Server.MapPath("book.mdb")
Conn.Open Driver &DBPath
%>
三、 程序清单
查询并显示表Sheet1字段为书名的代码:
<%
Dim Conn,Driver,DBPath,Rs
' 建立Connection对象
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)}"
DBPath = "DBQ=" &Server.MapPath("book.xls")
'调用Open 方法打开数据库
Conn.Open Driver &DBPath
'DSN连接方式
'Conn.Open "Dsn=book"
'注意 表名一定要以下边这种格试 "[表名$]" 书写
Sql="Select * From [Sheet1$]"
Set Rs=Conn.Execute(Sql)
IF Rs.Eof And Rs.Bof Then
Response.write "没有找到您需要的数据!!"
Else
Do While Not Rs.EOF
Response.write Rs("书名")
Response.write "<br>"
Rs.MoveNext
Loop
End IF
Rs.Close
Set Rs=nothing
Conn.Close
Set Conn=Nothing
%>
查询并显示表Sheet1全部内容的代码:
<%
Dim Conn,Driver,DBPath,Rs
Set Conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)}"
DBPath = "DBQ=" &Server.MapPath( "book.xls" )
Conn.Open Driver &DBPath
Set Rs = Server.CreateObject("ADODB.Recordset")
Sql="select * from [Sheet1$]"
Rs.Open Sql,conn,2,2
%>
<table border="1">
<tr>
<%
for i=0 to Rs.Fields.Count-1
%>
<td bgcolor="#0099FF"><%=Rs(i).Name%></td>
<%
next
%>
</tr>
<%
do while Not Rs.EOF
%>
<tr>
<%
for i=0 to Rs.Fields.Count-1
%>
<td><%=Rs(i)%></td>
<%
next
%>
</tr>
<%
Rs.MoveNext
Loop
Rs.close
set Rs=nothing
Conn.close
set Conn=nothing
%>
</table>
四、 结论
本文主要介绍ASP编程 *** 作Excel,实现对Excel数据库的检索等功能。实现方法简单,程序代码少,可供实用编程时借鉴使用。以上程序在Windows2000Sever及IIS5.0下运行通过.
.版本 2.子程序 建立mdb数据库, 整数型, 公开, 成功返回0,失败返回-1和-2。注意:已经存在的库和表,就不能再建立了。
.参数 路径, 文本型, , 要存放文件的路径
.参数 接收文件名, 文本型, , 要存放的库文件名
.参数 密码, 文本型, 可空, 库文件密码
.参数 数据表名, 文本型, , 表名
.参数 字段名, 文本型, , 个字段的名字、类型、长度的字符串
.参数 删除表, 逻辑型, 可空, 是否删除表,默认为假
.参数 删除字段, 逻辑型, 可空, 是否删除字段,默认为假
.局部变量 connad, 对象
.局部变量 conn, 对象
.局部变量 Connstr, 文本型
Connstr = “Provider=Microsoft.Jet.OLEDB.4.0Data Source=” + 路径 + “\” + 接收文件名 + 选择 (是否为空 (密码), “”, “Jet OLEDB:Database Password=” + 密码)
connad.清除 ()
conn.清除 ()
.如果 (connad.创建 (“ADOX.Catalog”, ) = 假)
输出调试文本 (“ADOX.Catalog对象创建失败”)
返回 (-1)
.否则
connad.通用方法 (“Create”, Connstr)
.如果结束
' connad.查看 ()
.如果 (conn.创建 (“Adodb.Connection”, ) = 假)
输出调试文本 (“Adodb.Connection对象创建失败”)
返回 (-2)
.否则
conn.方法 (“Open”, Connstr)
.如果 (删除表 = 真)
conn.对象型方法 (“Execute”, “DROP TABLE ” + 数据表名) ' 删除表
输出调试文本 (“删除成功”)
.否则
.如果 (删除字段 = 真)
conn.对象型方法 (“Execute”, “ALTER TABLE [” + 数据表名 + “] DROP COLUMN [” + 字段名 + “]”) ' 删除字段
输出调试文本 (“zdm:” + 字段名)
.否则
conn.对象型方法 (“Execute”, “create table ” + 数据表名 + “(” + 字段名 + “)”) ' 建立新表
.如果结束
.如果结束
.如果结束
conn.方法 (“Close”, )
删除表 = 假
删除字段 = 假
返回 (0)
.子程序 取字段类型名, 文本型, 公开, 取字段类型名返回中文
.参数 类型, 整数型, 可空
.局部变量 结果, 文本型
.判断开始 (类型 = 17)
结果 = “数字[字节型](Byte)”
.判断 (类型 = 3)
结果 = “数字[长整型](Long)”
.判断 (类型 = 2)
结果 = “数字[整型](Short)”
.判断 (类型 = 4)
结果 = “数字[单精度](Single)”
.判断 (类型 = 5)
结果 = “数字[双精度](Double)”
.判断 (类型 = 6)
结果 = “货币型(Currency)”
.判断 (类型 = 130)
结果 = “文本型(Char)”
.判断 (类型 = 11)
结果 = “逻辑型(BIT)”
.判断 (类型 = 204)
结果 = “二进制型(Binary)”
.判断 (类型 = 3)
结果 = “自动编号(Counter)”
.判断 (类型 = 203)
结果 = “备注型(Memo)”
.判断 (类型 = 7)
结果 = “日期/时间(Time)”
.判断 (类型 = 131)
结果 = “小数型(Decimal)”
.判断 (类型 = 0)
结果 = “#空白型字段(Empty)”
.默认
结果 = “未知数据,可能会导致数据出错。”
.判断结束
返回 (结果)
.子程序 取表名, 逻辑型, 公开
.参数 路径文件名, 文本型
.参数 密码, 文本型, 可空
.参数 文件名, 文本型, , 文件名,无需写路径
.参数 表名数组, 文本型, 参考 数组
.局部变量 Mycat对象, 对象
.局部变量 Tables对象, 对象
.局部变量 连接文本, 文本型
.局部变量 i, 整数型
.局部变量 表数量, 整数型
.局部变量 表名, 文本型
.如果真 (Mycat对象.创建 (“ADOX.Catalog”, ) = 假)
信息框 (“你的机器上没有安装ADO。文件位置是C:\Program Files\Common Files\System\ado\Msado.dll”, 0, )
结束 ()
.如果真结束
连接文本 = “Provider=MicroSoft.Jet.OLEDB.4.0Data Source=” + 文件名 + 选择 (是否为空 (密码), “”, “Jet OLEDB:Database Password=” + 密码)
Mycat对象.写属性 (“ActiveConnection”, 连接文本)
Tables对象 = Mycat对象.读对象型属性 (“Tables”, )
表数量 = Tables对象.读数值属性 (“Count”, )
.计次循环首 (表数量, i)
表名 = Tables对象.读对象型属性 (“Item”, i - 1).读文本属性 (“Name”, ) ' 序号从0开始
.如果真 (取文本左边 (表名, 4) ≠ “MSys”) ' 过虑掉系统表名
加入成员 (表名数组, 表名)
' 输出调试文本 (“表名:” + 表名)
.如果真结束
.计次循环尾 ()
Tables对象.清除 ()
Mycat对象.清除 ()
返回 (真)
.子程序 显示字段信息, 整数型, 公开
.参数 路径, 文本型, , 要存放文件的路径
.参数 接收文件名, 文本型, , 要存放的库文件名
.参数 密码, 文本型, 可空, 库文件密码
.参数 数据表名, 文本型, , 表名
.局部变量 连接对象, 对象
.局部变量 表对象, 对象
.局部变量 连接文本, 文本型
.局部变量 表数计次, 整数型
.局部变量 表数量, 整数型
.局部变量 表名, 文本型
.局部变量 字段数量, 整数型
.局部变量 字段名, 文本型
.局部变量 字段计次, 整数型
.局部变量 字段类型, 整数型
.局部变量 字段长度, 整数型
.如果真 (连接对象.创建 (“ADOX.Catalog”, ) = 假)
信息框 (“你的机器上没有安装ADO。文件位置是C:\Program Files\Common Files\System\ado\Msado.dll”, 0, )
结束 ()
.如果真结束
连接文本 = “Provider=Microsoft.Jet.OLEDB.4.0Data Source=” + 路径 + “\” + 接收文件名 + 选择 (是否为空 (密码), “”, “Jet OLEDB:Database Password=” + 密码)
输出调试文本 (密码)
输出调试文本 (密码)
连接对象.写属性 (“ActiveConnection”, 连接文本)
表对象 = 连接对象.读对象型属性 (“Tables”, )
' 表数量 = Tables对象.读数值属性 (“Count”, )
表名 = 数据表名
字段数量 = 表对象.读对象型属性 (“Item”, 表名).读对象型属性 (“Columns”, ).读数值属性 (“Count”, )
.计次循环首 (字段数量, 字段计次)
字段名 = 表对象.读对象型属性 (“Item”, 表名).读对象型属性 (“Columns”, ).读对象型属性 (“Item”, 字段计次 - 1).读文本属性 (“Name”, )
字段类型 = 表对象.读对象型属性 (“Item”, 表名).读对象型属性 (“Columns”, ).读对象型属性 (“Item”, 字段计次 - 1).读数值属性 (“Type”, )
字段长度 = 表对象.读对象型属性 (“Item”, 表名).读对象型属性 (“Columns”, ).读对象型属性 (“Item”, 字段计次 - 1).读数值属性 (“DefinedSize”, )
' 输出调试文本 (到文本 (字段长度))
' 输出调试文本 (取类型名 (字段类型))
' 输出调试文本 (到文本 (字段类型))
.计次循环尾 ()
表对象.清除 ()
连接对象.清除 ()
返回 (0)
.子程序 取字段类型1, 文本型, 公开, 取字段类型名返回英文
.参数 类型, 文本型, 可空
.局部变量 结果, 文本型
.判断开始 (类型 = “数字[字节型]”)
结果 = “Byte”
.判断 (类型 = “数字[长整型]”)
结果 = “Long”
.判断 (类型 = “数字[整型]”)
结果 = “Short”
.判断 (类型 = “数字[单精度]”)
结果 = “Single”
.判断 (类型 = “数字[双精度]”)
结果 = “Double”
.判断 (类型 = “货币型”)
结果 = “Currency”
.判断 (类型 = “文本型”)
结果 = “Char”
.判断 (类型 = “文本1”)
结果 = “Text(n)”
.判断 (类型 = “逻辑型”)
结果 = “BIT”
.判断 (类型 = “二进制型”)
结果 = “Binary”
.判断 (类型 = “自动编号”)
结果 = “Counter”
.判断 (类型 = “备注型”)
结果 = “Memo”
.判断 (类型 = “日期/时间”)
结果 = “Time”
.判断 (类型 = “小数型”)
结果 = “Decimal”
.判断 (类型 = “”)
结果 = “”
.默认
结果 = “未知数据,可能会导致数据出错。”
.判断结束
返回 (结果)
.子程序 取Access密码, 逻辑型, 公开, 取Access密码,成功返回真,失败返回假
.参数 路径文件名, 文本型
.参数 密码, 文本型
.参数 版本, 文本型
.局部变量 文件号
.局部变量 加密标志, 整数型
.局部变量 PassSource97, 字节型, , "13"
.局部变量 PassSource2k, 字节型, , "13"
.局部变量 i
.局部变量 temp, 字节型
.局部变量 a
.局部变量 标志, 逻辑型
.局部变量 结果文本, 文本型
PassSource97 = { 134, 251, 236, 55, 93, 68, 156, 250, 198, 94, 40, 230, 19 }
PassSource2k = { 161, 236, 122, 156, 225, 40, 52, 138, 115, 123, 210, 223, 80 } ' 加密标志是0x13(19)
文件号 = 打开文件 (路径文件名, 1, )
移动读写位置 (文件号, #文件首, 20) ' / 0x42处
读入数据 (文件号, temp)
.判断开始 (到数值 (temp) = 0)
版本 = “ACCESS_97”
.变量循环首 (1, 13, 1, i)
移动读写位置 (文件号, #文件首, 65 + i) ' 0x42处
读入数据 (文件号, temp)
a = 位异或 (到数值 (temp), PassSource97 [i])
.如果真 (a = 0)
密码 = “密码为空”
.如果真结束
结果文本 = 结果文本 + 字符 (a)
.变量循环尾 ()
.默认
版本 = “ACCESS_2K”
移动读写位置 (文件号, #文件首, 98) ' 0x62处
读入数据 (文件号, temp)
标志 = 假
加密标志 = 位异或 (到数值 (temp), 19)
.变量循环首 (1, 26, 2, i)
移动读写位置 (文件号, #文件首, 65 + i) ' 0x42处
读入数据 (文件号, temp)
.如果真 (到数值 (temp) = 0)
跳出循环 ()
.如果真结束
标志 = 取反 (标志)
.判断开始 (标志)
a = 位异或 (位异或 (到数值 (temp), PassSource2k [(i + 1) ÷ 2]), 加密标志)
.如果真 (a < 32 或 a > 126)
密码 = “密码为空”
.如果真结束
.默认
a = 位异或 (到数值 (temp), PassSource2k [(i + 1) ÷ 2])
.判断结束
结果文本 = 结果文本 + 字符 (a)
.变量循环尾 ()
.判断结束
密码 = 结果文本
关闭文件 (文件号)
返回 (真)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)