我可以从foxpro一般字段中提取文件吗?

时间:2009-01-22 02:21:24

标签: foxpro visual-foxpro

我正在将一个VFP 9应用程序移植到SQL Server。 VFP应用程序有一些表中包含“常规”字段。查询字段时我得到一个字节数组,当我将它保存到磁盘时,我可以查看它是一个word文档,还是一个Paint BMP等。

从阅读开始,我发现一般字段是专有格式,并包含文档预览的缩略图(除此之外,我确定)。

有人可以指向一些代码,这些代码首先会提取文件类型,然后是我可以保存为原始文件的实际文件数据。 (获取预览图像也很不错。)

显然早些时候,有人在foxpro中编写了一个名为GENTOFIL.PRG的程序,这听起来像是将一般字段转换为文件。但是,谷歌在试图找到它时没有多大帮助!

2 个答案:

答案 0 :(得分:4)

如果您知道常规字段的内容是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

Rick Schummer Visual FoxPro MVP

答案 1 :(得分:3)

VFP中的“常规”字段类型有点奇怪......

来自VFP帮助文档:

  

“常规”字段包含十个字节   参考实际内容   字段:电子表格,单词   处理器文档或图片   由另一个应用程序创建该   实际类型和数据量,   但是,取决于自动化   创建对象的服务器   是否链接或嵌入OLE   宾语。

     

如果链接OLE对象,则表格   仅包含对的引用   数据和应用程序   创造了它。如果您嵌入了OLE   对象,表包含副本   数据以及对数据的引用   创建它的应用程序。尺寸   一般领域仅限于   可用磁盘空间量。

这里要注意的关键是VFP的“常规”字段类型处理Microsoft OLE对象,它们可以是 链接 嵌入式 即可。此外,VFP直接操作OLE对象的能力似乎很小,因为在对包含的OLE对象调用操作时,实际运行关联的应用程序来打开/编辑OLE绑定的“常规”字段的内容。

正如您所说,如果您能够手动提取文件,那么这可能是获取文件的最佳方式,因为即使VFP提供了与常规类型字段中包含的数据进行交互的最小方法。