ACCESSで、Dcount関数を利用すると、作動が重くなります。

誰しもが経験することではないでしょうか?

しかし、そんな、思い作動から、解放される方法があります。

Dcount関数

こんにちは。伊川(@naonaoke)です。

動画で、再三言っていますが、Dcount関数は、ACCESSの作動が重くなります。

しかし、Dcount関数は、とても便利な関数です。

ACCESSを始めたころは、ACCESSで、ExcelのCountifを実装するには、どうしたらいいのだろうか?

このようなことを、Dcount関数で考えていました。

しかし、集計クエリというものが、ACCESSでは、利用できて、Excelの集計関数は、集計クエリで、できるということがわかりました。

NETで調べて、DAO、または、ADOを利用して、連番を振る方法を発見しました。

今回は、Dcount関数を利用しないで、連番を振るとことをVBAで実装します。

このブログはこんな人にお勧め

今回のテーマ
  • ACCESSで連番を振りたい人
  • ACCESSでDcount関数を利用して、作動が重くなり、嫌になっている人
  • ACCESSで連番を振るとき、Dcount関数でしか、やり方を知らない人

このブログを、読み終わるころには・・・・

はっきり言って、連番を振る速さに感動します。こんなに速くていいのか?思えるほどです。

ACCESSには、色々な技が用意されているということを実感できます。

DAOとは

DAOとは、Data ACCESS Objectesと言います。

Excelを利用している人が、ACCESSを利用して初めて感動するシーンは、大量のレコードを一気に更新、削除、追加できたときではないでしょうか?

この場合は、クエリや、SQL文を利用します。

しかし、データを1行毎に、かつ、丁寧にデータ処理をしたいときもあります。

その場合は、DAOを利用します。

DAOは、ACCESSのデータベースエンジンであるJetデータベースエンジンに直接、接続します。

そして、レコード操作ができるオブジェクトの集合体です。

Naosuke
オブジェクトときたら、オブジェクト指向をおもいだしましょう。

理解の方向性としては、ACCESSのみで利用するときに、最大限の力を発揮するのが、DAOです。

Dim myRs as Recordset

このようにして、データベースを扱います。

このため、最初と最後、レコードがなくなるまで、という表現がたくさん出現します。

BOF プロパティは、レコードの位置が Recordset オブジェクトの最初のレコードより前にあるかどうかを示します。

EOF プロパティは、レコードの位置が Recordset オブジェクトの最後のレコードより後にあるかどうかを示します。

Do until Do whole などのループです。

Naosuke
DAOについては、すでに説明済です。
一例が下記の記事です。
VBAの書き方は、ExcelVBAに似ているんだよね。

ADOとは

DAOに対して、ADO(AcitveX Data Objectes)があります。

ADOは、Oracle、SQL sever にも接続できて、汎用性があります。

DAOは、ACCESS単体なので、ADOほど、汎用性はありません。

DAOで連番を振る 作業手順 その1 データベース確認

MT_伊川というテーブルに、名前があります。

このカナ順に、連番を振りたいと思います。

レコード件数は、4,459件です。

Dcount関数を利用したことがある人であれば、この辺が、限界だと思うでしょう。

つまり、レコードに、永遠と連番を振るということ自体ナンセンスなのです。

そのために、オートナンバーが、ACCESSには用意されています。

また、クエリで、Dcount関数を利用して、連番を振るには、作動が重くなるので、今回は、テーブルに連番を振ります。

イメージ的には、Excelで、Do Untilを使った処理をしていると思ってください。

 

Naosuke
連番系の記事は、下記の記事を参考にしてね。
特にExcelVBAの記事は、実務であるあるなので、参考してください。
セルが更新されたら、自動で連番が振られるのは、結構感動します。

DAOで連番を振る 作業手順 その2 コード解説 その1

たぶん、この辺で嫌になると思います。

Excelで処理するときは、このような面倒な宣言はしません。

しかし、可読ができるようになると、それほど苦ではなくなります。


ここで、注意しなければならないのは、SQLとSQL文は違うということです。

SQL⇒SQLという言語

SQL文⇒SQLという言語を用いた命令文

また、dbOpenDynasetは、編集できる状態にあるということです。

Naosuke
スナップショットは、レコードの改ざん防止に役立ちます。休み明けに出勤しても、レコードがグダグダになっていません。
下記の記事を参考にしてください。



スポンサーリンク
dbOpenSnapshotなら、編集不可になります。

不明な方は、下記の記事を参照してください。

DAOで連番を振る 作業手順 その3 コード解説 その2

この辺は、ExcelのVBAに似ていると思います。


もちろん、Do Until rst.EOF = Trueでも作動します。

ここがポイント

ここがポイント
Function8.png
また、カウント系の関数等は、どうしてもExcelの名残があり、ACCESSで、ガムシャラに作動させているようなきがします。そのカウント系に変わるDAOはすごいなと思いました。DAOを使いこなせたら、今、私が利用している競馬のデータベースが、もっと快適になるかもしれません。しかし、連番を振るというような面倒なことをするなら、テーブル作成時に、オートナンバーを設定すればいいだけのことです。ACCESSに関しては、集計、計算等は、連番がなくてもできます。でも、必要がないと言っても、知識として、必ずスキルにしてください。必ずあなたの人生を豊かにするアイテムになるでしょう。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

今回は、DAOについて説明しました。

少し長くなりましたが、DAOは、ACCESS単一で利用するときしか威力を発揮しません。

しかし、DAOを覚えると、ACCESSの機動力は、間違いなく向上します。

つまらない、必要ないという前に、知識を得た感動をわすれないようにしましょう。

今回も最後まで読んでいただき、ありがとうございました。

今回のサンプルファイルは、No229です。

サンプルファイルを購入希望の方はココをクリック
毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事