0

まず、私は VFP プログラマーではないので、間違っているのはおそらく単純なことです。

VFP 9 データベースの一般的なフィールドからいくつかのドキュメントを抽出しようとしています。フィールドを効果的にコピーして Word に貼り付け、Word 文書をディスクに保存することで、これを行う方法があります。

私はこれを .prg ファイルの foxpro 開発環境内ですべて動作させています。

私のコードの中身は次のとおりです (そのほとんどは Microsoft サポートの質問からコピーされたものです)。

DO WHILE NOT EOF()
    IF EMPTY(tnoteole) then
        SKIP
        LOOP
    ENDIF

    KEYBOARD "{ctrl+c} {ctrl+w}" 
    MODIFY GENERAL tnoteole 

    TRY
        .EditPaste
    CATCH
    ENDTRY

    .InsertPara

    filename = Path + ALLTRIM(STR(recnum)) + ".doc"
    .FileSaveAs(filename)
    .EditSelectAll
    .EditClear
    SKIP                     

    recnum = recnum + 1
ENDDO

私の問題は、これを開発環境内から実行すると正常に動作し、一般的なフィールド ウィンドウが画面上で点滅し、Word などに貼り付けられることです。しかし、これをコンパイル済みの exe から実行しようとすると (プロセスはユーザーがフォームのボタンをクリックすることでトリガーされます-私はたくさんの作業をしています-実際には、ユーザーの操作を必要としないバッチジョブにしたいのですが)Wordは開きますが、それはそれが得られる限りです. 一般フィールドは画面上で点滅せず、基本的にずっと待機します。

(ああ、厄介なtry/catchのことについて疑問に思っている場合に備えて、いくつかのフィールドを貼り付けるときにWordでいくつかの例外を見つけましたが、try/catchは開発環境で正常に機能するため、それが原因ではないと思います私の問題の。)

では、どうすればこれを機能させることができますか?フォックスプロの暗闇の中で、ちょっと歩き回っています。

助けてください!:)

ありがとう、

クレイグ

4

3 に答える 3

2

いくつかのこと:

  • これは VFP でコンパイルされた EXE ですか? その中に「READ EVENTS」コマンドがありますか? そうしないと、exe コードが実行されてすぐに終了します。これは、問題のように聞こえます。

  • Path変数はどこから取得していますか? それは開発と実行時で異なる可能性がありますか?

  • 設定が必要な設定は、ランタイム環境で明示的に行う必要があります。SET EXCLUSIVE と SET SAFE が思い浮かびます。

それ以外の場合は、MessageBox のデバッグまたはログ記録を少し行うだけで、プログラムがどの程度進んでいるか、変数がどのように設定されているかがわかります。これで十分に機能するはずです。

更新: 私はちょうどModify Generalのドキュメントを見ていましたが、Modify General コマンドで NOWAIT 句を使用する必要があるかもしれません: NOMODIFY も害はありません。 IN WINDOW 句を含めます。

NOWAIT 一般フィールド編集ウィンドウを開いた後、プログラムの実行を続行します。プログラムは編集ウィンドウが閉じられるのを待ちませんが、MODIFY GENERAL NOWAIT を含む行の直後のプログラム行で実行を続けます。プログラムで MODIFY GENERAL を発行するときに NOWAIT を省略すると、編集ウィンドウが開かれ、編集ウィンドウが閉じられるまでプログラムの実行が一時停止します。

于 2009-06-27T00:54:54.800 に答える
1

私は 1987 年から foxpro の開発者であり、1993 年から VFP の開発者です。あなたが持っているデータが機密情報ではない場合、たとえば 20 レコード程度のコピーを入手できます... 何か投げられるかどうか見てみます一緒に、開発モード外で EXE として無人で実行されます。偽の非一般的な列とデータの一般的な列を教えてくれたとしても。

于 2009-06-27T02:50:37.140 に答える
0

Generalフィールドは、Generalフィールド(この場合はWordドキュメント)に格納されている自動化情報に大きく依存します。したがって、実行しているマシンにMicrosoft Wordがインストールされていない場合は、問題が発生します。ご存知かもしれませんが、一般的なフィールドは厄介です。

私の提案は、TRY ...CATCH内にMODIFYGENERALコードを含め、CATCHにいくつかの例外コードを追加して、ここで何が起こっているかを確認できるようにすることです。

LOCAL loException AS Exception

TRY
    KEYBOARD "{ctrl+c} {ctrl+w}" 
    MODIFY GENERAL tnoteole 

    .EditPaste

    .InsertPara

    filename = Path + ALLTRIM(STR(recnum)) + ".doc"
    .FileSaveAs(filename)
    .EditSelectAll
    .EditClear
    SKIP                     

CATCH TO loException
    * Output problem to a text file for review after the process
    STRTOFILE(loException.Message + CHR(13) + CHR(10) ;
              " on " + TRANSFORM(loException.LineNo), ;
              "ExceptionLog.txt", 1)

ENDTRY

NOWAITにも同意します。いくつかのサンプルコードがなければ、開いているウィンドウも閉じる必要があるか、マシンで必要なリソースを消費する可能性があると推測するだけです。

于 2009-06-30T18:46:55.017 に答える