none
office365 Accessで ADO を使い、フォームのレコードセットを指定した場合、データシートビューのソート、フィルタ機能でエラーが出る RRS feed

  • 質問

  • 表題の現象で困っております。

    フォームを作ってあるaccdbとは別のaccdbのテーブルにVBAから接続し、ADOを用いてレコードセットを取得します。それをフォームのレコードセットとして設定し、データシートビューでフォームを開きました。するとレコードの更新や、新規作成は問題なくできるのに、リスト見出しの▼ボタンから選択するフィルタ機能を利用してソートしようとすると「データ プロバイダを初期化できませんでした。」というメッセージが2回出て、正常に機能しません。数値フィルターに関しても、「正しい値を入力してください」等と出て機能しません。

    テーブルをリンクテーブルとしてインポート、もしくは直接ファイルにテーブルを作成しても、VBAでレコードセットをセットした場合は同様のエラーが出ました。

    VBAを使わず、リンクテーブルを設定し、クエリを使用してレコードを取得した場合は正常に動きました。テーブルのaccdbに直接クエリとフォームを作成した場合も問題なく動作しました。

    下記はフォームオブジェクトに作成したソースです。

    -*-*-*-*-*-*-*-*以下ソース-*-*-*-*-*-*-*-*

    Option Compare Database

    Private Sub Form_Load()

    DBFile = "C:\Users\***\Documents\DB_UMS_LAUNCH.accdb"
    Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBFile

    Dim mySQL As String

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

    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cn.ConnectionString = Constr
    cn.Open

    mySQL = "SELECT T_進捗管理.ID, T_進捗管理.実施日, T_進捗管理.設備数, T_進捗管理.写真枚数, T_進捗管理.端末番号, T_進捗管理.開始時刻, T_進捗管理.終了時刻, T_進捗管理.[エラー設備数], T_進捗管理.[エラー枚数], T_進捗管理.作成日, T_進捗管理.更新日 "
    mySQL = mySQL & "FROM T_進捗管理;"

    rs.CursorLocation = adUseClient
    rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic

    Set Me.Recordset = rs

    End Sub

    -*-*-*-*-*-*-*-*以上ソース-*-*-*-*-*-*-*-*

    この現象に心当たりのある方は、解決策を教えていただけないでしょうか。

    もしこの現象が解決できない場合は、フィルタ機能を無効にし、VBAとコマンドボタンでソートをできるようにすることも考えていますが、やはりデータシートのフィルタのほうが、わかりやすくユーザにも満足してもらえそうなので、できればこの方法を利用したいです。

    2020年5月1日 5:12