こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS ADO Whereで取得したデータのナンバーを取得する方法

お世話になります。

ACCESSで管理ソフトウェアを作成しているのですが、
ある配列変数 data(1 to 40)があり、
ADOでデータベースから Where句を使い、必要なデータを引き出し変数へ入れています。

引き出しているレコードの、レコードカウント数を変数に入れたいのですが、どうすればいいのでしょうか?

RecordCountでは引き出したレコードの最大数をとってしまうためできませんでした。

よろしくお願いします。

投稿日時 - 2006-05-20 12:02:47

QNo.2163110

暇なときに回答ください

質問者が選んだベストアンサー

単純に、カウンタ用の変数を用意すればよいのでは?
以下のような感じです。

Dim lngRecordCount as Long
lngRecordCount = 0

Do Until rs.EOF
  (必要なデータかどうか判定)
  If (必要なデータなら) Then
    lngRecordCount = lngRecordCount + 1
    data(lngRecordCount) = rs!XXXX
  End If
  rs.moveNext
Loop

投稿日時 - 2006-05-27 01:01:17

お礼

ご返答ありがとうございます。

やはり、変数を用いてカウントを取らないといけないのでしょうか?

投稿日時 - 2006-06-01 14:58:41

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

行番号はレコード数と同じと考えてください。
例では新規にレコードを作成する際、行番号が順番にふられます。
VBA側でカウントすることもできますが、できればサーバー側
でできるようにしたほうが処理は早いと思います。

投稿日時 - 2006-06-02 05:31:33

ANo.4

>RecordCountでは条件に見合うデータ数をとってしまっていてレコードセットのカウント数が取得できなかったため

レコードセットにしてしまった後はループさせてカウントするしかないと思いますが。
もう一つレコードカウントを取りたい条件にあったSQLを発行して先にカウントさせておくとか。

投稿日時 - 2006-06-01 16:09:28

ANo.2

>引き出しているレコードのレコードカウント数を変数に入れたい
変数名 = Me.Recordset.RecordCount
で変数に代入できませんか。
>RecordCountでは引き出したレコードの最大数をとってしまうためできませんでした
この辺が良く理解できていませんが・・。
引き出しているレコードのレコードカウント数とRecordCountで取得できるレコード数は一緒ではないですか?
開いているレコードセットからさらに絞り込んでレコード数をカウントするという事なのでしょうか。
別の抽出条件を付けてレコードセットを取得してカウントすれば良いのでは?

投稿日時 - 2006-05-23 12:10:06

お礼

ご返答ありがとうございます。

Do Untilを使用し、条件に見合うデータを抽出しているのですが、RecordCountでは条件に見合うデータ数をとってしまっていてレコードセットのカウント数が取得できなかったためです。

投稿日時 - 2006-06-01 14:58:00

ANo.1

ADO ということは 接続先は MSDEとかOracle あるいはSQL Server とかいろいろあります。
また、ACCESS のバージョンは何を使用しているかによりかなり違ってきます。
仮にMSDE(SQL SERVER2000)  とすれば
IDENTITY用いた方法があります。
例:
 SELECT
(IDENTITY(int, 1, 1) AS 行番号,
ユーザーTBL.*
INTO #WKユーザーTBL.*
FROM ユーザーTBL
Where あなたが書いた 条件
ORDEr BY あなたが書いた順番

あとは 作成された#WKユーザーTBL を接続して
読み込めば 行番号がわかります。

最新の MS SQL Server 2005 では 新しく
SQL の関数で row_number が追加されました。
詳細は マイクロソフトの公式ページ MSDN ライブラリ あるいは
BooksOnline などを閲覧してください。
SQL SERVER 2005 Expressは無料でダウンロードできます。
例:
 SELECT ROW_NUMBER()
OVER (ORDER BY あなたが指定するレコードKey) 
AS 行番号,
FROM ユーザーTBL
Where あなたが書いた 条件
ORDEr BY あなたが指定するレコードKey

参考程度ですががんばって勉強してください。

投稿日時 - 2006-05-20 19:44:17

お礼

ご返答ありがとうございます。
環境はACCESS + SQL Serverです。

行番号ではなく、読み込んだレコード数をループ中にいくつか?が知りたいです。(><)

投稿日時 - 2006-06-01 14:55:50

あなたにオススメの質問