misc.log

日常茶飯事とお仕事と

Access VBA、ADODBのレコードセットでSortメソッドを呼ぶとエラー

なんで今時こんなVBAやってるんでしょうね……2020年だよ……。

と言っても仕方ないのでやりますが。AccessVBA。40万件ほどのデータをテキストファイルに吐き出すため、VBAでかかれた処理をメンテしています。出力時にソートを掛ける必要がでてきたのでレコードセットに対してSortメソッドを呼んでみました……が……。

f:id:frontline:20200305201849p:plain
現在のプロバイダーは並べ替え、またはフィルタリングに必要なインターフェイスをサポートしていません

こんなエラーが。

こちらの掲示版で検索してみたところ、どうやらSortメソッドは接続に対するカーソルロケーション指定(CursorLocationプロパティ)が「adUseClient」でないと使えないそうです。

www.accessclub.jp

デフォルトの指定は「adUseServer」。カーソルがサーバー側にあるという設定。一方でUserClientを選ぶと、自分の手元でカーソル処理が動くので、いろいろと細かい機能がつかえるようになるとか。その1つがSortのようです。詳しくはこちらに記載されています。

docs.microsoft.com

というわけで接続のプロパティなどを下記のように書き換えて処理を実行したところ、Sortメソッド利用不可のエラーは消えたのですが……

Set con = CurrentProject.Connection
con.CursorLocation = adUseClient
rec.Open tableName, con, adOpenDynamic, adLockOptimistic

これがでました……あぁ……。32bit Officeの限界か(エラーが出る寸前、利用メモリは1.5GBほどに)。

f:id:frontline:20200305202654p:plain
メモリ不足ですエラー

ExcelVBAを実務で使い倒す技術

ExcelVBAを実務で使い倒す技術

  • 作者:高橋宣成
  • 発売日: 2017/04/20
  • メディア: 単行本