我正在将一个VFP 9应用程序移植到SQL Server。 VFP应用程序有一些表中包含“常规”字段。查询字段时我得到一个字节数组,当我将它保存到磁盘时,我可以查看它是一个word文档,还是一个Paint BMP等。
从阅读开始,我发现一般字段是专有格式,并包含文档预览的缩略图(除此之外,我确定)。
有人可以指向一些代码,这些代码首先会提取文件类型,然后是我可以保存为原始文件的实际文件数据。 (获取预览图像也很不错。)
显然早些时候,有人在foxpro中编写了一个名为GENTOFIL.PRG的程序,这听起来像是将一般字段转换为文件。但是,谷歌在试图找到它时没有多大帮助!
答案 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知识库文章。
Rick Schummer Visual FoxPro MVP答案 1 :(得分:3)
VFP中的“常规”字段类型有点奇怪......
来自VFP帮助文档:
“常规”字段包含十个字节 参考实际内容 字段:电子表格,单词 处理器文档或图片 由另一个应用程序创建该 实际类型和数据量, 但是,取决于自动化 创建对象的服务器 是否链接或嵌入OLE 宾语。
如果链接OLE对象,则表格 仅包含对的引用 数据和应用程序 创造了它。如果您嵌入了OLE 对象,表包含副本 数据以及对数据的引用 创建它的应用程序。尺寸 一般领域仅限于 可用磁盘空间量。
这里要注意的关键是VFP的“常规”字段类型处理Microsoft OLE对象,它们可以是 链接 或 嵌入式 即可。此外,VFP直接操作OLE对象的能力似乎很小,因为在对包含的OLE对象调用操作时,实际运行关联的应用程序来打开/编辑OLE绑定的“常规”字段的内容。
正如您所说,如果您能够手动提取文件,那么这可能是获取文件的最佳方式,因为即使VFP提供了与常规类型字段中包含的数据进行交互的最小方法。