■クエリ/SQL編 ――クエリを使ってレコード総数を知る
Q. DAOのRecordCountプロパティでレコード数を得るのはデータ数が増えると遅くなるということでしたが、これを改善する方法はありませんか?
A. クエリで、COUNT関数を使えば簡単にレコード数を求めることができます。ただし、クエリの結果を変数などに直接入れることはできないので、COUNT関数を使った集計クエリを基にしてレコードセットを作成することになります。 以下は、この方法を使ってレコード数を求めるユーザー定義関数の一例です。
Function GetRecCount(strSrcTable As
String) As Long Dim strSQL As String Dim rst
As DAO.Recordset
On Error Resume Next If
strSrcTable <> "" Then strSQL = "SELECT
COUNT(*) AS RecCount FROM " & strSrcTable Set
rst = CurrentDb.OpenRecordset(strSQL,
dbOpenSnapshot) If Err.Number = 0
Then GetRecCount=rst!RecCount Else '
エラーのとき、たとえば存在しないテーブルを指定 GetRecCount =
0 Err.Clear End If End If End
Function
|
なお、連結フォームを開いたとき、フォームの移動ボタンの脇にレコード総数が表示されます。レコード数が多い場合には、フォームを開いてからしばらく待たないとレコード総数が表示されません(下図)。
これは、フォームがみずからMoveLastを実行してレコード総数を得ていることを示しています。連結フォーム内でレコード総数を求めるには、次の式を利用します。
Forms("フォーム名").Recordset.RecordCount
|
つまり、フォームのレコードセットからRecordCountプロパティの値を得ます。 上で述べたように、フォームをひらいた直後はこのプロパティは正確な値を返しません。しばらく待ってから値を読み取ります。 もしくは、強制的にMoveLastしてからRecordCountを読み取ります。この辺の事情は今回の冒頭、"データアクセス・コンポーネント編
DAOを使ってRecordsetのレコード総数を数える"で説明したとおりです。
|
3/3 |
|
本サイト掲載の記事・写真等の無断での転載・複写を禁じます。
本ページは、技術評論社様のご好意により掲載許可をいただいたものです。
| |