SQLite For ExcelにはADODB.RecordsetにあるようなCountプロパティがない。
ところがちょっとした工夫でデータ件数を取得する方法を見かけたので備忘録。
なぜレコード件数を取得するかと言うと、SQLiteから取得したデータを配列に転記するため。
取得したデータ件数を元に配列の要素数を予め決めておきたいから。
従来の対応
- レコードのカーソルを移動するたびにRedim Preserveで配列拡大(予め取得することをしない)
- 一度BOFからEOFまで回してレコード件数を取得
- 外部からSQL分を受け取る時にWhere部分以前と以降を分けて取得する
- where 以降の文でSelect Count(*)を実行して件数を取得
サブクエリ化
単純に外部から取得したSQL分をサブクエリ化するだけです。
select count(*) from (外部から取得したSQL文)
上記従来の対応の3番目とやってることはほぼ同じです。
この後に元のselect文を実行するので処理速度に悪影響があります。
しかし都度配列を拡張するよりかは速度は速いですしコードもスッキリします。