パソコン(ソフト)

【Access】「データプロバイダーを初期化できませんでした」という実行時エラー31

【Access】「データプロバイダーを初期化できませんでした」という実行時エラー31

フォームからコンボボックスを使ってデータ抽出をした後に、フォームのレコードセットにするVBAにて抽出したデータを表示させました。

抽出を解除するために、元の全データ表示にしようとしたら、

ココに注意

データプロバイダーを初期化できませんでした

実行時エラー’31’となりました。

 

実行時エラー'31'とは?

ネット検索して探してみましたが、エラー'31'って見つかりません。

探し方が甘いのかな!?

次に、「データプロバイダーを初期化できませんでした」という内容をしらべてみました。

なかなか解説しているサイトにヒットしません。

なので、「データプロバイダー」だけで調べてみると、

データ プロバイダーは、SQL データベース、インデックス付きのシーケンシャル ファイル、スプレッドシート、ドキュメント ストア、メール ファイルなど、さまざまなデータ ソースを表します。(マイクロソフト

 

つまり、

さらに詳しく

データソースが初期化できなかったってことだな!!

 

なにそれ!?

 

抽出VBAコードと解除VBA(エラー)

Private Sub 抽出ボタン_Click()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

On Error GoTo Err_Handler

    Set cn = CurrentProject.AccessConnection
    Set rs = New ADODB.Recordset
            With rs
            Set .ActiveConnection = cn
            .Source = "SELECT * FROM orderdata_sorting_nsys WHERE shipper ='" & search_mado & "'"
            .LockType = adLockOptimistic
            .CursorType = adOpenKeyset
            .Open
            End With
        Set Me.Recordset = rs
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing
ExitErr_Handler:
        Exit Sub
Err_Handler:
        MsgBox "エラー: " & Err.description
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing
End Sub

上記のVBAからデータを抽出して、フォームのレコードソースにしました。

そして、それを解除しようと下記のコードを実行するとエラーになりました。

Private Sub 解除ボタン_Click()
  Me.RecordSource = "orderdata_sorting_nsys"
End Sub

抽出をかけないで、解除するとエラーは出ません。

自分のスキルでは何でエラーがでるのかが理解できません。

 

エラーが出ない解除VBAコード

いろいろと試した挙句に下記の抽出時に使用したVBAコードを使ったらエラーが出なくなりました。

Private Sub 解除ボタン_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

On Error GoTo Err_Handler

    Set cn = CurrentProject.AccessConnection
    Set rs = New ADODB.Recordset

            With rs
            Set .ActiveConnection = cn
            .Source = "orderdata_sorting_nsys"
            .LockType = adLockOptimistic
            .CursorType = adOpenKeyset
            .Open
            End With

        Set Me.Recordset = rs
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing

ExitErr_Handler:
        Exit Sub
Err_Handler:
        MsgBox "エラー: " & Err.description
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing
End Sub

 

問題は解決しましたので良いのですが、もっと的確なエラー表現が欲しいと願うのは自分だけじゃないはずです。

 

 

-パソコン(ソフト)
-, , , , , , , ,

Translate »

© 2021 PCTips