2009-01-22 6 views
3

Je transfère une application VFP 9 à SQL Server. L'application VFP possède des tables avec des champs "généraux". Je reçois un tableau d'octets lors de l'interrogation du champ, et quand je l'enregistre sur le disque, je peux regarder à l'intérieur et voir qu'il s'agit d'un document Word, ou un Paint BMP, etcPuis-je extraire un fichier d'un champ général de foxpro?

De la lecture autour, j'ai trouvé que le champ général est un format propriétaire et contient une image miniature de l'aperçu du document (entre autres, je suis sûr). Quelqu'un peut-il me diriger vers un code qui extrairait d'abord le type de fichier, puis les données de fichier réelles que je peux enregistrer en tant que fichier d'origine. (Obtenir l'image de prévisualisation serait également agréable.)

Apparemment, dans la journée, quelqu'un a écrit un programme dans foxpro appelé GENTOFIL.PRG qui ressemble à convertir des champs généraux en un fichier. Mais, google n'aide pas beaucoup en essayant de trouver cela!

Répondre

3

Le type de champ « Général » dans VFP est un peu étrange ...

De VFP Aide docs:

Le champ général contient dix octets référence au réel contenu de le champ: un tableur, un mot document de processeur, ou une image, créé par une autre application. Le type et la quantité réels de données , cependant, dépend du serveur Automation qui crée l'objet et si vous liez ou intégrez l'objet OLE .

Si vous liez un objet OLE, votre table ne contient que la référence aux données et à l'application qui créée. Si vous incorporez un objet OLE , la table contient une copie de les données ainsi qu'une référence à l'application qui l'a créée. La taille d'un champ Général est limitée uniquement par la quantité d'espace disque disponible.

L'essentiel à noter ici est que le type de champ « général » de VFP avec des objets Microsoft OLE et ils peuvent être soit lié ou embarqué. En outre, la capacité de VFP à manipuler directement les objets OLE semble être minime car lors de l'appel d'actions sur des objets OLE contenus, l'application associée est réellement exécutée pour ouvrir/modifier le contenu du champ "général" lié à OLE. Si, comme vous l'avez dit, vous pouvez extraire le fichier à la main, c'est probablement le meilleur moyen de récupérer les fichiers, car même VFP fournit des moyens minimaux d'interagir avec les données contenues dans les champs de type général .

4

Si vous connaissez le contenu du champ Général est un document Word, j'ai du code Visual FoxPro recommandé par quelqu'un qui devrait l'extraire.

 
* 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 

Si vous avez besoin d'aide à extraire une image de la table, vous pouvez consulter un article Microsoft KB Je l'ai utilisé dans le passé.

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

Rick Schummerlicht Visual FoxPro MVP

Questions connexes