2009-01-22 67 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

相关问题