質問

当社の ERP システムはハイブリッドです。実際のデータは SQL ですが、ユーザー情報、プロファイル、権限、セキュリティなどを含むテーブルは Visual FoxPro にあります。

VFP データベースへの排他的アクセスを取得する必要があります。プログラム自体を使用してシステムから全員を削除すると、全員がシステムから外れたことが示されます。次のコードに対して次の応答が返されます。

set excl on
open data l:\M2MDATA\Util\util.dbc excl

私が受け取る応答は次のとおりです。ファイルアクセスが拒否されました。サーバーマネージャーを開いたところ、VFP ディレクトリでファイルを開いている人は誰もいませんでした。

VFP には、誰が、何をファイルを開いているのかを判断できるコマンド、および/または開いている FoxPro 内のセッションを強制終了する方法はありますか?

グーグルで調べてみましたが、見つかりませんでした。

役に立ちましたか?

解決

あなたは、Sysinternalsの(マイクロソフト)からプロセスエクスプローラをチェックアウトする場合があります。

http://technet.microsoft.com/en-us/sysinternals/ default.aspxをする

あなたは、検索を使用することができます|ファイルハンドルやDLLのメニューオプションとDBCファイルの名前に置きます。プロセスエクスプローラは、あなたのプロセスIDとファイルを開いているプロセスを教えてくれます。

あなたがネットワーク(ファイルサーバまたはピア・ツー・ピア)上のファイルを共有している場合は、

、「サーバー」に頭の上やコンピュータの管理を実行します。共有フォルダ>開いているファイルにドリルダウンして、あなたがうまくいけば、ファイルのリストは、ネットワーク上の他のユーザーがコンピュータ上で開かれているはずです。

リック

他のヒント

ジェフで述べたように、

、一つのことは、一人の人間のマシン上のときにクラッシュすることができ、そして、彼らはネットワークから切断取得します。サーバーは、まだファイルは、いくつかの低レベルのハンドルで開かれていると考えています。そして、ユーザが再コネクトは、以前のすべての設定はに表示されたときに、自動魔法のリリースを取得、システムに再度取得し、その後、すべてが細かいように見えます。また、コンピュータの管理下サーバーから共有ドライブをチェックして、誰が、彼らはそれ以外の無様な切断があった場合でも、ファイルが実際に開いていることがあります。

テーブルの上に事前テストなど排他性への代替として、あなたはそれがあまりにもテーブル自体以外の何物でもないので...

のようなもの.DBCに対してクエリを試してみて、実行することをお勧めします
nStatus = 0
try
   use L:\M2MData\Util\Util.dbc shared
   ** Ok so far, now try exclusive
   nStatus = 1
   use L:\M2MData\Util\Util.dbc EXCLUSIVE
   nStatus = 2

catch to loTrapMsg
   messagebox( "Can't get exclusive use of DBC" )

endtry 

if nStatus = 2
   ** you have exclusive use of it as a simple TABLE
   ** Now, what do you want to do
   use
   open database L:\M2MData\Util\Util.dbc EXCLUSIVE

endif 

(ゾンビロックを残して)開いているデータベースを持っていたか、データベースがリソースを解放されていないネットワーク共有を介して接続されている間、いくつかのプログラムがクラッシュした可能です。

このような場合、私は、通常、データベースは、データベースが存在する(SANまたはネットワークディスク上の場合)ディスクを再マウント/位置又は取り外しされているサーバーの再起動のいずれかに減少しています。

サーバー便宜的ロックとキャッシュされたオープンの設定については、Microsoftのサポートサイトでご覧ください。あなたは、記事で説明するように0に0とは、CachedopenlimitにEnableOplocksを設定する必要があるかもしれません。また、オンアクセスウイルススキャンは、この種のもので悪名高いです。

言及した優れたのSysinternals Process Explorerをツールに加えて、私は、サーバー上の任意のファイルを右クリックし、ロックプロセスを見ることができますロックフリーと呼ばれるツールを使用します。

プロンプトで実行され、指定されたファイルのハンドルを持っているもののプロセスに多くの情報を与える「ハンドル」と呼ばれる別のSysinternalsのツールもあります。

これを試してみてはいかがでしょうか:

  1. サーバーを再起動します (可能な場合)。今では誰も使っていません。

  2. DBC にリンクされているテーブルのリストを取得し、各テーブルを個別かつ排他的に開くスクリプトを作成します。いずれかのオープンが失敗しますか?

  3. おそらく、テーブルの 1 つが別のサーバー上のテーブルに再度リンクされている可能性があります。

ほんの少しのアイデアです。

あなたはそれがアクセス許可の問題ではないことを確認する共有アクセスのためにそれを開くことができます確認して価値があるかもしれません。

私は前にそのメッセージを持っているし、問題は単純で、Windowsエクスプローラを起動し、ファイルが置かフォルダを開こうとします。フォルダにアクセスすることができない場合は、そのVisual FoxProを行います。私はあなたがドライブL.のcmiiwを使用していることを言及するので、あなたは共有フォルダを使用していると仮定します)。

私は(何の排他がDBCへのアクセスがない)同じ問題を抱えていたが、別の理由。

我々は低レベルのコマンド(FOPEN、FSEEK、FPUTS、FCLOSE、FCREATE)を介して処理テキストファイルにアクセスし、特定の活動をprotocollingています。私たちは何の問題もなく、4月1日、2000年以来そうしています。

「重篤な有害ネットワークイベント」の後、私たちのシステムはまだ走ったが、ハイパーカタツムリの速度で。たプロトコルすべてのアクションは、約5分かかりました。 FoxProが明らかに(ところで、予告なしに)それらをスキップし、最後に5分の間に、低レベルの手順を再試行してます。

テキストファイルには、データベース自体の決して部分です。 Nontheless、DBCもテキストファイルにゾンビロックの所有者だったマシン(電源オフ)からゾンビのロックとアクセスできませんでした。 DBCロックだけthextファイルのロック帽子を除去した後に解放することができます。

いいえアイデアは、これが接続されているかが、その後、すべてがある、まだ再び大丈夫だったんや。サーバーは、私はとfaniliarないですNovell NetWareの、です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top