Могу ли я извлечь файл из общего поля foxpro? - PullRequest
3 голосов
/ 22 января 2009

Я портирую приложение VFP 9 на SQL Server. В приложении VFP есть несколько таблиц с «общими» полями. Я получаю байтовый массив, когда запрашиваю поле, и когда я сохраняю его на диск, я могу заглянуть внутрь и увидеть, что это текстовый документ или Paint BMP и т. Д.

Из прочтения я обнаружил, что общее поле является проприетарным форматом и содержит уменьшенное изображение предварительного просмотра документа (среди прочего, я уверен).

Может кто-нибудь указать мне какой-нибудь код, который извлекает сначала тип файла, а затем фактические данные файла, которые я могу сохранить как исходный файл. (Было бы неплохо получить изображение для предварительного просмотра.)

Видимо, в свое время кто-то написал в foxpro программу GENTOFIL.PRG, которая звучит так, как будто она преобразовывает общие поля в файл. Но Google не сильно помогает при попытке найти это!

Ответы [ 2 ]

4 голосов
/ 07 июня 2009

Если вы знаете, что содержимое поля «Общие» является документом 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

Рик Шуммер Visual FoxPro MVP

3 голосов
/ 23 января 2009

Тип поля "General" в VFP - это немного странно ...

Из справочных документов VFP:

Поле General содержит десятибайт ссылка на фактическое содержание поле: электронная таблица, слово обработчик документа или рисунка, созданный другим приложением. фактический тип и объем данных, однако, зависит от автоматизации сервер, который создает объект и ли вы ссылку или встраивать OLE объект.

Если вы связываете объект OLE, ваша таблица содержит только ссылку на данные и приложение, которое создал это. Если вы встраиваете OLE объект, таблица содержит копию данные, а также ссылка на приложение, которое его создало. Размер общего поля ограничено только объем доступного дискового пространства.

Ключевым моментом здесь является то, что «общий» тип поля VFP работает с объектами Microsoft OLE, и они могут быть связаны или встроены . Кроме того, способность VFP напрямую манипулировать объектами OLE представляется минимальной, поскольку при вызове действий над содержащимися объектами OLE запускается связанное приложение, которое открывает / редактирует содержимое связанного с OLE «общего» поля.

Если, как вы сказали, вы можете извлечь файл вручную, это, вероятно, лучший способ получить файлы, так как даже VFP обеспечивает минимальные способы взаимодействия с данными, содержащимися в полях общего типа.

...