- ベストアンサー
ACCESS2000(ADP)+SQLServerにおいてRecordCountが変動する問題について
- ACCESS2000(ADP)+SQLServerにて作成したフォームで、特定のクライアントだけRecordCountが正しく表示されない問題が発生しています。
- 該当のテーブルには757件のレコードがありますが、問題のクライアントでは1回目のRecordCountが500、2回目のRecordCountが757を返してきます。
- また、実行するたびに1回目のRecordCountがランダムに変動することもあります。原因を調査中です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>結局、そのクライアントではSet rs = Me.RecordsetCloneをしている時点で、Cloneを取得しようとしているRecordset自体が全て読み込まれていない状態だったのではないかと思います。 通常は Forms!フォームB.RecordsetClone.MoveLast MsgBox "レコード数は、" _ & Forms!フォームB.RecordsetClone.RecordCount _ & "です。", vbInformation, "レコード数" でカウント出来ますからね。 :位置付けをサポートしていない場合すべてのレコードを取得して数えなければ正確なRecordCount値がわからない。 フォームのレコードソースじゃ全て読込済みでなければカウント出来ないですよね。 1回目のRecordCountは読込途中なのでその時によってランダムなカウント。2回目のRecordCountは最後まで読込んだカウントという事で解決して良かったです。
その他の回答 (1)
- O_cyan
- ベストアンサー率59% (745/1260)
>あるクライアント(1台)だけRecordCountがおかしいのです。 クライアントは全て同じ仕様なのでしょうか? その"あるクライアント"では Me.Bookmark = rs.BookmarkでBookmarkはTrueを返していますでしょうか。 Recordsetオブジェクトが位置付けやブックマークをサポートしている場合Supports(adBookmark)がTrueを返す場合にRecordsetにあるレコードの正確な数を示すはずなのですが。 Recordsetオブジェクトが位置付けをサポートしていない場合すべてのレコードを取得して数えなければ正確なRecordCount値がわからない。 Recordsetオブジェクトを開く前にadOpenKeysetやadOpenStaticのCursorTypeプロパティを設定するとどうなりますでしょうか。
お礼
O_cyanさんご回答ありがとうございます。 >クライアントは全て同じ仕様なのでしょうか? スペックが異なりました。 該当のクライアントは他のものに比べて貧弱でした。 >Me.Bookmark = rs.BookmarkでBookmarkはTrueを返していますでしょうか。 問題なくTrueを返しました。 また、自己解決になりますが、 「フォームの読み込み時」にフォームのレコードソースのRecordsetを使用しているところに問題があったようです。。 結局、そのクライアントではSet rs = Me.RecordsetCloneをしている時点で、Cloneを取得しようとしているRecordset自体が全て読み込まれていない状態だったのではないかと思います。 (そもそもRecordCountがおかしいのではなかった) その処理を開始する前に、 DoCmd.GoToRecord , , acLastとすることでレコードソース(Recordset)を全て読み込ませた上で処理を行うことで解決しました。 私の認識が間違っていたことで質問の方向を誤ったみたいです。 これで解決だと思うのですが・・
お礼
補足回答ありがとうございます。 また、私のやろうとしていたことは、単純にDocmd.Findrecordで実装可能でした。。 偏った知識や思い込みが非常に危険だということを改めて実感しました。 O_cyanさんお手数をおかけしました。ありがとうございます。