ADOデータコントロールを使用したデータコンボコントロールで、リストに表示されるDBのフィールドとは別のフィールドをデータとして扱いたいのですが、コンボボックスの値をもとにSQLを発行してレコードを取得する以外に何かよい方法はないでしょうか?
よろしくお願いします。
>ADOデータコントロールを使用したデータコンボコントロールで
>SQLを発行してレコードを取得する以外に何かよい方法はないでしょうか?
…などと言われましてもADOデータコントロールの RecordSorce には
SQL 文を指定してたりするのでは無いのですか?SQL 文を一度も使わず
特定のデータをデータベースから取ってくるのは難しいでしょうし…。
>コンボボックスの値をもとにSQLを発行してレコードを取得する
ことを何故避けたいのか?どういった目的なのかがハッキリしません
ので、何を求められているのか分かりません。
何度も検索処理をするのを避けたいだけならADOデータコントロール
の Recordset なりローカル変数で宣言した Recordset なりを保持
してその中からデータを取ればいいんじゃないですか?
ただし、複数のユーザが利用するデータベースの場合、当然ながら
ローカルに保持したデータとデータベースのデータに差が出てきます。
その対応も必要となってくる事も忘れないでください。
ご返信ありがとうございます。わかりづらくて申し訳ありません。
社員テーブルに、「社員番号(KEY)」と「社員名」というフィールドが
あるのですが、コンボボックスには社員名を表示させ、
処理上は社員番号を扱いたいんです。
一応社員名は重複しないように登録するのですが、
データからKEYを持ってくるというのが気持ち悪かったもので…。
今のところ、SELECT文で社員番号+社員名をコンカチで取得し、
データ登録の際はMID関数でで社員番号だけにしています。
Recordsetの保持は考えていませんでした。ぜひ調べてみます。
が、大変そうですね…。
>Recordsetの保持は考えていませんでした。ぜひ調べてみます。
>が、大変そうですね…。
1回作ってみればそれほど難しくないし、並べ替えもできるし
入れ物としては便利ですよ?
http://www.interq.or.jp/www-user/komurak/progtec/031.htm
Adodc1.Recordset には「社員番号(KEY)」と「社員名」データが
入っているんですか?↓のコードを実行すると何が出力されます?
[VB6.0]
Private Sub DataCombo1_Change()
Debug.Print Me.Adodc1.Recordset.Fields("社員番号")
End Sub
[VB6.0]
’↓けっこう適当に作ってるので自分で改良して下さい。
Private Sub DataCombo1_Change()
Debug.Print "Change" & Me.DataCombo1.SelectedItem
With Me.Adodc1.Recordset
'.MoveFirst ' ←この辺調整して下さい
.Move Me.DataCombo1.SelectedItem - 1 ' ←この辺調整して下さい
Debug.Print .Fields("社員番号")
End With
End Sub
ご丁寧にありがとうございました!
まるろうさんのソールを追加して実行してみたところ、
ちゃんと社員番号が表示されました。
このデータを使って更新すればうまくいきそうです。
ADOデータコントロールに頼り気味だったので、
ちゃんとRecordsetなどについて勉強しようと思います…;