フォームからコンボボックスを使ってデータ抽出をした後に、フォームのレコードセットにする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
問題は解決しましたので良いのですが、もっと的確なエラー表現が欲しいと願うのは自分だけじゃないはずです。