|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一、问题的提出 最近一个项目中碰到ASP对FoxPro库表(*.DBF)的操作问题。现实中确有许多应用软件使用DBF表,如何在网络环境中使用这些数据,使很多朋友一筹莫展。 本人也查了许多资料,没有找到解决方式的具体说明。经过试验,初步解决了这个问题,拿出来和大家分享。 本文试图解决以下问题: 1. ASP联接由FoxPro 生成的自由表(*.dbf文件) 2. 将多种类型的数据及图形文件同时存入dbf表中 二、环境 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;" 我用此连接字串没有连接成功,没有进行进一步测试,有爱好的朋友可以试一下以上字串。 .www.knowsky.com 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表中,备注形及通用型字段都可用于存储图形、音像、文本等文件。在这里,我们将字段类型设为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! 返回类别: 教程 上一教程: 解决ASP执行DB查询中的特别字符问题 下一教程: JMAIL发邮件验证失败后一种变通的解决办法 您可以阅读与"ASP对FOXPRO自由表(DBF文件)的操作"相关的教程: · 用ASP实现对MP3曲目信息的操作 · 用ASP实现对ORACLE数据库的操作 · 用ASP语言实现对SQL SERVER 数据库的操作 · ASP关闭页面前的操作 · ASP操作XML文件的完整实例 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |