首页 文章

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

提问于
浏览
3

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

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

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

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

2 回答

  • 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 KB文章 .

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

    Rick Schummer Visual FoxPro MVP

  • 3

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

    从VFP帮助文档:

    “常规”字段包含对字段实际内容的十字节引用:由另一个应用程序创建的电子表格,文字处理器文档或图片 . 但是,实际的数据类型和数量取决于创建对象的自动化服务器以及是否链接或嵌入OLE对象 . 如果链接OLE对象,则表只包含对数据的引用以及创建它的应用程序 . 如果嵌入了OLE对象,则该表包含数据的副本以及对创建它的应用程序的引用 . “常规”字段的大小仅受可用磁盘空间量的限制 .

    这里要注意的关键是"general"字段类型的VFP处理Microsoft OLE对象,它们可以是 linkedembedded . 此外,VFP直接操作OLE对象的能力似乎很小,因为在对包含的OLE对象调用操作时,实际上运行相关的应用程序来打开/编辑OLE绑定的"general"字段的内容 .

    如果你正如你所说的那样,你可以手动提取文件,这可能是获取文件的最佳方式,因为即使VFP也提供了与一般类型字段中包含的数据进行交互的最小方法 .

相关问题