C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: Access2010で初回のコンボボックス選択時に反応が悪い


(過去ログ 121 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■72156 / inTopicNo.1)  Access2010で初回のコンボボックス選択時に反応が悪い
  
□投稿者/ PATIO (1回)-(2014/05/21(Wed) 17:19:04)

分類:[.NET 全般] 

いつもお世話になっております、PATIOです。

前回はAccess2010のRequeryが効かなくなる件でお世話になりました。

今回もAccess2010での質問になります。

データそのものはMySQLで管理されており、別の端末上に存在しています。
画面周りをAccess2010で作成する為にODBCドライバ経由でリンクテーブルを使って
データにアクセスしています。

コンボボックスが三つ、コマンドボタンが四つ配置された画面があり、
三つのコンボボックスは連動してます。
画面を開いた直後はコンボボックス1のみ有効で他は無効の状態です。

コンボボックス1で項目を選択するとコンボボックス2が有効になり、
コンボボックス2のリストにコンボボックス1で選んだ項目を条件に
絞り込んだ値のリストが設定されます。

さらにコンボボックス2で項目を選択するとコンボボックス3が有効になり、
コンボボックス3のリストにコンボボックス2で選んだ項目を条件に
絞り込んだ値のリストが設定されます。

このコンボボックスの連動時はRDBへの問い合わせが発生するので
多少時間がかかるのはわかるのですが、コンボボックス3で項目を選択した時に
選んだ事で画面上のコマンドボタンを有効にするようにコードを書いています。

問題はこのコンボボックス3を選択した際にコマンドボタンが有効になるまで
時間がかかるという点です。コンボボックス3は既に設定されているリストから
値を選択するだけなのでRDBへの問い合わせは発生しません。
あまりにも遅いのでコンボボックスのChangeイベント時のプロシージャの
先頭にブレイクポイントを設定し、確認しましたが、
時間がかかっているのはコンボボックス3を操作してから
プロシージャの先頭に来るまでの時間がかかっており、プロシージャ内は
ほとんど時間がかかっていないことを確認しています。

但し、遅いのは当該システムを立ち上げた後の初回の一回のみで
二回目以降はこちらの期待したレスポンスが出ている為、
何が悪くてこのような状態になっているのかがよくわからない状態です。

以前にも書いていますが、Accessを使ってシステムを組むのは初めてなので
Accessを使い慣れている人には常識的な部分が落ちている可能性は十分あります。
何か気が付いたことがありましたら、ぜひご意見をお聞かせください。

例によって情報等が足りない部分がありましたら補完しますので
指摘をよろしくお願いいたします。

引用返信 編集キー/
■72164 / inTopicNo.2)  Re[1]: Access2010で初回のコンボボックス選択時に反応が悪い
□投稿者/ PATIO (2回)-(2014/05/22(Thu) 10:45:18)
その後の調査で前回の書き込みに間違いがある事がわかったのでご報告します。

前回、システム起動後、初回の一度だけが遅いと書きましたが、
実際には問題の画面を一度閉じて開きなおしても初回の一回目は
遅いことが確認できました。
遅い時は、コンボボックスで選択を行ってから約40秒程かかるのに対し、
早い時はほぼ一瞬でボタンが有効になります。

回避策をご存知の方がいらっしゃいましたら教えてください。
よろしくお願いします。

引用返信 編集キー/
■72181 / inTopicNo.3)  Re[2]: Access2010で初回のコンボボックス選択時に反応が悪い
□投稿者/ shu (572回)-(2014/05/23(Fri) 07:51:06)
No72164 (PATIO さん) に返信

コンボボックス3選択時に何らかのアクセスが発生して
しまっているのではないかと思われます。
コンボのデータがほとんど更新されないとかならローカルに
読み込んでしまうのはどうでしょう?

