VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/04/19(Thu) 19:11
投稿者魔界の仮面弁士
Eメール
URL
タイトル回答に非ず

# 直接の回答では無いので、読む必要はないかも。

> 全件取得しての表示ではないかと思い、使用には悩んでおります。。。
最初の投稿で、
>>> 「約97件中  81〜97件を表示」と表示したいです。
と書かれていましたよね。

97件ぐらいなら、全件取得した方が効率が良い気もしますが、たとえば数万件クラスの
データであれば、最初に SELECT COUNT(*) でサーバ側に件数を問い合わせて、逐次、
「○○〜○○件目だけを取得するための SQL」を投げるスタイルの方が良いでしょうね。
(ただし、他の接続などによって、途中で件数が変化した場合のことも考慮しないといけませんが)

>> PageSize/PageCount/AbsolutePage プロパティを使うとか。
> についても調べてみました。この方法はすごくよいと思ったのですが、

良い場合もあれば、悪い場合もあります。使用するOLE DBプロバイダやデータ量など、
さまざまな要件によって、適切な解というのは異なりますから、サーバ/クライアント両者の
負荷率を調査しつつ、実際に『試して』みないと分からないと思います。
# 机上の理論だけで進めていくと、あとで泣きをみるかもしれません。

> 全件取得しての表示ではないかと思い、使用には悩んでおります。。。
だからこその、
> > keyset カーソルなどを選択する必要があるでしょう。
という回答なわけで。

既に Recordset を開いているのであれば、CursorType プロパティを確認してください。
これが静的カーソルになっているのなら、全件取得されることになります。

一方、キーセットカーソルなら、「全件分の主キー情報」+「CacheSize に指定された件数のレコード」が
読み込まれ、実際にその行に移動するまでは、データを取りに行かない仕様になっています。
ですから、サーバ・クライアント間の通信負荷は、それほど高くはなりません。

もし、キー情報さえも、全件分取得するのに抵抗があるのであれば、動的カーソルという
選択肢もあります。動的カーソルは、仕組み的にはキーセットと同様ですが、
一度に取得されるキー情報が、CasheSize で指定された件数分のみとなっています。
(動的カーソルは取扱いが面倒なので、あまりお奨めはしませんが)

ちなみに、データ量が多い場合でも、あえて静的カーソルが選択される場合もあります。
いわゆる“切断された Recordset”を使った開発手法です。

更新頻度の低い割に、利用頻度が高い情報の場合には、毎回サーバに問い合わせを行うのではなく、
最初に「切断型レコードセット」に全件分キャッシュしておいてから、クライアント上だけで
抽出してやった方が、はるかに高速に処理できます。接続型レコードセットと切断型レコードセットとでは、
フィールド値の読み書きの速度や、レコード間の移動速度でさえ、かなりの差が生じますからね。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -