[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/10/25(Mon) 20:56
投稿者名:
Eメール:
URL :
タイトル:
ComboBoxについて
VB6.0 HP-UX11(oracle8i)

データベースから取得したデータをComboBoxに設定します。
データベースからは、商品名と商品コードを取得し、Listに
名前を、ItemDataにコードを設定しています。

実際には、色々と条件をつけてデータを取得しているのですが、
取り出した商品コードの値が数字の場合は、ItemDataにコードが
設定されるのですが、コードが英数字となると、ItemDataに0(ゼロ)
が設定され、商品コードを設定することができません。
どうすれば、両方の場合の値をを上手く、設定することができますか。

つまり、
みかん=AAA001
りんご=AAA002
なし=AAA003
いちご=000001
ぶどう=000002
そのた=AAAAAA
ということにしたいのですが、


------------------------------------------------------
    Dim I  As Integer

    Combo1.Clear
    Combo1.AddItem "", 0
    Combo1.ItemData(0) = 0
    I = 1

    /* データベースとの処理(省略)*/

    Do Until objDs.EOF
       Combo1.AddItem objDs("SYOUHIN_NM").Value, I
       Combo1.ItemData(I) = objDs("SYOUHIN_CD").Value
       objDs.DbMoveNext
       I = I + 1
    Loop

    Combo1.ListIndex = 1

投稿時間:2004/10/25(Mon) 21:26
投稿者名:Say
Eメール:
URL :
タイトル:
Re: ComboBoxについて
オンメモリRecordSet使うとか。
Dictionaryあたりを使って関連付けるとか。
単純に、配列に入れて要素番号をItemdataに入れるとか。

投稿時間:2004/10/25(Mon) 21:55
投稿者名:
Eメール:
URL :
タイトル:
Re^2: ComboBoxについて
> オンメモリRecordSet使うとか。
> Dictionaryあたりを使って関連付けるとか。
> 単純に、配列に入れて要素番号をItemdataに入れるとか。

単純に、配列に入れて要素番号をItemdataに入れるとすると
配列の要素をある程度確保しなければいけない。
仮に、取得したデータが配列の要素より大きいと途中までしか
取得できないことが発生する。

オンメモリRecordSetとかDictionaryの使い方について教えて
下さい。

投稿時間:2004/10/25(Mon) 23:29
投稿者名:Say
Eメール:
URL :
タイトル:
Re^3: ComboBoxについて
> 仮に、取得したデータが配列の要素より大きいと途中までしか
> 取得できないことが発生する。
動的に確保すればいいのでは?

> オンメモリRecordSetとかDictionaryの使い方について教えて
> 下さい。
まず、自分で調べるように。

投稿時間:2004/10/26(Tue) 02:07
投稿者名:
Eメール:
URL :
タイトル:
Re^4: ComboBoxについて
Dictionary を調べてみたのですが、例をみると配列で使えるような
ことがかかれているのですが、値をはいれつとして使えるのですか。

投稿時間:2004/10/26(Tue) 06:44
投稿者名:Say
Eメール:
URL :
タイトル:
Re^5: ComboBoxについて
> Dictionary を調べてみたのですが、例をみると配列で使えるような
> ことがかかれているのですが、値をはいれつとして使えるのですか。

Perlには関連配列(連想配列、ハッシュ)というものがあり、
VBのDictionaryは、これに似ているということです。
Perlユーザなら、この説明でDictionaryがわかります。

実際は、配列というよりCollectionなのですが、
「要素番号のかわりにKey文字列でデータをひっぱる配列」と
とらえるとわかりやすいでしょう。

そういえば、ヘルプには例が少ないので、サンプルをひとつ・・・。
ひところパソ通ではやった「人口無能」です。

FormにTextBox2つ、CommandButton1つ貼って、以下のコードを
貼り付けてください。

遊び方は、「Text1に単語をいれてボタンを押す。」の繰り返しです。
ファイル保存するようにして、うまく単語をおぼえさせれば、
次第に成長して、それなりに話し相手になってくれます。

Option Explicit
Private Enum eFLG
    eOFF = 0
    eON
End Enum
Dim dic As Object
Dim meFlg As eFLG
Dim msBuf As String
Private Sub Command1_Click()
    If Trim(Text1.Text) = "" Then Exit Sub
    If meFlg = eFLG.eOFF Then
        If dic.Exists(Text1.Text) Then
            Text2.Text = dic(Text1.Text)
        Else
            meFlg = eFLG.eON
            Text2.Text = "「" & Text1.Text & "」ってなあに?"
            msBuf = Text1.Text
            Text1.Text = ""
        End If
    Else
        meFlg = eFLG.eOFF
        Text2.Text = "「" & Text1.Text & "」ね? わかった!"
        dic(msBuf) = Text1.Text
        
    End If
End Sub

Private Sub Form_Load()
    Text1.Text = ""
    Text2.Text = ""
    Set dic = CreateObject("Scripting.Dictionary")
    meFlg = eFLG.eOFF
End Sub

投稿時間:2004/10/26(Tue) 23:13
投稿者名:
Eメール:
URL :
タイトル:
ありがとうございます。
「Dictionary」のサンプル例まで載せて頂き
ありがとうございます。