[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/04/13(Fri) 09:59
投稿者名:ひろ
Eメール:
URL :
タイトル:
約○○件中 ○〜○件を表示
検索エンジンから検索した場合、

約○○件中  ○〜○件を表示
戻る 1 2 3 4 5... 次へ

と言った画面を見ることがあります。
それを、VBで作りたいと思いますが、調べてみても思うようなサンプルがなくて困っています。

VB6を使ってオラクルへADO接続しています。
データはデータグリッドを使って表示しています。
一度の画面には、20件表示したいです。
最後の画面など、端数が出た場合には、
「約97件中  81〜97件を表示」と表示したいです。
「戻る」「次へ」ボタンは次に表示するものがなければクリックできないようにもしたいです。

もし、わかる方いましたら、教えてください。
参考ページ、考え方等でもかまいません。
どうか、よろしくお願いします。

投稿時間:2007/04/13(Fri) 15:30
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re: 約○○件中 ○〜○件を表示
途中経過ですが、SQLのROW?NUMBERを使って0件〜20件、21件〜40件とデータの取得は出来ました。
それを、DoEvents文などに入れていく方向で考えています。
「約○○件中  ○〜○件を表示」の「○〜○件を表示」部分は出来るのですが、全件の数を取得するには
どうしたらよいのでしょうか?

投稿時間:2007/04/13(Fri) 15:54
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re^2: 約○○件中 ○〜○件を表示
> 途中経過ですが、SQLのROW?NUMBERを使って0件〜20件、21件〜40件とデータの取得は出
来ました。それを、DoEvents文などに入れていく方向で考えています。
> 「約○○件中  ○〜○件を表示」の「○〜○件を表示」部分は出来るのですが、全件の数を取
得するには
> どうしたらよいのでしょうか?

レコード数を数えればいいんじゃないでしょうか?

投稿時間:2007/04/13(Fri) 15:56
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^3: 約○○件中 ○〜○件を表示
お返事ありがとうございます。
> レコード数を数えればいいんじゃないでしょうか?
ってことですけど、数えると20件としか出てこないんです。
全部の数を数えようとするには、Adodcで違うSQL文を発行する必要があるのでしょうか?

投稿時間:2007/04/13(Fri) 16:03
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re^4: 約○○件中 ○〜○件を表示
> お返事ありがとうございます。
> > レコード数を数えればいいんじゃないでしょうか?
> ってことですけど、数えると20件としか出てこないんです。
> 全部の数を数えようとするには、Adodcで違うSQL文を発行する必要があるのでしょうか?

一度総件数を取ってしまえば、後は取得した数字を使い回せばいいと思いますが。

投稿時間:2007/04/13(Fri) 16:07
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^5: 約○○件中 ○〜○件を表示
> 一度総件数を取ってしまえば、後は取得した数字を使い回せばいいと思いますが。
最初に、全てデータを取得ってことですか?
それだと、データが増えるにつれて重くなるような気がするのですが・・・

投稿時間:2007/04/13(Fri) 16:13
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re^6: 約○○件中 ○〜○件を表示
> > 一度総件数を取ってしまえば、後は取得した数字を使い回せばいいと思いますが。
> 最初に、全てデータを取得ってことですか?
> それだと、データが増えるにつれて重くなるような気がするのですが・・・

総件数"だけ"取ればいいと思いますよ。
100件なり200件っていう数字データだけなら重くも無いでしょう。

投稿時間:2007/04/13(Fri) 16:26
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^7: 約○○件中 ○〜○件を表示
> 総件数"だけ"取ればいいと思いますよ。
> 100件なり200件っていう数字データだけなら重くも無いでしょう。
レコードカウントで数を取得しようとしたのですが、「全1件」と出てきてしまいます・・。
どのようにコードを書いたらいいでしょうか・・・?

投稿時間:2007/04/13(Fri) 16:33
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re^8: 約○○件中 ○〜○件を表示
> > 総件数"だけ"取ればいいと思いますよ。
> > 100件なり200件っていう数字データだけなら重くも無いでしょう。
> レコードカウントで数を取得しようとしたのですが、「全1件」と出てきてしまいます・・。
> どのようにコードを書いたらいいでしょうか・・・?

レコード件数を検索したSQLの、結果の件数を見たらそりゃあ1件でしょうね…。
結果の件数を見るのではなく、結果そのものを見てください。

投稿時間:2007/04/13(Fri) 17:14
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^9: 約○○件中 ○〜○件を表示
> レコード件数を検索したSQLの、結果の件数を見たらそりゃあ1件でしょうね…。
> 結果の件数を見るのではなく、結果そのものを見てください。
adodc を二つつけなくても出来るんですよね??
結果そのものを取る方法は見つかったんですが。

投稿時間:2007/04/13(Fri) 17:18
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^10: 約○○件中 ○〜○件を表示
> adodc を二つつけなくても出来るんですよね??
> 結果そのものを取る方法は見つかったんですが。
いや、2回データベースにアクセスする話になってると思います。
全データを取得するのでは遅くなるけど、COUNT文のみの実行なら
それほど遅くは無いので。。。

投稿時間:2007/04/13(Fri) 17:29
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re^10: 約○○件中 ○〜○件を表示
> > レコード件数を検索したSQLの、結果の件数を見たらそりゃあ1件でしょうね…。
> > 結果の件数を見るのではなく、結果そのものを見てください。
> adodc を二つつけなくても出来るんですよね??
> 結果そのものを取る方法は見つかったんですが。

二つつける、の意味が微妙にわからなかったりしますが…。
レコードセットの受け皿用の変数は1セットで問題なく使いまわせるはずです。
(総件数を取得するSQLのレコードセットはずっと保持する必要は無い為)

投稿時間:2007/04/13(Fri) 17:34
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^11: 約○○件中 ○〜○件を表示
> 二つつける、の意味が微妙にわからなかったりしますが…。
> レコードセットの受け皿用の変数は1セットで問題なく使いまわせるはずです。
> (総件数を取得するSQLのレコードセットはずっと保持する必要は無い為)
みなさん、ありがとうございます。
2セットいるのかと思ってしまいました。
まず、1セットでうまく総件数表せるようにしたいと思います。
その後の工程でもお世話になるかもしれませんがよろしくお願いします。

投稿時間:2007/04/13(Fri) 17:14
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^8: COUNT(SQL)の説明
一応、SQL文のCOUNTの説明
http://www.mitene.or.jp/~rnk/TIPS_ORCL_FUNC3.htm

投稿時間:2007/04/13(Fri) 16:58
投稿者名:YK
Eメール:
URL :
タイトル:
Re^4: 約○○件中 ○〜○件を表示
No.8811を参照で
この中の
Adodc1.Recordset = ADO レコードセット

ADO レコードセット.recordcount が取れるから
それを使用すればよいのでは。

投稿時間:2007/04/13(Fri) 17:15
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^5: 約○○件中 ○〜○件を表示
> No.8811を参照で
> この中の
> Adodc1.Recordset = ADO レコードセット
> で
> ADO レコードセット.recordcount が取れるから
> それを使用すればよいのでは。
自分のやり方がいけないのかもですが、その方法だと表示されているものしかカウントされなかったです・・・。

投稿時間:2007/04/14(Sat) 00:33
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^6: 約○○件中 ○〜○件を表示
> > ADO レコードセット.recordcount が取れるから
> その方法だと表示されているものしかカウントされなかったです・・・。

RecordCount から件数を得るためには、どのカーソルタイプを
選択するのかも重要です。下記 Vol.3 の 2ページ目あたりを参照のこと。
http://www.canalian.com/DenRe/

投稿時間:2007/04/16(Mon) 10:54
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^7: 約○○件中 ○〜○件を表示
レスありがとうございます。
載せていただいたHPを見てコードを打ってみたのですが、
表示されている数しかカウントできなかったです・・
自分の書き方に問題があると思いますが、コードを教えていただけると助かります。
よろしくお願いします。

投稿時間:2007/04/16(Mon) 11:52
投稿者名:YK
Eメール:
URL :
タイトル:
Re^8: 約○○件中 ○〜○件を表示
>VB6を使ってオラクルへADO接続しています。
>データはデータグリッドを使って表示しています。
ですよね。

DataGridのDataSouce用に
Adodc が入りますよね。

AdodcのRecordsetをセットする為には
Adodb.recordSetが必要ですよね。

dim rs  as ADODB.recordset

With rs
    .ActiveConnection = connection
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
    .Source = SQL分
    .Open , , , , adCmdText
End With

debug.print rs.recordcount

Set adodc1.Recordset = rs
こんな風で駄目ですか。

> 表示されている数しかカウントできなかったです・・
表示する前にcountを取っているのに?

投稿時間:2007/04/16(Mon) 12:06
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^9: 約○○件中 ○〜○件を表示
レスありがとうございます。

> こんな風で駄目ですか。
With rs
    .ActiveConnection = Connection
の部分で変数が設定されていませんと出てきてしまいます。
変数を定義してみたんでえすが、withブロック変数が設定されていませんとなってしまいます・・。

> > 表示されている数しかカウントできなかったです・・
> 表示する前にcountを取っているのに?
はい、そのとおりですけど取れないです・・。
せっかく出してもらってのにうまく出来なくてすみません・・

投稿時間:2007/04/16(Mon) 13:15
投稿者名:YK
Eメール:
URL :
タイトル:
Re^10: 約○○件中 ○〜○件を表示
> With rs
>     .ActiveConnection = Connection

この時のConnectionはひろさんがデータベースに接続しているコネクションです。
オラクルでのコネクションですよね?
私はオラクルを扱った事が無いので例題を控えました。
それと SQL文 もひろさんが今までに書いているSQL文ですよ。

投稿時間:2007/04/16(Mon) 15:44
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^11: 約○○件中 ○〜○件を表示
度々すみません。
> この時のConnectionはひろさんがデータベースに接続しているコネクションです。
> オラクルでのコネクションですよね?
そうですね。そうだと思ってコードを書いてみましたがうまくいきませんでした・・。
ちょっと、自分には難しいのでもっと理解しなくては実現できなさそうです。

投稿時間:2007/04/17(Tue) 10:07
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^12: 約○○件中 ○〜○件を表示
一晩たって、もう一度考え直したら全件取得いきました。
レスしていただいた皆様ありがとうございました。
次のステップでも聞くかも知れませんがよろしくお願いします。

投稿時間:2007/04/18(Wed) 13:35
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^13: 約○○件中 ○〜○件を表示
続きなのですが、
フォームをロードするときに1〜20件表示させます。
コマンドボタンを押したら同じフォームに21〜40件を表示させて、
またコマンドボタンを押したら同じフォームに41〜60件 ・・
と表示させていくにはどのようにしたらよいのでしょうか?
中々よい例もなく行き詰まっています。
どうか、ご教授お願い致します。

投稿時間:2007/04/18(Wed) 15:13
投稿者名:YK
Eメール:
URL :
タイトル:
Re^14: 約○○件中 ○〜○件を表示
> 続きなのですが、
> フォームをロードするときに1〜20件表示させます。
> コマンドボタンを押したら同じフォームに21〜40件を表示させて、
> またコマンドボタンを押したら同じフォームに41〜60件 ・・
> と表示させていくにはどのようにしたらよいのでしょうか?
> 中々よい例もなく行き詰まっています。
> どうか、ご教授お願い致します。

DataGridのscroll メソッドをHelpで

投稿時間:2007/04/18(Wed) 16:14
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^15: 約○○件中 ○〜○件を表示
> DataGridのscroll メソッドをHelpで
…あれ?
全レコード検索して、表示をスクロールの位置で切り替えるの?

… n〜m レコードの取得という、よくあるパターンかと
思ってましたが。。。
http://q.hatena.ne.jp/1168437856
http://biz.rivus.jp/technote507129.html
http://www.bnote.net/php/php/07_selectrow.shtml
http://oshiete1.goo.ne.jp/kotaeru.php3?q=957343
http://blogs.wankuma.com/kaya/archive/2006/09/13/38450.aspx

# Oracle はメインで携わってないので、どんな方法が良いのか
# までは分かりませんが、SQL文で実現する方法だと、VBではなく
# データベースを対象とした掲示板で質問(検索)した方が良いですよ。

投稿時間:2007/04/18(Wed) 16:28
投稿者名:YK
Eメール:
URL :
タイトル:
Re^16: 約○○件中 ○〜○件を表示
> > DataGridのscroll メソッドをHelpで
> …あれ?
> 全レコード検索して、表示をスクロールの位置で切り替えるの?

せっかくDataGridを使用しているのだからn〜mのRecordSetでは無駄ではないですか?
全対象レコードの取得をしてDataGridに入れてScrollが良いと思いますけど。
どうでしょう?

投稿時間:2007/04/18(Wed) 16:42
投稿者名:ひろ
Eメール:
URL :
タイトル:
Re^17: 約○○件中 ○〜○件を表示
度々ありがとうございます。
YK様
> せっかくDataGridを使用しているのだからn〜mのRecordSetでは無駄ではないですか?
> 全対象レコードの取得をしてDataGridに入れてScrollが良いと思いますけど。
> どうでしょう?
データが増えることも考えていますので、全部取得する方法は取らないつもりです。
初心者なのでよく分からない部分もありますが、DataGridを使うときは、
全件取得したほうがよいものですか?
後、scrollという方法も有効なんだ知り、色々な考え方があることがわかりました。
ありがとうございます。

るしぇ様。
> 全レコード検索して、表示をスクロールの位置で切り替えるの?
>
> … n〜m レコードの取得という、よくあるパターンかと
> 思ってましたが。。。
参考HPありがとうございます。n〜m レコードの取得の方向で進めています。
レコード取得のSQLのほうは出来たのですが、それをVB側で命令する方法で悩んでいます。
コマンドボタンを押したら次の20件表示みたいな感じで進めたいのですが。。

投稿時間:2007/04/18(Wed) 17:15
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^18: 約○○件中 ○〜○件を表示
> コマンドボタンを押したら次の20件表示みたいな感じで進めたいのですが。。
前の値を変数に覚えていて20足したらええやん???

投稿時間:2007/04/18(Wed) 18:35
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^18: 約○○件中 ○〜○件を表示
> データが増えることも考えていますので、全部取得する方法は取らないつもりです。
であれば、カーソルモードにも注意。
static カーソルにすると、全件取得になってしまいますので、
keyset カーソルなどを選択する必要があるでしょう。

あと、データ表示中に「他のユーザがデータを追加/削除した場合」には、
どのように処理したいのか、あらかじめ決めておかないといけませんね。


> n〜m レコードの取得の方向で進めています。
カーソルモードにもよりますが、Recordset の
PageSize/PageCount/AbsolutePage プロパティを使うとか。

# Oracle の場合、TOP や LIMIT などが使えないので、
# SQL で処理すると意外と骨が折れるので…。(^_^;)