フォーム上にコンボボックスがあ り、そのコンボボックスはドロップダウンリスト
(入力不可)になって います。
コンボボックスに表示する内容がデータベースにInsertする項目とは違います。
値を割り当てることは可能でしょうか。
Accessに、会社ID と会社名がかいてある、会社テーブルと
個人情報がかいて(名前とか年齢)ある個人情報テーブルがあります。
コンボボックスにはDBに登録されている会社名が出るようにしています。
フォームで名前とか年齢とかを書いて、コンボボックスから会社名を選択します。
その内容を個人情報テーブルに登録したいのですが、個人情報テーブルには
会社IDの項目しかなく、会社名を送ることができません。
コンボボックスでは会社名の表示だけど、実際にはそれぞれ001(会社ID)、002、003という会社ID数値を登録したいのです。
(選択内容をDBに登録する際には数値が登録されるようにしたい)
(VB6・Access・ADO です )
この説明で分かりにくいかも知れませんが誰かアドバイスを下さい。(>□<)
VBというか
処理方式の問題ですね
一般的なやり方かどうか走らないけれど、
コンボボックスを作成する際、会社名とIDの両方を取ってきて
登録する際に、IDを使う・・・。でいいと思うんだけれども・・・。
最悪、会社名から会社テーブルを検索し、IDを取得する方法もあるよね?
>最悪、会社名から会社テーブルを検索し、IDを取得する方法もあるよね?
会社名がユニークとは限らないからあまりお勧めできませんけどね。
コンボボックスには会社名を取ってきて、会社IDは変数に入れてます
こんな感じ。。。
Do Until rs.EOF
strCompID(intNumber) = rs.Fields("Cmp_ID")
intNumber = intNumber + 1
rs.MoveNext
Loop
それをコンボボックスで選択した会社名とIDを入れた変数を同期を
取るって言うか・・・なんていうか。
ListindexとstrCompIDを同じにしたいんです。
(会社名Aを選んだら、strCompID(0)みたいな)
やっとコードがでましたね
strCompID(ComboBox1.ListIndex)
とかじゃ駄目なの?
なんか答えでてるような。。
ああ 悩んでるとこわかったかも
コンボボックスの中身がソートしちゃうから
同期が取れないってことかあ
会社IDは数値みたいだからItemDataプロパティを使うとか。
Do Until rs.EOF
Combo1.AddItem rs.Fields("Cmp_Name") '会社名
Combo1.ItemData(Combo1.NewIndex) = rs.Fields("Cmp_ID")
rs.MoveNext
Loop
For i = 0 To Combo1.ListCount - 1
Debug.Print "会社名=" & Combo1.List(i) & _
"、会社ID=" & Format$(Combo1.ItemData(i), "000")
Next i
で、できましたぁぁ
あんさんありがとうございます。
LESIAさんもありがとです。
でも、もう1つ問題ができました。
strCompID(ComboBox1.ListIndex)
コンボボックスで選択した会社名をDBの会社テーブルにはいってる会社IDを
↑の式でstrCompIDに入れて
、insertすることはできたんですが・・・(なんかうまく説明できないぃぃ)
今度は部署名です.
部署テーブルには、会社ID、部署ID、部署名が登録されてます。
会社名をコンボボックスで選択したら、DBにある会社の部署名が
もう1つの(部署コンボボックス)に表示されるようにしてあるんですね。
でも例えば、A社には総務課、人事課、経理課と同じ会社に3つもあります。
そうすると、
Do Until rs.EOF
strPostID(intNumber) = rs.Fields("Pst_ID")
intNumber = intNumber + 1
rs.MoveNext
Loop
と、部署IDを先ほどの会社IDのように変数に入れ込んで
strPostID(ComboBox1.ListIndex)としてしまったら、
できません。どうしたらいいですか?
>と、部署IDを先ほどの会社IDのように変数に入れ込んで
>strPostID(ComboBox1.ListIndex)としてしまったら、
>できません。どうしたらいいですか?
部署コンボボックスは別ですから
strPostID(部署コンボボックス.ListIndex)
でいかがでしょうか?
DBに
会社ID 部署ID 部署名
001 100 総務課 (001はA社 002はB社 003はC社)
001 200 人事課
001 300 経理課
002 100 総務課
002 200 人事課
003 200 人事課
003 300 経理課
とあるんですね。
Do Until rs.EOF
strPostID(intNumber) = rs.Fields("Pst_ID")
intNumber = intNumber + 1
rs.MoveNext
Loop
にして、strPostIDに部署IDを入れてやると、
strPostID(0)には「100」
strPostID(1)には「200」
strPostID(2)には「300」・・・と
strPostID(6)まで、できてしまうんですよ。
それはいいとして、
strPostID(部署コンボボックス.ListIndex)としたら、
例えばC社の人事課と選んだとします
部署名のコンボボックスはListIndexが「0」になります
(会社名をC社にしたら、部署は登録されてる部署名しかでないようにしてるから。
(部署名のコンボボックスには人事課と総務課しかでない)。
部署名のコンボボックスはListIndexが「0」だから、
strPostName = strPostID(部署コンボボックス.ListIndex)の式だと、
strPostName の変数に「100」が入っちゃうんです。
ほんとは人事課だから「200」としたいのです。
おバカな質問かもしれませんがご指導ください
同様に、ItemDataを使えばいいのでは?
Do Until rs.EOF
Combo2.AddItem rs.Fields("Pst_Name") '部署名
Combo2.ItemData(Combo2.NewIndex) = rs.Fields("Pst_ID")
rs.MoveNext
Loop
For i = 0 To Combo2.ListCount - 1
Debug.Print "部署名=" & Combo2.List(i) & _
"、部署ID=" & Format$(Combo2.ItemData(i), "000")
Next i
>(会社名をC社にしたら、部署は登録されてる部署名しかでないようにしてるから。
そのときに
コンボボックスだけじゃなく
テーブルも
登録されてる部署名だけいれればいいのでは?
で、で、できましたぁぁぁ
これだけの事を、実は2日も悩んでました。
ありがとうございます。
今日は早く帰れます。(*‾∇‾*)v
ツイート | ![]() |