フロントがAccessって大変ですね。
引用返信 編集キー/
■72236 / inTopicNo.4)  Re[3]: Access2010で初回のコンボボックス選択時に反応が悪い
□投稿者/ ?o?`?s?h?n (1回)-(2014/05/27(Tue) 16:48:10)
2014/05/27(Tue) 16:52:33 編集(投稿者)

No72181 (shu さん) に返信

レスありがとうございます。
忙しさにかまけて見に来るのが遅れました。

> ■No72164 (PATIO さん) に返信
>
> コンボボックス3選択時に何らかのアクセスが発生して
> しまっているのではないかと思われます。
> コンボのデータがほとんど更新されないとかならローカルに
> 読み込んでしまうのはどうでしょう?

コンボボックス3の選択肢がコンボボックス2の選択内容で変わってしまうので
連動させる必要がありまして、ローカルに持っておくという事が出来ません。
また、他の画面の登録等でコンボボックスの内容に変化が出る仕様です。
その後、画面を操作しながらWorkbenchでコネクションを監視した所、
コンボボックス3の選択時に特にSQLの発行をするような設定もコードも書いていないのですが、
なぜか画面を開いて初回の選択時のみ、あるテーブルの全レコード取得のクエリが発行されている事が
解りました。なぜ発行されるのかがさっぱりわかりません。

コンボボックス3は非連結のコントロールでコントロールソースには何も設定されていません。
値集合ソースに設定しているクエリの内部では問題のテーブルを参照しているのですが、
値集合ソースに設定しているクエリで使用している内容と発行元不明のクエリの内容は一致しません。

コンボボックスのドロップダウンリストから項目を選択した時に発行されるクエリを止める方法は
あるんでしょうか?せめてなぜこんな現象が起こるのかがわかれば、対処のしようもあると思うのですが。


> フロントがAccessって大変ですね。

現在私が所属している部署は、どちらかというと運用部署なのでプログラミング経験がある人が
ほとんどいません。かろうじてAccessは触れる人がいるのでAccessを使う事になったのですが、
Accessは色々とおせっかい機能が満載されているので自分が思った通りの物を作るのは骨が折れますね。
提供されている機能に乗っかって作る分には楽ですが、それだと必ずしも使いやすい物にはならないので。
(^^;

引用返信 編集キー/
■72237 / inTopicNo.5)  Re[4]: Access2010で初回のコンボボックス選択時に反応が悪い
□投稿者/ PATIO (3回)-(2014/05/27(Tue) 16:50:25)
すいません、前の書き込みは私です。

名前の欄を修正しないで送信してしまいました。
firefoxの所為なのかよくわかりませんが、
毎回、名前の欄が文字化けてしまうので難儀しています。(^^;

引用返信 編集キー/
■72542 / inTopicNo.6)  Re[5]: Access2010で初回のコンボボックス選択時に反応が悪い
□投稿者/ PATIO (4回)-(2014/06/14(Sat) 20:54:11)
その後の顛末をご報告してこのスレッドを閉めたいと思います。

結論から言うと、Accessの通常のクエリをデータリストのソースに使うことをやめて
パススルークエリを使うように変更。パススルークエリに設定するSQLをコンボボックス2の
内容を選択した時に設定してコンボボックス3のRequeryを呼び出すように変更しました。
これによりウインドウが表示されて初回のコンボボックス3の項目選択を行った時に
意図しないSQLが発行される事は無くなりました。

Accessのクエリは通常はクエリデザイナーを使って作成しますが、
GUIを使ったデザイン結果をSQLビューで確認すると考えていたSQLよりもかなり複雑な物に
なっているケースが多いです。Access内での管理上の都合や実装上の都合による物だと
思いますが、単純な選択クエリがほしい場合、必要以上に複雑なSQLになる為に
MySQL上での処理が重くなっているように感じます。
また、今回の例の様にクエリのSQLビューで見ても出てこないSQLが勝手に発行されたり
していることから考えると表向きの内容と内部の実際の動作にはどうも違いがあるような気がします。

実際の話、MySQLのWorkbench等で確認したから発行されているSQLの内容が予想外の物だった
と分かったわけで、そこまでしない人にとっては結果だけを見ている分には意図通りのSQLが発行され
ているようにしか見えない状況だと思います。
Accessにお任せして結果さえ出ればよいという人なら良いのでしょうけれど、
私の様にそもそもAccessをあまり信用していない人間にとっては
かえってお節介機能に思えて仕方がありません。
まあ、信用しないなら全部パススルークエリを使って自分でSQL文から作成しろという
話なのかもしれませんけれど。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -