Access (一般機能)

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

 
(Windows 10 Home : Access 2016)
再度お願いします。エラー:3343の解決方法。
投稿日時: 18/12/18 13:49:54
投稿者: ぽろんちょ

いつも大変お世話になります。
 
一度解決したのですが、また発生したので再投稿させていただきました。
一か月くらい前から「エラー:3343 〇〇〇.accdbを認識できません。」というエラーが発生しています。
 
以前投稿した際に教えていただいた解決方法でエラーがなくなりましたが、また発生するようになってしまいました。さらにいままでエラーが出ていたファイル以外に、別のファイルでも上記のエラーが出るようになりました。
 
以前は以下の部分でエラーが出ていました。
 
    DoCmd.RunSQL "DELETE * FROM 受注データ"
        DoCmd.RunSQL "DELETE * FROM 棚卸し"
        DoCmd.RunSavedImportExport "インポート-ルート別データ" ← ここで反転します。
        DoCmd.RunSavedImportExport "インポート-優先順位"
        DoCmd.RunSavedImportExport "インポート-受注データ"
        DoCmd.RunSavedImportExport "インポート-棚卸し"
 
そこで教えていただいた通りaccessの新規ファイルを作成し、そこにオブジェクトを全てコピーし、
インポート定義を再定義したらエラーが出なくなりましたが、また今回発生してしまいました。
 
そして今回新たにエラーが出たファイルでは、おそらくですがテーブル作成クエリを実行した時にこの
エラーが出ているようです。
 
あまりにもエラーが出るので、オフィスのアップデートによるバグなのかなと思い色々と調べましたが、
そのような情報はありませんでした。
 
どなたか解決方法を教えていただけないでしょうか。
宜しくお願い致します。

回答
投稿日時: 18/12/18 14:37:49
投稿者: Suzu

ファイル自体が壊れるのが頻繁に起きているのではないでしょうか?
 
起きる原因として経験的に多いのは、オブジェクトの変更(テーブルの中身のレコードではなく)
テーブル、クエリ、フォーム等のオブジェクトその物を削除し、再度作成する を繰り返す様な場合に
ファイルの破損が起きやすいです。
 
今回も、テーブル作成が行われているなら、オブジェクトの削除/作成が繰り返される事になります。
 
SQL DELETE を投げて、テーブルのデータを空にしているのであれば
インポートをDoCmd.RunSavedImportExport にておこなうのではなく、
対象ファイルを予めリンクテーブルとしておき、
SQL INSERT 〜 INTO にて、レコードを取りこむ様にしましょう。
 
また、Docmd.〜〜 は、非同期の命令を発するだけです。
要は、「実行しろ」の命令を発しますが、発生するだけ。
終了するのを待たないで次の Docmd.〜を実行する事もあります。
 
今回のも、オブジェクト操作中に インポート操作 との 競合で 問題が発生している事もありえます。
できるであれば、Docmdは使用しないで、
ADOまたは、DAO あたりのExecuteメソッドを使うのがお勧めではあります。

投稿日時: 18/12/24 13:47:34
投稿者: ぽろんちょ

Suzu様
 
ご返信ありがとうございます。
 
>対象ファイルを予めリンクテーブルとしておき、
SQL INSERT 〜 INTO にて、レコードを取りこむ様にしましょう。
 
>ADOまたは、DAO あたりのExecuteメソッドを使うのがお勧めではあります。
 
このような方法もあるのですね。あれからエラーが出ずになんとか動いております。
もう少し様子をみて、またエラーが出るようであれば上記の方法を検討したいと思います。
お忙しいところ有難うございました。