- ベストアンサー
ACCESSのテーブルロックについて
テーブルのロックについて教えて下さい。 ACCESS2000にてテーブル作成クエリを作成し、その作成したテーブルをフォームで参照しています。 そのフォームを開いたままで、再度、同じテーブル作成クエリを実行すると、 「テーブル○○は現在ほかのユーザまたはプロセスで使用されているので、ロックできませんでした。」 というメッセージが表示され、クエリを完了することができません・・・ これを回避する(クエリを優先する)方法、設定があったら教えて下さい。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そりゃ、無理でしょう。「そのフォーム」、元となるテーブルがなくなっては困りますから。 1)「そのフォーム」を閉じてから、テーブル作成し、フォームを再表示させてはどうでしょうか? 2)テーブルのレイアウトが変更されないなら、削除クエリー、レコード追加クエリーを使うことができます。ただ、この場合、「そのフォーム」に表示されているレコードは削除されているので、「delete」という表示になります。(再表示しないと意味がないです。) 3)最初のフォームと後のフォームと並べて比較したいなら、テーブル作成クエリーも、フォームも別名にして作成する必要があると思います。
その他の回答 (1)
1)テーブル作成しなおす必要、ないですよね。 社員番号、社員名、住所が入っている選択クエリーを作ってください。 抽出条件(where句)に、Forms![フォーム名]![社員番号]を入れてくださいね。 DoCmd.Requery(あと引数が必要かも)でリクエリーしなおすと思います。 2)社員番号って、一意ですよね。1人探したらいいだけですよね。 dlookup関数を使うこともできます。 例えば、住所のテキストボックスのソースフィールドに 社員番号が数値の場合でしたら、 =DLookup("住所", "住所テーブル", "社員番号=" & 検索社員番号フィールドの名前 ) 社員番号がテキストの場合でしたら、 =DLookup("住所", "住所テーブル", "社員番号='" & 検索社員番号フィールドの名前 & "'" ) と指定する方法もあります。 "や'や&の使い方を間違えないように。 調べてから使ってください。 3)全部のフィールドを一覧表に並べておいて、双眼鏡マークの「検索ボタン」を押して探してもらえばいいんじゃないですか? そうしたら、名前で探すこともできるし、うろ覚えの社員番号でも探せるし。 使い方を限定すると、使いにくいものにあることがあります。 作りこむより、アクセスの機能を活用しちゃいましょう。
お礼
ありがとうございました。 あれからいろいろとアレやコレやと試してみましたが、 やっぱりアクセスの機能を活用する方が無難ですね。 どうしても見た目のかっこよさにこだわって検索結果を同一のフォームに表示させたかったのですが、入力フォームと結果参照フォームにわけることにしました。
補足
やはり無理ですが・・・ まだまだ初心者なので、設計仕様から間違っているのかもしれませんが、 検索フォームにて入力された値に対して、テーブル作成クエリを実行し、その結果をサブフォームに表示する。 といったアクセスを作成しようと思っております。 例: 検索フォームにて社員番号を入力しコマンドボタン(クエリ)を実行すると、社員テーブル[社員番号、社員名]と住所テーブル[社員番号、住所]より該当社員番号の社員番号、社員名、住所を項目とする新テーブルを作成し、その結果をサブフォームに表示する。 何か良いお知恵がありましたら、宜しくお願いします。