- ベストアンサー
ACCESS ADO Whereで取得したデータのナンバーを取得する方法
お世話になります。 ACCESSで管理ソフトウェアを作成しているのですが、 ある配列変数 data(1 to 40)があり、 ADOでデータベースから Where句を使い、必要なデータを引き出し変数へ入れています。 引き出しているレコードの、レコードカウント数を変数に入れたいのですが、どうすればいいのでしょうか? RecordCountでは引き出したレコードの最大数をとってしまうためできませんでした。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
単純に、カウンタ用の変数を用意すればよいのでは? 以下のような感じです。 Dim lngRecordCount as Long lngRecordCount = 0 Do Until rs.EOF (必要なデータかどうか判定) If (必要なデータなら) Then lngRecordCount = lngRecordCount + 1 data(lngRecordCount) = rs!XXXX End If rs.moveNext Loop
その他の回答 (4)
- NOBNNN
- ベストアンサー率50% (93/186)
行番号はレコード数と同じと考えてください。 例では新規にレコードを作成する際、行番号が順番にふられます。 VBA側でカウントすることもできますが、できればサーバー側 でできるようにしたほうが処理は早いと思います。
- O_cyan
- ベストアンサー率59% (745/1260)
>RecordCountでは条件に見合うデータ数をとってしまっていてレコードセットのカウント数が取得できなかったため レコードセットにしてしまった後はループさせてカウントするしかないと思いますが。 もう一つレコードカウントを取りたい条件にあったSQLを発行して先にカウントさせておくとか。
- O_cyan
- ベストアンサー率59% (745/1260)
>引き出しているレコードのレコードカウント数を変数に入れたい 変数名 = Me.Recordset.RecordCount で変数に代入できませんか。 >RecordCountでは引き出したレコードの最大数をとってしまうためできませんでした この辺が良く理解できていませんが・・。 引き出しているレコードのレコードカウント数とRecordCountで取得できるレコード数は一緒ではないですか? 開いているレコードセットからさらに絞り込んでレコード数をカウントするという事なのでしょうか。 別の抽出条件を付けてレコードセットを取得してカウントすれば良いのでは?
お礼
ご返答ありがとうございます。 Do Untilを使用し、条件に見合うデータを抽出しているのですが、RecordCountでは条件に見合うデータ数をとってしまっていてレコードセットのカウント数が取得できなかったためです。
- NOBNNN
- ベストアンサー率50% (93/186)
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 参考程度ですががんばって勉強してください。
お礼
ご返答ありがとうございます。 環境はACCESS + SQL Serverです。 行番号ではなく、読み込んだレコード数をループ中にいくつか?が知りたいです。(><)
お礼
ご返答ありがとうございます。 やはり、変数を用いてカウントを取らないといけないのでしょうか?