ASP对FoxPro自由表(DBF文件)的操作
发布时间:2010-05-27 12:20:00
最近一个项目中遇到ASP对FoxPro库表(*.DBF)的操作问题。现实中确有许多应用软件使用DBF表,如何在网络环境中使用这些数据,使很多朋友一筹莫展。
本人也查了许多资料,没有找到解决方法的详细说明。经过试验,初步解决了这个问题,拿出来和大家分享。
本文试图解决以下问题:
1. ASP联接由FoxPro 生成的自由表(*.dbf文件)
2. 将多种类型的数据及图形文件同时存入dbf表中
(示例程序可从http://www.netop.cc/downloads/dbf.rar得到)
二、环境
Windows2000 + IIS5.0 + IE6.0(SP1)
DBF文件为Microsoft Visual FoxPro 6.0 生成的自由表(非dbc库)
三、解决途径
1. 连接
DBF文件的ODBC驱动程序名称为 Microsoft Visual FoxPro Driver,在ASP中,通过Connection对象与其联接,需要注意的是,联接时将DBF所在目录视为库名。以下是具体联接代码:
DIM conn,connstr,db
db="data"
Set conn = Server.CreateObject("ADODB.Connection")
connstr = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusive=No"
conn.Open connstr
以上代码中,data为我的DBF文件所在的相对路径(相对于此代码所在的文件),通过Server.MapPath(db)将其转为绝对路径。
http://www.connectionstrings.com 给出了很多类型的库表文件的连接字串,其中对DBF文件,给出的连接字串为:
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;"
我用此连接字串没有连接成功,没有进行进一步测试,有兴趣的朋友可以试一下以上字串。
2. 在SQL语句中声明表名
可以用[表名]或[表名.扩展名]的形式在SQL语句中声明要操作的表名,如表文件名为t1.dbf,SQL语句为:
select * from [t1] 或 select * from [t1.dbf]
3. 各种类型数据的入库操作
DBF支持的数据类型不是很多,其中值得注意是的Date(日期型)、Memo(备注型)、General(通用型)。在此着重说明一下Data型数据,Memo及Gen型在存储图形文件时用到,稍后说明。
我一般采用两种方式进行写库操作,一种是使用insert语句,一种是使用addnew方法,对于DBF表,这两种方式略有差别。
使用insert语句时,要注意Date型数据的书写格式为{^yyyy-mm-dd},分界符不同于Access的#及SQL Server的'。具体SQL语句为:
insert into [t1.dbf] (name,birthday) values ('MyName',{^1970-1-1})
在使用addnew方法时,我原先使用的代码为:
rst.open "[t1]",conn,0,3
rst.addnew
rst(0).value = "MyName"
rst(1).value = {^1970-1-1}
rst.update
rst.close
在对SQL Server及Access操作时都没有问题,但是对DBF文件操作时出现了问题。经过试验,终于找到了正确的方法:
sql = "select * from t1"
rst.open sql,conn,0,3
rst.addnew
rst(0).value = "MyName"
rst(1).value = {^1970-1-1}
rst.update
rst.close
请注意以上两段代码的差别,主要在SQL语句上。前面说过,在SQL语句中,可以用[表名]或[表名.dbf]的方式声明表文件,但在使用addnew方法时,表名不可带扩展名,而且不可加方括号,否则会提示“非简单表名,不可更新” 。
4. 图形文件的存储
DBF表中,备注形及通用型字段都可用于存储图形、音像、文本等文件(请参考http://www.chinadesign.com.cn/NewsContents1.asp?id=2663)。在这里,我们将字段类型设为memo(binary)(二进制备注型),使用rst(n).AppendChunk()方法将得到的图片二进制数据写入,使用Response.BinaryWrite()方法将二进制数据还原为图片。图片入库的相关文章很多,在此不再赘述。
至于使用General(通用型)字段存储图片,我试了一下,没有成功,也就没有再试。
5. 数据的删除
可以使用delete语句将数据删除,但是删除后打开表文件,发现数据只是做了删除标记,并未真正从表中删除。在Foxpro中,要使用pack命令将数据永久删除。查了些资料,说是VB无法实现pack操作,那VBS当然更无法实现了。一般的解决办法是每隔一段时间,将表中的数据(当然是未做删除标记的)导入一新表,删除原表,再将新表改名为原表名。
6. 数据和图片同时入库
这个问题不属于本文要讨论的范围,网上也有很多文章给出了解决办法,这里顺带说一下。
我是利用“化境”无组件上传程序实现的这个功能。有些朋友会问,“化境”上传是写成文件,没有入库的方法啊。不错,但是稍加改动,可以得到图片的二进制数据,然后入库即可。我的示例中,化境程序改动的部分都做了注释,请参考。
四、结语
本文主要讨论ASP对DBF自由表的操作,如果是DBC库,示例中的inc/conn.asp中给出了相应的连接字串。
至此,相信朋友们对DBF表的操作有了大概的了解,结合我的示例,相信大家可以开发出更多的功能。
GOOD LUCK!
猜你喜欢
- 由于网络带宽以及某些WAP服务器DECK传输的限制,所以DECK越小越好,最好不要超过1.2K。如果你的需求很复杂,最好分成几个DECK来完
- 本文介绍了10个asp网页制作的常用到的技巧,有asp的也有javascript。如asp如何获取系统时间,如何取得IP,及浏览
- 大家都知道,Dreamweaver是是一款专业的网页设计工具,提供了许多方便、实用的功能,使得以前许多网页效果的实现从繁琐的代码
- It is much easier to criticize somebody else’s work than to create som
- 要随机生成字符串代码如下:在MySQL中定义一个随机串的方法,然后再SQL语句中调用此方法。随机串函数定义方法:CREATE DEFINER
- QQ影音至9月发布之后一直口碑很好,视觉界面和交互设计也颇受好评,这是设计师们努力的结果,也是众多用户反馈的功劳。我们希望可以提供更多价值回
- 很多时候,用户可能会因为承受不了某一产品中的细节设计而放弃使用该产品,这无疑是让设计人员感很沮丧的事情,因为除去这个细节的问题外,这个产品可
- 下面的代码是从kesion系统扒下的,确实不错,支持utf8格式。代码如下:'===========================
- Rotation滤镜可以使图片产生旋转效果,注意必须是IE5.5及IE6.0才能看到!方法如下:制作过程:一、准备图片1张。二、建立一个CS
- location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.hre
- 使用SQL Server事件探查器工具,你可用一个捕获到的跟踪来收集有关服务器的重要信息。与索引优化向导(Index Tuning Wiza
- 在许多用SQL Server实现的新的企业系统设计中,系统设计师需要在给数据结构和管理应用程序逻辑的定位上做出具有关键性意义的决定。SQL
- asp正则表达式检测字符串是否是数字及字母。<% '函数:CheckString(strng) '
- 方法1:/** 功能:数据备份/恢复文件简易方法* 以日期为单位,一天一个备份文件,以当天最后备份为准* 用提交表单的形式进行操作,* 其中
- Semantics可翻译为语义的(学),它是Html/Xhtml是否真正符合标准的重要一环。Jorux在这和大家讨论一些自己的观点,如有不妥
- 晚上突然间看到大猫的头像在闪动,速度打开一看,发现他问,以前我写button标签的时候有没有写type属性,老实的我只有诚实地告诉他,我没写
- 最近,我有机会研究对视觉设计作用的常见误解,这些误解仍然盛行于行政主管、产品主管,工程经理和市场专家中。设计团队成员如何说明这些认识是错误的
- 第一题:ASP中,VBScript的唯一的数据类型是什么?第二题:在ASP中,VBScript有多种控制程序流程语句,如If…Then, S
- 安装时建议你为MySQL管理创建一个用户和组。由该组用户运行mysql服务器并执行管理任务。(也可以以root身份运行服务器,但是不推荐)第
- 先看一个实例这是我用asp写的一个搜索一个字符串里面第一张图片地址的函数(当然你可以将values那里换一个得到所有图片地址)functio