- 締切済み
リンクテーブルに対する一括削除でロック違反発生
<環境> OS;Windows7 DB:Oracle11g AP:ACCESS2003(2000形式) お世話になります。 フォーム上で検索条件を指定し、検索を実行するとサブフォームに抽出結果を出力する。。。 といったものを作成しています。 検索実行時には (1)前回の検索結果を取引テーブルWKから削除 (2)指定した条件を基に取引テーブルから取引テーブルWKへテーブル追加 (3)サブフォームで表示 このような流れでコーディングしています。 この中で、(1)を実行すると必ずロック違反(「10件中9件でロック違反」「25件中24件で ロック違反」...など)が発生してしまう状況です。 各テーブルはOracle11gからのリンクテーブルとなり、ローカルテーブルとした場合には発生しません。 その他、確認している状況としては・・・ ・フォームを閉じた状態で(2)の追加SQLを実行後に(1)の削除処理を行っても同様の現象が起きる ・フォームが閉じた状態で(2)の追加SQLを実行後に取引テーブルWKを開き手動で削除なら再現せず。 ・Oracle11gのテーブルに対して直接(Object Browser利用)SQLを実行した場合には再現せず。 現象の発生状況から見て、ODBCに原因があるか、或いは使用しているACCESSのバージョンが古い事が原因なのか。。。 アドバイスをいただけますと幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- IDii24
- ベストアンサー率24% (1597/6506)
オラクルは正直です。開いているデータにたいして削除は出来ません。アクセスでフォームをソースにして開くという事は全情報を取得して編集対象にしますよと宣言しているようなものです。だからオラクルはしっかりロックしているのです。その人のために。それを横から削除することは出来ません、まずテーブルを解放してください。 ローカルテーブルは自分のものだから削除できるのです。アクセスは使うデータは全部自分の自由という作りです。オラクルは誰のものかを自動判断出来ません。複数の人の使用を前提にしている場合判断させるには判断させるプログラムが必要です。 これはデータベースシステムのプログラミングの基本中の基本でありこれを理解してないとシステムは組めません。 リンクテーブルを過信してはいけません。あれは単にサーバー側に大量の情報を格納する為だけに存在すると考えたほうが良いです。 それでも偶然にロックがかからない場合があります。それはアクセスが投げる処理がたまたまロックと関係ない部分に投げているから。それでも大丈夫だと使い続ける人も多数居ます。それを続けるといずれ破壊もあり得ます。簡単にアプリが組めるのにいまだにスクラッチ開発が続いているわけももなく、スクラッチが必要だから難しい言語を覚える必要があるのです。 つまり簡単にアプリは作れないという事になります。