Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2150 / 2272 ツリー ←次へ | 前へ→

【3696】数万件のコンボボックスにおいて・・・ んのん 04/10/13(水) 19:23 質問[未読]
【3697】Re:数万件のコンボボックスにおいて・・・ こもれび 04/10/13(水) 23:31 発言[未読]
【3700】Re:数万件のコンボボックスにおいて・・・ んのん 04/10/14(木) 9:04 発言[未読]
【3712】Re:数万件のコンボボックスにおいて・・・ こもれび 04/10/14(木) 21:46 発言[未読]
【3720】Re:数万件のコンボボックスにおいて・・・ hatena 04/10/17(日) 16:40 回答[未読]

【3696】数万件のコンボボックスにおいて・・・
質問  んのん  - 04/10/13(水) 19:23 -

引用なし
パスワード
   はじめまして

現在あるフォーム上に2つのコンボボックスがあります
(左右に配置してあるとすると)
左のコンボからは1列目の値を利用し右のコンボの2列目の値と連動させリストを表示する

それぞれ、同一テーブルから生成しています

コンボID           コンボ名前
ID     名前        名前     ID
---------- ------------    ------------ ----------
111    安威宇 江夫     安威宇 江夫  111
222    柿区 毛子      柿区 毛子   222
333    左師 すね夫     左師 すね夫  333

上記のようなリストになっており、
それぞれの左列に入力、または選択を行い対応するものを反対のコンボに表示する
といった処理です

要するに左はID順、右は名前順のソートがなされており
それぞれが同じ物を選択している結果に表示したいのですが

このテーブルのレコード数が65536件を越えた場合なんですが

オートコレクト、自動拡張のような機能は持たしたいと思っています

当然1文字入れるたびに凄く時間がかかります
また処理として各コンボのクリックイベントで相方のコンボを対応するものに表示させる処理を行っています

リスト内の件数を減らすことも考えているのですが、どうも上手く減らすように思いつきません

どなたか、よいアドバイスをいただけないでしょうか?
説明がへたくそなので申し訳ありませんが、どうか宜しくお願いいたします

【3697】Re:数万件のコンボボックスにおいて・・・
発言  こもれび  - 04/10/13(水) 23:31 -

引用なし
パスワード
   こもれびです

身も蓋もない回答になってしまうのですが…
何ゆえにコンボボックスを使われるのでしょうか?
通常コンボボックスというコントロールはある程度
限られた範囲のデータから1つのデータを選択する
といったときに使用します。

データの集合が数十件を超えるものでコンボボックス
が使われていたりするとユーザーは嫌がるものなのですけど…
んのんさんのアプリケーションの場合、まず使い方に誤りが
あるとおもいます。

何ををやりたいのか? が今ひとつ見えないのですが、
「左にあって右にない」レコードを探してデータを追加したい
ということなのでしょうか?

もしそれだとしたらSQLのFROM句にてLEFT JOINでレコードを
抽出し、その後追加クエリを実行すれば済むような気がするの
ですがいかがでしょうか?

【3700】Re:数万件のコンボボックスにおいて・・・
発言  んのん  - 04/10/14(木) 9:04 -

引用なし
パスワード
   ▼こもれび さん:
ご回答いただきまして
ありがとうございます

>何ゆえにコンボボックスを使われるのでしょうか?
>通常コンボボックスというコントロールはある程度
>限られた範囲のデータから1つのデータを選択する
>といったときに使用します。
>
>データの集合が数十件を超えるものでコンボボックス
>が使われていたりするとユーザーは嫌がるものなのですけど…
>んのんさんのアプリケーションの場合、まず使い方に誤りが
>あるとおもいます。

勿論そうですね、実際私自身もコンボボックスをこのような使い方をしたことが
ありません

一応仕様なので・・・こういう風にしてくれと・・・
最悪どうしようもなければ
全く違う方法をとるしかありませんが・・・

>何ををやりたいのか? が今ひとつ見えないのですが、
>「左にあって右にない」レコードを探してデータを追加したい
>ということなのでしょうか?
>
>もしそれだとしたらSQLのFROM句にてLEFT JOINでレコードを
>抽出し、その後追加クエリを実行すれば済むような気がするの
>ですがいかがでしょうか?

追加は行いません
結局これらのコンボの役目は
間違いであろうとも
IDを検索するためのものです
ただ、IDを選択された際にも名前にはそのIDの名前が出るようにし、
逆に名前を選択された際にはその名前のIDが出るようにしたいのです

この状態が良いということですので…

左右の状態は全く同じで、ただ単純に表示列順序とレコードソートが違うだけです

もちろん65536件を越える時にどうするかという問題もあって…
仕様なのです…

お願いします

【3712】Re:数万件のコンボボックスにおいて・・・
発言  こもれび  - 04/10/14(木) 21:46 -

引用なし
パスワード
   こもれびです

65535を超えて最大何件(何レコード)位なのでしょうか。
「区切り」を付けて切り替える方法を考えてみましょう。
(どれくらい考えられるか保障はできませんが…)

このスレッドを見ていらっしゃる皆さんからも、もっと
よい方法など助言がいただけるかもしれません。

それにしてもどえらい仕様ですね (^_^;;
パワーをかけた割には目立つ動きの無いところもまた…(--;

(Access95時代に「コマンドボタンを丸くしてくれ!」という
要求があって狼狽したことを思い出してしまった(T_T) )

【3720】Re:数万件のコンボボックスにおいて・・・
回答  hatena  - 04/10/17(日) 16:40 -

引用なし
パスワード
   >勿論そうですね、実際私自身もコンボボックスをこのような使い方をしたことが
>ありません
>が
>一応仕様なので・・・こういう風にしてくれと・・・
>最悪どうしようもなければ
>全く違う方法をとるしかありませんが・・・

>追加は行いません
>結局これらのコンボの役目は
>間違いであろうとも
>IDを検索するためのものです
>ただ、IDを選択された際にも名前にはそのIDの名前が出るようにし、
>逆に名前を選択された際にはその名前のIDが出るようにしたいのです
>
>この状態が良いということですので…

クライアントの仕様をまるまる飲むのではなく、
希望を活かしつつもう少しましな仕様を提案するというのも
ひとつのやり方だとは思いますが、どうでしょうかね。

私が以前作ったことのある例ですと、コンボボックスの変更時イベントで、
価集合ソースを書き換えて、該当するデータを抽出する仕様というのにしたことが
あります。

Private Sub cb1_Change()
  Me.cb1.RowSource = "SELECT 顧客名 FROM A_顧客マスター WHERE 顧客名 Like '" _
    & Me.cb1.Text & "*';"
  Me.cb1.Dropdown
End Sub

これを応用して、65536件を越える時は、TOP句で先頭から適当な件数のみ表示
させるようにするなどすれば、なんとかなるかも。

実際、実用に耐える速度になるかどうか不明ですが。

2150 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078299
(SS)C-BOARD v3.8 is Free