"Microsoft Acess が OLE サーバーまたは ActiveX コントロールと通信しているときにエラーが発生しました" のエラー

【解決しました】


根本的な原因箇所は特定できていないものの、対処法はわかりました。その結果、目的とする検索ができるようになりました。

  • AccessのDBへのデータ取込時に異常が起こっていると仮定し、今回のフォームに必要なカラムをひとつずつ取り込み、検索ボタンが正常に動作するかチェックしました。

  • 本検索フォームに利用想定しているカラムのうち、正常に動作することが確認できた最小限のカラム構成で実施したところ、検索ができるようになりました。

  • どのカラムのデータが異常なのか、またどのカラムが関連すると異常が起こるか、などの原因は特定できていません

概略


Microsoft365のAccessにて新規にデータベースを作成、テキストファイルから一テーブルのみ取込、データベースサイズは1.2GB(2GBの上限に収まっている)。その一テーブルに対してフォームを作成し、検索ボタンを設置し、フォームビューにて検索ボタンを押すと以下のエラーが出ます。
(実際にはVBAを使って検索できるように作りこみましたが、エラーの原因分析のために検索ボタンのみつけて試しました)

改善策、もしくは、原因特定の手順、確認箇所などご指摘いただけると助かります。

状態・状況

端末

Windows 11 ProのPCです。

表示されたエラー

Microsoft Acessが OLE サーバーまたは ActiveX コントロールと通信しているときにエラーが発生しました。
* マクロ名、ユーザー定義関数名、[イベントプロシージャ]以外の式が指定されています。
* 関数、イベント、マクロ評価でエラーが発生しました。

テーブル外観

文字化けしておらず、また、日本語のカラム名もAccessでは一般的ですし、一見すると、問題ないように見えます。
画像の説明をここに入力

フォームのVBA

上記の質問文にある、試しに検索ボタンだけで実施したケースのVBAの状態は、原因特定のため、検索ボタンだけをフォームに配置し、コードは以下のような状態になっています。

Private Sub 検索_Click()
End Sub

対応しているフォーム
画像の説明をここに入力

実施した対策

見つけた解決策として以下のような情報があり、適用したのですが改善せず。

  1. フォームを作り直す(フォームを複製し、元のフォームを削除する)

  2. データベースの最適化をする

  3. 参照設定で不要分のチェックを外す
    参照設定は以下のとおり(チェックを外そうとするとアラートが出るものを残した状態)
    画像の説明をここに入力

なお、デフォルトの以下の状態でも同様の結果です。
画像の説明をここに入力

原因特定のために実施したこと

環境依存の問題なのか、本データやテーブルに問題があるのか、特定するため以下実施しました。

  1. データ取込等に問題があるかどうかの検証
    新規データベースを作成し、本件のデータをあらためてインポートし、フォーム作成、検索ボタンのみ設置、その状態で、イベントプロシージャ選択→VBAコードを呼び出し、フォームビューで実行したところ、本件のエラーが出ました

  2. 環境依存で何か起こっているかどうかの検証
    新規データベースを作成、フィールドはid,itemcode,itemname、及び、レコードは1,"00000001","しろ"といった簡単な値のレコードを3行くらいのデータを使ってテーブルを作り、それに対してフォームを作成、検索ボタンのみを設置しました。その状態で、イベントプロシージャ選択→VBAコードを呼び出し、最後に、フォームビューを実行したところ、本件のエラーは起こりませんでした。

  3. データ及びフォームに何か問題があるかの検証
    エラーが出た同じデータベースにて、上記「2」で実施した手順のうち、テーブル作成からフォーム作成、検索ボタン設置、VBAコードを呼び出しまで同じ手順で行い、同フォームビューで実行したところ、本件のエラーは起こりませんでした

3の結果、同一のデータベース内、同一の参照設定でも成功する場合があるので、テーブルもしくはデータに何か問題があるように思えています。

参考

念のため、本来のVBAのコードを以下に掲載します


Option Compare Database

Private Sub 履歴検索_ボタン_Click()

'変数等
'伝票日付:日付検索FROM/日付検索TO
'得意先コード: 得意先コード検索
'得意先名: 得意先名検索
'品目コード: 品目コード検索
'品目名: 品目名検索

'検索用変数の定義
Dim filter_txt As String

filter_txt = ""

'FROM、TOの前後不備チェック
If Me!売上日検索FROM <> "" And Me!売上日検索TO <> "" Then
If Me!売上日検索FROM > Me!売上日検索TO Then
MsgBox "期間指定が不適切です。再度入力してください。", vbCritical + vbOKOnly, "期間指定不備"
Exit Sub
End If
End If

