SSブログ

テーブルデータを参照するメソッド [VBA]

 プログラムからテーブルのデータを参照したい場合、ADOなどを利用する方法がありますが、Applicationオブジェクトのメソッドで、簡単に参照することもできます。
 DAvg・DCount・DFirst・DLast・DLookup・DMax・DMin・DStDev・DStDevP・DSum・DVar・DVarPメソッドです。
 参照できるテーブルは、現在のデータベースに定義されているテーブル、リンクテーブル、クエリです。
 リンクが設定されていない、他のデータベースを参照することはできません。

 概要は以下の通り。

DAvg ・ 抽出結果の平均を計算して返す
DCount ・ 抽出結果のレコード数を返す
DFirst ・ 抽出結果のうちから、1つのレコードの、指定された項目の値を返す
DLast ・ 抽出結果のうちから、1つのレコードの、指定された項目の値を返す
DLookup ・ 抽出結果の1レコードから、指定された項目の値を返す
DMax ・ 抽出結果のうちからから、最大の値を返す
DMin ・ 抽出結果のうちから、最小の値を返す
DStDev ・ 抽出結果から、母集団の標本値全体の標準偏差を返す
DStDevP ・ 抽出結果から、母集団全体の標準偏差を返す
DSum ・ 抽出結果の合計を計算して返す
DVar ・ 抽出結果から、標本全体の分散を返す
DVarP ・ 抽出結果から、母集団の分散を返す

 全部で12個ありますが、よく使うのは、DCount・DLookup・DSum・DMax・DMinあたりでしょうか。
 使い方は、どれも同じような感じです。

○DCount
 レコードの件数を数えるメソッドです。


・構文
 DCount( 項目名 , テーブル名 , 条件 )

 項目名 ・ カウントの基準となる項目を指定します。レコードそのものの数を数える場合は、「*」(アスタリスク)を指定します。ここで指定された項目の値がNullだった場合、そのレコードはカウントされません。

 テーブル名 ・ 抽出元となるテーブル名、またはクエリ名を指定します。

 条件 ・ 省略可能。抽出条件を指定します。書き方は、SQLのWHERE句以降の内容を書きます。

・例
? DCount("*","T売上","日付 BETWEEN #2011/1/1# AND #2011/1/3#")
 3

○DLookup
 特定のレコードの項目を参照するメソッドです。

・構文
 DLookup( 項目名 , テーブル名 , 条件 )

 各パラメタの内容は、DCountと同じです。
 項目名にアスタリスクは指定できません。

・例
? DLookup("金額","T売上","日付 = #2011/1/3#")
 900

 一つの値しか返せませんので、パラメタの条件で抽出されたレコードが複数合った場合は、そのうちのどれかが返されます。
 どれでも良い場合もあるでしょうが、基本的には結果が1件になるように条件を指定します。

○DSum
 抽出されたレコードの、指定された項目の合計を計算して返すメソッドです。

・構文
 DSum( 項目名 , テーブル名 , 条件 )

 各パラメタの内容は、DCountと同じです。
 項目名にアスタリスクは指定できません。

・例
? DSum("金額","T売上","日付 BETWEEN #2011/1/1# AND #2011/1/3#")
 3100

○DMax・DMin
 抽出されたレコードの、指定された項目の最大値(最小値)を返すメソッドです。

・構文
 DMax( 項目名 , テーブル名 , 条件 )
 DMin( 項目名 , テーブル名 , 条件 )


 各パラメタの内容は、DCountと同じです。
 項目名にアスタリスクは指定できません。

・例
? DMax("金額","T売上")
 2000
? DMin("金額","T売上")
 750


 蛇足ですが、指定した項目の最大値・最小値は分かっても、そのレコードにある他の項目の内容は取得できません。
 そう言うのは、SQLで書くしかないです。
○参考
クエリ 最大値をもつレコードの抽出
クエリ グループで最大値をもつレコードの抽出(相関サブクエリ)

○注意
 これらのメソッドは、ACCESSが処理を行うので、指定されたテーブルが外部データベースのリンクテーブルの場合、レスポンスが遅くなる可能性があります。外部のSQLServerやOracleへのリンクだった場合です。
 例えば、DsumのテーブルがOracleのテーブルで、データが一億件くらいあったりすると、とんでもなく時間が掛るかも知れません。ADOでSQLを投げれば、Oracleが最適な状態で構築されていれば、一瞬で結果が帰ってきます(帰ってくるかも)。
 手軽に利用できますが、その辺を考慮して利用していただきたいです。
 テストではレスポンスがよくても、本番以降レスポンスが悪くなっていく要因になります。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。