重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

初めまして。

access2013で作成したものをaccess2016で動かしています。(2013では動いていたようです。)

「3211 ほかのユーザまたはプロセスで使用されているためロック出来ません」が出てきてしまい回避方法を教えて頂きたく。。。

処理としては、Excelに書かれたキー項目で外部テーブルを検索し、複数レコードが存在した場合に
内部テーブルにコピーしサブフォームで表示し、表示されている内容を利用者が選択し、CSVに書き出すといった処理を行っています。

内部テーブルへのコピー(作成)は、以下のSQLでDoCmd.RunSQLで行っています。
 SELECT A,B INTO 内部テーブル FROM 外部テーブル WHERE 検索キー

デバッグモードで実行したところ、2回目のテーブルへのコピー(作成)時にエラー
になっていました。
何か回避方法があるか、ご教授いただければと思います。

因みにソースコードはこんな感じです。
public SUB1

Excelが無くなるまで読み込み

 外部テーブル検索

 外部テーブルを検索し複数レコードが存在した場合
  DoCmd.SetWarnings False
  内部テーブル作成用SQL生成
  DoCmd.RunSQL 生成SQL <-------2回目:ここで3211エラー発生 
  Call Docmd.OpenForm(FormName:=選択画面, WindowMode:=acDaialog)
  DoCmd.SetWarnings True

 CSV出力

End SUB

A 回答 (1件)

こんにちは


どうも今一つ状況が分からないので参考程度に。
>Excelが無くなるまで読み込み
ループ処理をしているのでしょうか?
書き出すテーブルの構造は同じ?

テーブル作成クエリではなく、クエリのひな形を作り
そこへの追加クエリにして、実行する前に適宜削除クエリで真っ新にする。
で、
DoCmd.RunSQL 生成SQL ではなく、Currentdb.execute "ここに追加クエリのSQL文"

※テーブルの作成・削除を乱用するとデータベースファイルが破損しやすくなるので
なるべく避けた方が吉。
    • good
    • 0
この回答へのお礼

返信おそくなりました。すみません。
削除してから追加する様に変更してみます。
ありがとうございました。

お礼日時:2021/03/17 13:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A