Dim Adapter As OleDbDataAdapter
Dim Table As New DataTable
If Ole接続(oleCon1) = False Then Exit Sub
Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
Adapter.Fill(Table)
'▼値の表示
DataGridView1.DataSource = Table
Access.MDBのデータで
3万件位あるのですが、DataGridViewで表示するだけで
時間が掛かります。早く表示する方法はないものでしょうか?
あまり自信は無いけど、DataGridViewを一時的に非表示
(Visible = False)にしておいて内部的に表示処理を行い、
それが完了した時点でVisible = Trueに戻すと、
DataGridViewの「描画処理は」速くなるかもしれない
ただ根本的な問題として…3万件もあったらMDBじゃ
遅いような気もするのだが
(Oracleなんかだと Select * は少し遅くなるとか
いろいろノウハウがあるみたいだけど、MDBは
そのレベルの話はわからん
ただ、MDBだと(テーブルの?)件数が5桁になったぐらいで
速度がガクンと落ちるとかいう噂は聞いた)
そもそも3万件を表示しても全て見ないでしょ
だとしてら、ページ方式にするなりして、
1,000件ずつ表示するとか仕様を変更すべき
Visible = Falseは変わりはないようですね。
抽出処理の
Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
が遅いようです。
mdbだと即表示できます。
どうしようも無いのかな?
DataGridViewってこんなに遅いものですか?
> Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
> が遅いようです。
遅いのは、OleDbDataAdapter → DataTable 化の処理だと判明したのに
> DataGridViewってこんなに遅いものですか?
何故それが、DataGridView の責任に転嫁されてしまうのでしょうか?
で、Access での表示であっても、レコード末尾までの表示は
多少なりとも時間がかかります。先頭数千件程度までは、
すぐにロードされるかも知れませんけれどね。(データ量/回線速度等に依存)
> どうしようも無いのかな?
(案1) 表示件数を減らすために、ページング処理などを実装する。
(案2) OleDbDataReader + BackgroudWorker の ProgressChanged を用いて、
読み取りが完了した分から、順次、表示用の DataTable に転記するようにする。
もともとAccessには大きなテーブルを開いたとき、現ページだけを(実際は2ページ
くらい読み込んでいるのかも知れない)読み込んで、スクロールに従って新しいデーター
を読み込むモードがありますよね、「just-in-timeデータローディング」と言うようです。
「just-on-time」で無いのがなんとも面白い。
そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
大体こんなことが、
「Just-In-Time データーローディングを用いたバーチャルモードのDataGridView Controlへの実装」
DataGridView Controlへバーチャルモードを実装する理由は必要に応じてデーターを検索することにあり、
これはjust-in-timeデータローディングと呼ばれる。
たとえば非常に大きなテーブルを操作していて、単にデーター表示に必要なデーター検索の為のスタートアップ
遅延を避けたいと考えるなら、又は新しい行をスクロール時のみ表示したいと思うなら。
もしユーザーのPCが限られたメモリーしか実装していないとしたら、又は新しいデーターをデーターベースから検索
する時不要なデーターを破棄しようと思ったら......
↑の説明ありがとうございます。
でもAccessは一旦、最後まで表示しきると、上へスクロールは
早くなります。VB.NET はじめてなのですが
DataGridViewとかこんなに表示や設定が面倒だと、Accessの
方が使いやすいです。
DataGridView ってページ表示の形式で使用してるのですか?
なにかサンプルがあれば・・いいのですが?
↑の説明ありがとうございます。
でもAccessは一旦、最後まで表示しきると、上へスクロールは
早くなります。VB.NET はじめてなのですが
DataGridViewとかこんなに表示や設定が面倒だと、Accessの
方が使いやすいです。
DataGridView ってページ表示の形式で使用してるのですか?
なにかサンプルがあれば・・いいのですが?
>DataGridViewとかこんなに表示や設定が面倒だと、Accessの
>方が使いやすいです。
これは当然だと思いますよ。
Accessはデータベース(もどき)に特化していますから。
VBを採用するメリットが、前述されているデメリットを下回る
ようであれば、システムをAccessで構成するようなアプローチ
がいいと思います。
DataGridViewの処理が件数少なくても重い・・・
VBを採用するメリットってなんでしょうか?
..............................................................
そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
よくわかりません
実装された方、コードをお願いします
ちょっと質問がいろいろと...
> 3万件位あるのですが、DataGridViewで表示するだけで
> 時間が掛かります。早く表示する方法はないものでしょうか?
ちなみにどれくらい掛かりますか?
1/10(3,000件くらい)ならどれくらいに短くなりますか?
また,時間が掛かっているのはどこですか?
(描画?それともDBからのロード?)
この辺の調査はいたしましたでしょうか?
> DataGridViewの処理が件数少なくても重い・・・
"DataGridViewの処理"が開発者が手をつけられなく,
どうしようもないものならあきらめるしかないですね.
> よくわかりません
> 実装された方、コードをお願いします
よくわからなかったらコードをお願いするところが分かりません
こうですか><;;
みたいな.
リンク先の実装されたコードはもう試したのでしょうか?
質問者の意図が全体的によくわかりません
>VBを採用するメリットってなんでしょうか?
そりゃアンタ、まずはAccessだと基本的にAccessのデータしか扱えないからだろう
リンクでもすりゃ、確かに他のDBも扱えるけど、
そこまでAccessにこだわる理由も無い
それにVBの方がGUI的にも格段に汎用性が高いし
DBを知らないエンドユーザにAccessの表を直接いじらせるのは危険だし
個人的余談:VBに慣れた身にとってはAccessVBAは何かキライ…
そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
私には難しくて実装できません><!!
なので実装した物をお願いします。 。><。
ツイート | ![]() |