'売上期間
If Me!売上日検索FROM <> "" Then
If Me!売上日検索TO <> "" Then
filter_txt = "伝票日付 >= #" & Me!売上日検索FROM & "# and 伝票日付 <= #" & Me!売上日検索TO & "#"
Else
filter_txt = "伝票日付 >= #" & Me!売上日検索FROM & "#"
End If
ElseIf Me!売上日検索TO <> "" Then
filter_txt = "伝票日付 <= #" & Me!売上日検索TO & "#"
End If

'得意先名
If Me!得意先名検索 <> "" Then
If filter_txt = "" Then
filter_txt = "得意先名 like '*" & Me!得意先名検索 & "*'"
Else
filter_txt = filter_txt & " and 得意先名 like '*" & Me!得意先名検索 & "*'"
End If
End If

'得意先コード
If Me!得意先コード検索 <> "" Then
If filter_txt = "" Then
filter_txt = "得意先コード = '*" & Me!得意先コード検索 & "*'"
Else
filter_txt = filter_txt & " and 得意先コード = '*" & Me!得意先コード検索 & "*'"
End If
End If

'品目名
If Me!品目名検索 <> "" Then
If filter_txt = "" Then
filter_txt = "品目名 like '*" & Me!品目名検索 & "*'"
Else
filter_txt = filter_txt & " and 品目名 like '*" & Me!品目名検索 & "*'"
End If
End If

'品目コード
If Me!品目コード検索 <> "" Then
If filter_txt = "" Then
filter_txt = "品目コード = '*" & Me!品目コード検索 & "*'"
Else
filter_txt = filter_txt & " and 品目コード = '*" & Me!品目コード検索 & "*'"
End If
End If

'削除
'If Me!削除検索 = False Then
' If filter_txt = "" Then
' filter_txt = "削除 = false"
' Else
' filter_txt = filter_txt & " and 削除 = false"
' End If
'End If

If filter_txt = "" Then

Me.FilterOn = False

Else

Debug.Print filter_txt
Me.Filter = filter_txt
Me.FilterOn = True
Me.OrderBy = "伝票日付 DESC"
Me.OrderByOn = True

End If
End Sub

AtsuHSJ さん、こんにちは。

外しているかもしれませんが、投稿いただいている参照設定の参照するライブラリが少ない気がします。

他で上手く行っているデータベースがあれば、そのデータベースの参照設定を開いて同じようにチェックを付けてみるとどうでしょうか。

***2023/9/29デフォルトの参照設定の画像に差し替えました

---以下署名---
マイクロソフトコミュニティはユーザー同士の情報交換の場所です。
アカウントは二段階認証でセキュリティを強化し、乗っ取り被害から身を守りましょう。
https://support.microsoft.com/ja-jp/account-billing/c7910146-672f-01e9-50a0-93b4585e7eb4

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

参照設定は、同じデータベースを参照している別の人の設定内容を参考にして下さい。

又は、初期インストールされたAccessでの参照設定を参考にしつつエラーが出れば

必要に応じてライブラリを追加して下さい。

私は、Accessをインストールしてないので初期値を確認出来ません。

(初期設定されているものは外さないで下さい。 何らかのトラブルが発生します。)

参照設定が適切になってもエラーが継続する様であれば、別要因ということかと思います。

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

ご回答ありがとうございます。

ご提示いただいた参照設定と同様にしてみましたが、改善しませんでした。

また、原因箇所の切り分けのため、同一のデータベースに対して、新規に少数のカラム数をもつテスト用テーブルを作成し、そのテーブルに対してフォームを作成、検索ボタンのみ設定し、実行したところ、エラーは起こりませんでした(参照設定はエラーが起こったフォームと同じ設定)

そのため、テーブルもしくはデータに何か問題がありそう、ということで、情報整理してみようと思ってます

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

ご回答ありがとうございます。

新規にデータベースを作成したときのデフォルトの参照設定の指定にて試しましたが、改善しませんでした。

また、原因箇所の切り分けのため、同一のデータベースに対して、新規に少数のカラム数をもつテスト用テーブルを作成し、そのテーブルに対してフォームを作成、検索ボタンのみ設定し、実行したところ、エラーは起こりませんでした(参照設定はエラーが起こったフォームと同じ設定)

そのため、テーブルもしくはデータに何か問題がありそう、ということで、情報整理してみようと思ってます

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


最終更新日: 2024年5月16日 表示数 932 適用先: