DBで表示された項目名と違う値を割り当てるには

解決


もんちゃん  2005-11-09 21:48:22  No: 127488

フォーム上にコンボボックスがあ り、そのコンボボックスはドロップダウンリスト
(入力不可)になって います。
コンボボックスに表示する内容がデータベースにInsertする項目とは違います。
値を割り当てることは可能でしょうか。
Accessに、会社ID  と会社名がかいてある、会社テーブルと
個人情報がかいて(名前とか年齢)ある個人情報テーブルがあります。
コンボボックスにはDBに登録されている会社名が出るようにしています。
フォームで名前とか年齢とかを書いて、コンボボックスから会社名を選択します。
その内容を個人情報テーブルに登録したいのですが、個人情報テーブルには
会社IDの項目しかなく、会社名を送ることができません。
コンボボックスでは会社名の表示だけど、実際にはそれぞれ001(会社ID)、002、003という会社ID数値を登録したいのです。
(選択内容をDBに登録する際には数値が登録されるようにしたい)
(VB6・Access・ADO  です  )
この説明で分かりにくいかも知れませんが誰かアドバイスを下さい。(>□<)


あん  2005-11-09 22:07:39  No: 127489

VBというか
処理方式の問題ですね


ささ  2005-11-09 22:17:49  No: 127490

一般的なやり方かどうか走らないけれど、
コンボボックスを作成する際、会社名とIDの両方を取ってきて
登録する際に、IDを使う・・・。でいいと思うんだけれども・・・。

最悪、会社名から会社テーブルを検索し、IDを取得する方法もあるよね?


あん  2005-11-09 22:21:22  No: 127491

>最悪、会社名から会社テーブルを検索し、IDを取得する方法もあるよね?
会社名がユニークとは限らないからあまりお勧めできませんけどね。


もんちゃん  2005-11-09 22:31:02  No: 127492

コンボボックスには会社名を取ってきて、会社IDは変数に入れてます
こんな感じ。。。
Do Until rs.EOF
 strCompID(intNumber) = rs.Fields("Cmp_ID")
 intNumber = intNumber + 1
 rs.MoveNext
Loop
それをコンボボックスで選択した会社名とIDを入れた変数を同期を
取るって言うか・・・なんていうか。
ListindexとstrCompIDを同じにしたいんです。
(会社名Aを選んだら、strCompID(0)みたいな)


あん  2005-11-09 22:42:12  No: 127493

やっとコードがでましたね
strCompID(ComboBox1.ListIndex)
とかじゃ駄目なの?
なんか答えでてるような。。


あん  2005-11-09 22:50:55  No: 127494

ああ  悩んでるとこわかったかも
コンボボックスの中身がソートしちゃうから
同期が取れないってことかあ


LESIA  2005-11-09 23:24:36  No: 127495

会社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


  2005-11-10 00:00:08  No: 127496

で、できましたぁぁ
あんさんありがとうございます。
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)としてしまったら、
できません。どうしたらいいですか?


あん  2005-11-10 00:29:31  No: 127497

>と、部署IDを先ほどの会社IDのように変数に入れ込んで
>strPostID(ComboBox1.ListIndex)としてしまったら、
>できません。どうしたらいいですか?
部署コンボボックスは別ですから
strPostID(部署コンボボックス.ListIndex)
でいかがでしょうか?


もんちゃん  2005-11-10 01:34:14  No: 127498

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」としたいのです。
おバカな質問かもしれませんがご指導ください


LESIA  2005-11-10 01:48:45  No: 127499

同様に、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


あん  2005-11-10 02:35:01  No: 127500

>(会社名をC社にしたら、部署は登録されてる部署名しかでないようにしてるから。
そのときに
コンボボックスだけじゃなく
テーブルも
登録されてる部署名だけいれればいいのでは?


もんちゃん  2005-11-10 02:37:51  No: 127501

で、で、できましたぁぁぁ
これだけの事を、実は2日も悩んでました。
ありがとうございます。
今日は早く帰れます。(*‾∇‾*)v


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加