<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      ASP對FoxPro自由表(DBF文件)的設置

      [摘要]一、問題的提出 最近一個項目中遇到ASP對FoxPro庫表(*.DBF)的操作問題,F實中確有許多應用軟件使用DBF表,如何在網絡環境中使用這些數據,使很多朋友一籌莫展。 本人也查了許多資料,沒有找到解決方法的詳細說明。經過試驗,初步解決了這個問題,拿出來和大家分享。 本文試圖解...

      一、問題的提出
          最近一個項目中遇到ASP對FoxPro庫表(*.DBF)的操作問題,F實中確有許多應用軟件使用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;"
         我用此連接字串沒有連接成功,沒有進行進一步測試,有興趣的朋友可以試一下以上字串。
         .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表中,備注形及通用型字段都可用于存儲圖形、音像、文本等文件(請參考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!




      日韩精品一区二区三区高清