2011-08-05 7 views
0

VFP TABLEUPDATE()関数へのラッパーがあります。これは、作成された他のテーブルへの追加や変更を記録します。複数のユーザーがアプリ全体で保存したり編集したりするため、ログテーブルで「ファイルが使用中です」というエラーが発生するため、ログテーブルが時々乱されます。 INSERTが呼び出されたときにテーブルは開いていません。Foxpro 7 INSERTの前に 'File is in Use'のテスト

ファイルが排他的に開いているプロセスはありません。理想的には、私は

  • チェックすると、ファイルが早く、私は

レコードがされることはありませんすることができますようにして取得します

  • INTO INSERTを使用してファイルに
  • 書き込みを開くために利用できるかどうかを確認します編集、INSERTのみ。 INSERTを発行する前にテーブルをテストする方法はありますか?

  • 答えて

    0

    私が最初に考えたのは、テーブルを長時間開いておいて、追加した予備チェックがテーブルを長く張ってしまうことです。 INSERTの後にテーブルを閉じますか?

    プロセスの開始時にログテーブルが開いていないとします。つまり、SQLが実行できるようにFoxがテーブルを静かに開きます。それを排他的に開いているのですか?その後、明示的に閉じていますか?

    +0

    はい、私は、必要以上にテーブルをだますことは、問題を複合化することだけであることを心配しています。私のINSERT、DATETIME()とJUSTSTEM()には2つの関数がありました。これらを削除し、INSERTの前に変数に代入してから、変数をINSERTしました。 'INSERT INTO cTableName(変数....)VALUES(値...) UNLOCK IN cTableName SELECT(" cTableName ")で使用します。 排他はオフです。 – towardus

    1

    ファイルが使用されている(エラー3)場合、Visual Fox Manualに従って:現在開かれているファイルに対してUSE、DELETE、またはRENAMEコマンドを実行しようとしました。つまり、DELETEまたはRENAMEは問題外です。
    USE IN SELECT( "cTableName")である必要があります。 EXCLUSIVEがOFFの場合、ファイルが開いているかどうかを確認する必要はありません。
    INSERTの前にテーブルを開かないでください。 INSERTを実行するだけで、後でテーブルを閉じる必要はありません。
    そして、UNLO​​CK IN cTableName USE IN SELECT( "cTableName")を取り除くことができます。

    0

    あなたの挿入ルーチンでテーブルをロックしようとしましたか?

    IF FLOCK("mytable") 
        INSERT INTO ...... 
    ELSE 
        WAIT WINDOW "Unable to lock" 
    ENDIF 
    

    おそらくこれをDO WHJILEループに入れますか?