2009-01-22 66 views
3

我正在將VFP 9應用程序移植到SQL Server。 VFP應用程序中有一些帶有「通用」字段的表格。當我查詢字段時,我得到一個字節數組,當我將它保存到磁盤時,我可以看到裏面,看到它是一個Word文檔或Paint BMP等。通用字段是一種專有格式,包含文檔預覽的縮略圖圖像(除其他外,我確定)。我可以從foxpro一般字段中提取文件嗎?

有人可以指點我一些代碼,首先提取文件的類型,然後我可以保存爲原始文件的實際文件數據。 (獲取預覽圖像也會很好。)

顯然早在某天,有人在foxpro上寫了一個名爲GENTOFIL.PRG的程序,它聽起來像是將常規字段轉換爲文件。但是,谷歌嘗試找到時沒有多大幫助!

回答

3

VFP中的「常規」字段類型是一個有點古怪的...

從VFP幫助文檔:

一般字段包含一個十字節 參照實際內容 該字段:電子表格,文字 處理器文檔或圖片, 由另一個應用程序創建。但是, 的實際類型和數據量 取決於創建對象的自動化 服務器和您是否鏈接或嵌入OLE 對象的 。

如果鏈接OLE對象,則表 僅包含對 數據的引用以及 創建它的應用程序。如果嵌入OLE 對象,則該表包含數據副本 以及創建該對象的 應用程序的引用。常規字段的大小 僅受限於可用磁盤空間量的 。

這裏要注意的關鍵問題是,VFP的「一般」字段類型與微軟的OLE對象交易,他們可以是鏈接嵌入式。此外,VFP直接操作OLE對象的能力看起來很小,因爲在對包含的OLE對象調用操作時,實際運行關聯的應用程序以打開/編輯OLE綁定的「常規」字段的內容。

如上所述,如果您能夠手動提取文件,那麼這可能是最好的方法來獲取文件,甚至VFP也提供了與包含在一般類型字段中的數據進行交互的最低限度的方法。

4

如果你知道General字段的內容是一個Word文檔,我有一些Visual FoxPro代碼被某個應該提取的人推薦。

 
* First create a form programmatically 
loForm = CREATEOBJECT("Form") 

* Open your VFP table with the general field. Change name as needed 
USE CustomerDocs.DBF IN 0 ALIAS WordData 

loForm.AddObject("oleWordDoc", "oleBoundControl") 
loForm.oleWordDoc.AutoSize = .T. 

* bind general field to oleboundcontrol 
loForm.oleWordDoc.ControlSource = "WordData.gen1" 

lnCounter = 1 

SCAN 
    * File names all the same with counter at end 
    * You might have file name in another column in the table. 
    lcFileName = "docfromgeneralfield" + TRANSFORM(lnCounter) 
    lcFileName = FORCEEXT(lcFileName, "doc") 

    * save data from general field to .doc file 
    loForm.oleWordDoc.SaveAs("lcFileName") 

    lnCounter = lnCounter + 1 
ENDSCAN 

RELEASE loForm 

USE IN (SELECT("WordData")) 

RETURN 

如果您需要幫助從表格中提取圖片,可以查看我以前使用的Microsoft知識庫文章。

http://support.microsoft.com/kb/894819

裏克Schummerlicht 的Visual FoxPro MVP

相關問題