電脳リアルタイム通信 ONLINE
DENNOU REALTIME TSUUSHIN ONLINE.

■クエリ/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 トップページ

本サイト掲載の記事・写真等の無断での転載・複写を禁じます。
本ページは、技術評論社様のご好意により掲載許可をいただいたものです。 
技術評論社

Copyright(c)GIJYUTSU-HYORON Co., Ltd. All rights reserved.