转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 系统软件 >> 正文
ASP对FoxPro自由表(DBF文件)的操作         

ASP对FoxPro自由表(DBF文件)的操作

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1016 更新时间:2009/4/25 0:44:51

一、问题的提出
    最近一个项目中遇到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!


[系统软件]曝光Visual Foxpro 9.0 最新秘密  [系统软件]FOXPRO 系统指标
[系统软件]Visual FoxPro9.0中扩展报表系统功能  [系统软件]Visual FoxPro:我是旁观者
[系统软件]读取foxpro格式的dbf文件  [常用软件]Visual Foxpro通用报表打印程序
[常用软件]Visual FoxPro 6.0与大型数据库的无数据源连接  [常用软件]Visual Foxpro 的一个BUG
[常用软件]在PB中使用FoxPro数据库的方法  [电脑技术]Visual Foxpro中的多用户及数据缓冲问题
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台