3

VFP 9 アプリケーションを SQL Server に移植しています。VFP アプリには、「一般」フィールドを含むいくつかのテーブルがあります。フィールドにクエリを実行するとバイト配列が取得され、それをディスクに保存すると、内部を見て、それが Word ドキュメントや Paint BMP などであることがわかります。

いろいろ読んでみると、general フィールドは独自のフォーマットであり、ドキュメントのプレビューのサムネイル画像が含まれていることがわかりました (特にそうです)。

最初にファイルの種類を抽出し、次に元のファイルとして保存できる実際のファイル データを抽出するコードを教えてください。(プレビュー画像を取得するのもいいでしょう。)

どうやら昔、誰かが foxpro で GENTOFIL.PRG というプログラムを書きました。これは、一般的なフィールドをファイルに変換するように聞こえます。しかし、それを見つけようとするとき、グーグルはあまり役に立ちません!

4

2 に答える 2

4

[一般]フィールドの内容がWord文書であることがわかっている場合は、それを抽出する必要がある誰かが推奨するVisualFoxProコードがあります。

*最初にプログラムでフォームを作成します
loForm = CREATEOBJECT( "Form")

*一般フィールドでVFPテーブルを開きます。必要に応じて名前を変更します
0エイリアス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

USE IN(SELECT( "WordData"))

戻る

テーブルから画像を抽出する際にサポートが必要な場合は、過去に使用したMicrosoftKBの記事を確認してください。

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

Rick Schummer Visual FoxPro MVP

于 2009-06-07T18:20:14.103 に答える
3

VFP の「一般」フィールド タイプは少し奇妙です...

VFP ヘルプ ドキュメントから:

一般フィールドには、フィールドの実際の内容への 10 バイトの参照が含まれます: 別のアプリケーションによって作成されたスプレッドシート、ワード プロセッサ ドキュメント、または画像。ただし、実際のデータの種類と量は、オブジェクトを作成するオートメーション サーバーと、OLE オブジェクトをリンクするか埋め込むかによって異なります。

OLE オブジェクトをリンクすると、テーブルにはデータへの参照とそれを作成したアプリケーションへの参照のみが含まれます。OLE オブジェクトを埋め込むと、テーブルにはデータのコピーと、それを作成したアプリケーションへの参照が含まれます。一般フィールドのサイズは、使用可能なディスク容量によってのみ制限されます。

ここで注意すべき重要なことは、VFP の「一般的な」フィールド タイプは Microsoft OLE オブジェクトを処理し、それらはリンクまたは埋め込みのいずれかであるということです。また、OLE オブジェクトを直接操作する VFP の機能は最小限のように見えます。これは、含まれている OLE オブジェクトに対してアクションを呼び出すときに、関連付けられたアプリケーションが実際に実行され、OLE にバインドされた「一般」フィールドの内容を開いたり編集したりするためです。

あなたが言ったように、手動でファイルを抽出できる場合は、VFP でさえ、一般的な型フィールドに含まれるデータと対話する最小限の方法を提供するため、ファイルを取得するためのおそらく最良の方法です。

于 2009-01-23T16:34:02.107 に答える