none
レコードセットの分割 RRS feed

  • 質問

  • ACCESS2003+SQLserver2005

     

    お世話になります。

     

    ある条件で絞りこみ取得したレコードセット(仮に20レコード)を、更に指定した範囲(10レコード目から15レコード目まで)で分割するようなADOの記述方法はありませんでしょうか?

     

       レコードセット1(20レコード) をまず取得

    ⇒ レコードセット2(1~9レコード) と レコードセット3(10~15) と レコードセット4(16~20レコード) に分割

     

     

    上記ができないようであれば、T-SQLのストアドで、ある条件で絞りこみ抽出したレコード行(仮に20レコード)を、更に指定した範囲(10レコード目から15レコード目までとか)で取得する方法があればそれでも代用できそうです。

     

    宜しくお願い致します。

     

     

     

    2008年7月15日 11:53

回答

  • 主キーがあって主キー順にソートした状態であれば、Filterプロパティを使って可能だと思います。よくある1ページに10レコードづつ表示するといったページングの手法です。

    幸いなことにSQL Server 2005ですのでもっと良い方法があります。それはレコードに連番を振ってしまうことです。ROW_NUMBER()を調べてみて下さい。連番があればレコードセットの分割は簡単です。

    2008年7月16日 1:07
  • どのようなコードを書かれているのでしょうか? ストアドプロシージャを使われているのでしょうか? OLEDBであれば複数レコードセットを受け取れたような気がします。あいまいですみません。資料が見つかりません・・・

    2008年7月17日 2:18

すべての返信

  • 主キーがあって主キー順にソートした状態であれば、Filterプロパティを使って可能だと思います。よくある1ページに10レコードづつ表示するといったページングの手法です。

    幸いなことにSQL Server 2005ですのでもっと良い方法があります。それはレコードに連番を振ってしまうことです。ROW_NUMBER()を調べてみて下さい。連番があればレコードセットの分割は簡単です。

    2008年7月16日 1:07
  • trapemiyaさん

     

    ご回答ありがとうございました!!

     

    ROW_NUMBERを使い複数のレコードセットに分割するところまではできました!!!

     

    ところでもうひとつ問題が発生したので、ご存知でしたら教えていただけますでしょうか?

    あつかましくすいませんOrz

     

    ACCESS2003からADOで実行すると以下のエラーがでてしまいました。

     

    【現在のプロバイダは、単一な実行から複数のレコードセットを返すのをサポートしません】

     

    現在は、Provider=Microsoft.Access.OLEDB.10.0 を使っているようなのですが、プロバイダを変更せずに回避する方法があればご教示いただけますでしょうか?

     

    宜しくお願い致します。

     

     

     

     

    2008年7月16日 10:17
  • どのようなコードを書かれているのでしょうか? ストアドプロシージャを使われているのでしょうか? OLEDBであれば複数レコードセットを受け取れたような気がします。あいまいですみません。資料が見つかりません・・・

    2008年7月17日 2:18
  •  trapemiyaさん

     

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

     

    >>OLEDBであれば複数レコードセットを受け取れたような気がします。あいまいですみません。資料が見つかりません・・・

     

    お手間をお掛けしてすいません。

    とりあえず、今回はストアドを分けて作成して乗り切ることにしました。

     

    いろいろとありがとうございました!!

     

    2008年7月17日 7:27