初めて質問します。
商品マスタ=商品コード(文字または数字10桁)・商品名(文字40桁)・・・
顧客情報ファイル=顧客コード・商品コード・・・・
という二つのファイルを使って顧客情報の入力画面があります。
商品名をコンボボックスで表示・選択しますが、ファイルに書き込む時は商品コードで書き込みたいのです。商品コードは文字も入るし、桁数もまちまちです。
その場合、どのようにすればコンボボックスで選択された商品名から商品コードをもってくることができますでしょうか。
よろしくお願いします。
追加記述です。
ただいま、VB6.0で開発してます。
コンボボックスの並び順通りに商品コードを配列に保持しておいて,
コンボボックスのListIndexプロパティを利用して商品コードを取り出す,
というのではどうでしょう。
お答えありがとうございます。
その「商品コードを配列に保持する」やり方を教えていただけますでしょうか。
今は次のような感じで(おおざっぱで、すごい省略してますが)
コンボに商品名をセットしていると思います。
combo1.clear
set rs = openrecordset("select * from 商品マスタ")
do while rs.eof = false
combo1.additem rs.fields("商品名").value
rs.movenext
loop
これを
dim s商品コード()
combo1.clear
set rs = db.openrecordset("select * from 商品マスタ")
redim s商品コード(rs.recordcount - 1)
do while rs.eof = false
combo1.additem rs.fields("商品名").value
s商品コード(i) = rs.fields("商品コード").value
rs.movenext
loop
のような感じにして、
コンボで選択されている商品名の商品コードを知りたい場合は
s商品コード(combo1.listindex) という感じです。
上の書き込みで、 i が定義されていませんが、
やりたいことは分かって頂けたと思います。
とろさん、すみません。
iの定義はなんですか?
まだ1ヶ月くらいの初心者で、初歩的なこともよくわからなくてすみません。
教えてください。
今はどのようにコンボボックスに
商品名をセットしているのですか?
i が分からない程の初心者ならば、
コンボボックスにも商品名を
セットできなさそうですが...
現在、コンボボックスのセットは下記の通りやっています。
Form1.combo_name.Clear
my_sql = "SELECT LSS1_CD,LSS1_NM FROM LSS1_MST"
Set rs = DB.OpenRecordset(my_sql,dbOpenSnapshot)
Do Until rs.EOF
Form1.combo_name.AddItem rs.Fields("LSS1_NM")
rs.MoveNext
Loop
先程、教えていただいた方法で、
i=0 を Do Until の上で定義し、i=i+1 を Loop の前に入れてみましたところ、
< 実行時エラー'9':インデックスが有効範囲にありません。>
となってしまったので質問させていただきました。
いかかでしょうか?
ReDim Preserve sXXX(i)
sXXX(i) = 商品コード
のように、配列に商品コードをセットする前に
配列のサイズを変更しましょう。
何度もお答えありがとうございます。
配列を作成するところはうまくいきましたが、
別のプロシージャで商品コードを見るときに、
w_code = wk(Form1.combo_name.listindex) 'wkは配列
のところで
< 実行時エラー'9':インデックスが有効範囲にありません。>
というエラーが発生します。
その原因はなんでしょうか?
原因を探すのがデバッグという作業です。
UBound(wk)やLBound(wk), Form1.combo_name.ListIndexといった値を調べてみましたか?
いろいろやってみましたが、出来ませんでしたので、一旦解決とさせていただきます。勉強不足を痛感します。SOHOですので、聞く人もなく、書物だけだとなかなか難しいです。自分でじっくりやってみます。ありがとうございました。
ツイート | ![]() |