3

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

通过阅读,我发现通用字段是一种专有格式,并包含文档预览的缩略图(除其他外,我敢肯定)。

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

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

4

2 回答 2

4

如果您知道 General 字段的内容是 Word 文档,那么我有一些 Visual FoxPro 代码由应该提取它的人推荐。

* 首先以编程方式创建一个表单
loForm = CREATEOBJECT("表格")

* 使用常规字段打开您的 VFP 表。根据需要更改名称
在 0 ALIAS WordData 中使用 CustomerDocs.DBF

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

* 将通用字段绑定到 oleboundcontrol
loForm.oleWordDoc.ControlSource = "WordData.gen1"

lnCounter = 1

扫描
   * 文件名全部相同,计数器在末尾
   * 您可能在表格的另一列中有文件名。
   lcFileName = "docfromgeneralfield" + TRANSFORM(lnCounter)
   lcFileName = FORCEEXT(lcFileName, "doc")

   * 将数据从通用字段保存到 .doc 文件
   loForm.oleWordDoc.SaveAs("lcFileName")

   lnCounter = lnCounter + 1
ENDSCAN

发布 loForm

使用 (SELECT("WordData"))

返回

如果您需要帮助从表格中提取图像,您可以查看我过去使用过的 Microsoft 知识库文章。

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

Rick Schummer Visual FoxPro MVP

于 2009-06-07T18:20:14.103 回答
3

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

从 VFP 帮助文档:

General 字段包含对该字段实际内容的十字节引用:由另一个应用程序创建的电子表格、文字处理器文档或图片。但是,实际的数据类型和数量取决于创建对象的自动化服务器以及您是链接还是嵌入 OLE 对象。

如果您链接一个 OLE 对象,您的表只包含对数据和创建它的应用程序的引用。如果您嵌入 OLE 对象,则该表包含数据的副本以及对创建它的应用程序的引用。常规字段的大小仅受可用磁盘空间量的限制。

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

如您所说,如果您能够手动提取文件,那可能是获取文件的最佳方式,因为即使是 VFP 也提供了与一般类型字段中包含的数据交互的最少方式。

于 2009-01-23T16:34:02.107 回答