Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2016)
フォームを更新後にエラーメッセージが表示される"3211"
投稿日時: 21/09/09 13:36:06
投稿者: やっほー

AccessのVBA初心者の為、ご指導のほどよろしくお願いします。
 
フォームに更新ボタンを作成して、
フォームのデータ内容を変更して、
再度、更新ボタンをクリックして、同じフォームを再表示させたいのですが、
クエリを実行させて集計してテーブルの作成をし直しているせいなのか、
デバックが表示されます。
「3211 テーブル'T_データ'は現在ほかのユーザーまたはプロセスで使用されているので、ロックできませんでした。」
と表示されます。
お手数ですが、宜しくお願い致します。
Private Sub データ更新_Click()
     DoCmd.SetWarnings False 'メッセージを表示しない(開始)
     DoCmd.Close acForm, "F_集計データ", acSaveYes
     'クエリ実行
     DoCmd.OpenQuery "Q_データ"
     DoCmd.OpenForm "F_集計データ", acNormal, , , acFormEdit, acWindowNormal
     DoCmd.SetWarnings True 'メッセージを表示しない(終了)
End Sub

回答
投稿日時: 21/09/09 14:30:34
投稿者: sk

引用:
フォームに更新ボタンを作成して、
フォームのデータ内容を変更して、
再度、更新ボタンをクリックして、同じフォームを再表示させたいのですが、
クエリを実行させて集計してテーブルの作成をし直しているせいなのか、
デバックが表示されます。

引用:
DoCmd.OpenQuery "Q_データ"

仮に[Q_データ]がテーブル作成クエリであるとして、
その「更新」を実現するために用いるのが
テーブル作成クエリでなくてはならない理由が
あるのでしょうか。
 
引用:
「3211 テーブル'T_データ'は現在ほかのユーザーまたはプロセスで使用されているので、
ロックできませんでした。」

何らかの形で開かれているテーブルの定義を変更したり、
削除したりすることはできません。
 
・テーブル[T_データ]の構造まで変更する必要がないのであれば、
 [T_データ]と連結している[F_集計データ]のカレントレコードを保存した上、
 他のアクションクエリ(追加クエリ、更新クエリ、削除クエリ)を
 使用するようにする。
 
・[T_データ]と連結している[F_集計データ]の表示内容を
 最新の状態に更新したいだけなら、上記の一連のクエリを実行した後で、
 [F_集計データ]の Requery メソッドを実行する。
 (そのフォームを閉じたり開き直したりしなくてもよい)

投稿日時: 21/09/11 16:01:51
投稿者: やっほー

引用:

仮に[Q_データ]がテーブル作成クエリであるとして、
その「更新」を実現するために用いるのが
テーブル作成クエリでなくてはならない理由が
あるのでしょうか。

  
テーブル作成クエリを用いて、データの集計をしたいです。
考え方が甘いかもしれませんが、
フォームを閉じて、クエリを実行して、再度、フォームを開けば、
更新の様に出来ると思ったのですが・・・。
テーブル作成クエリでなくれはならない理由です。
例)テーブル作成クエリ前
コード/名前/数量
10001/田中/2000
10002/鈴木/500
10001/田中/1000
10003/小田/1500
テーブル作成クエリ後
コード/名前/数量→グループ/グループ/合計
10001/田中/3000
10002/鈴木/500
10003/小田/1500
の様に編集・削除・追加など行いたいです。
何卒より良いアドバイスやソースコードをよろしくお願い致します。

回答
投稿日時: 21/09/13 10:30:43
投稿者: sk

引用:
コード/名前/数量
10001/田中/2000
10002/鈴木/500
10001/田中/1000
10003/小田/1500

このテーブルのレコードを元に
 
引用:
コード/名前/数量→グループ/グループ/合計
10001/田中/3000
10002/鈴木/500
10003/小田/1500

集計クエリによって得た上記の結果を、[F_集計データ]のレコードソースである
テーブルに出力したい、ということなのであれば、次のような操作を
VBA によって実行なさればよろしいのではないでしょうか。
 
1. 後者のテーブル(集計結果の出力先)の全てのレコードを削除する
   削除クエリを実行する。
 
2. 前者のテーブル(集計元)のレコードを[コード],[名前]でグループ化し、
   グループごとの[数量]の合計を集計した結果を、後者のテーブルに
   出力する追加クエリを実行する。
 
3. [F_集計データ]の再クエリ( Requery メソッド)を実行する。

投稿日時: 21/09/23 17:59:01
投稿者: やっほー

ご連絡が遅くなり大変申し訳ございません!
解決しました。「更新ボタン」が出来る様になりました。
ありがとうございます。