VFP將圖片或其他文件保存到SQL Server的Text類型字段或者Access的備註字段中,並可以還原或顯示。

*-- vfp8.0、9.0

*--保存
1、將圖片文件用 Filetostr()轉成字符A。
2、再用
Strconv("字符A",13)將字符A轉成base64編碼數據的字符B。
3、將字符B保存到SQL Server的Text類型字段或者Access的備註字段。

*--還原或顯示
1、用 Strconv("字符B",14)將base64編碼數據還原成未編碼的數據字符A。
2、用
Strtofile()轉成圖片文件或把字符A覆給Image控件的PictureVal 屬性來顯示

*--圖片例子
* 保存
lcTextString=Strconv(Filetostr("路徑\圖片名A"),13)&& base64編碼數據,可以將此數據(lcTextString)保存

* 還原
=Strtofile(Strconv(lcTextString或表字段,14),"路徑\圖片名B")&& 將字符還原base64編碼前數據,還原成文件
Thisform.Image1.Picture="路徑\圖片名B"&& 將還原後的圖片覆給Image控件的的Picture屬性
* 或
Thisform.Image1.PictureVal=Strconv(lcTextString,14)&& 將字符還原base64編碼前數據後直接覆給Image控件的PictureVal屬性(VFP9.0)

*--注:
以上方法除了可以對圖片文件操作外,對其他文件如Word,文本,Exe,音頻,視頻等文件均可,但文件不要過大,否則速度慢。
*------------------
此方法也適用於DBF表的Memo字段(推薦用二進制備註字段,普通備註字段,在代碼頁有變化的時候會自動轉變的,會破壞字段內容,二進制備註字段就不會。
如果直接用dbf二進制備註字段保存任何文件內容,那麼可以直接用
Filetostr/Strtofile函數,不需要轉成base64(SQL或Access需要轉成base64),因爲vfp沒unicode功能,所有二進制文件功能都可用字符串函數來處理。)。
如果是DBF表的Memo字段,就直接用下面備註字段專用的命令,而且還可以保存和還原大文件(注:不管是什麼數據庫,不建議將大量大文件保存至表中),用
Filetostr/Strtofile函數對文件大小是有限制的。
* 保存:
Append Memo Memo字段名From 文件名Overwrite

* 還原:
Copy Memo Memo字段名To 生成文件名
*------------------
如果是VFP9.0建議改爲使用
Blob 類型字段(對應SQL Server的Image或Text類型),它可以存儲任何類型的數據。這樣不需要使用 ActiveX,直接使用 vfp 自帶的Image控件的PictureVal 屬性即可顯示 bmp/gif/png/jpg/tif 等格式的圖片。
Blob 類型字段要比上面方法好,因爲前一種方法有一個缺點就是轉成Base64後,數據變大了,不利於網絡負載。
至於Blob類型字段的文件存儲和還原
*存儲
Replace Blob字段With Filetostr("D:\文件全名")

*還原
=Strtofile(Blob字段,"d:\文件全名")

使用通用字段是已過時的技術,而且存在很多的弊病,例如:放入通用字段的圖像沒有絕對可靠的方法重新再保存爲磁盤文件。

發佈了42 篇原創文章 · 獲贊 43 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章