リストボックスからのデータの抽出について

解決


稲兎  2003-06-03 02:20:41  No: 107364

お世話になります。
リストボックスの設定を下記のように行っています。

Dim SQLtxt As String

SQLtxt = "select T_EmployeeMaster.eCD,Name,Kana " & _
        "from T_EmployeeMaster" & _
        " order by eCD,Kana"
        
recList.Open SQLtxt, cnn, adOpenKeyset, adLockOptimistic

    Do Until recList.EOF
        lstEmployee.AddItem recList!eCD & Space(5) & vbTab & recList!Name & Space(1) & vbTab & recList!Kana
        recList.MoveNext
    Loop

実際の表示は

0001  山田太郎  ヤマダタロウ
0002  山田花子  ヤマダハナコ

となるのですが、この”0001”のデータを選択し、ボタンをクリックすると同じフォーム内に設定しているテキストボックスに「山田太郎」と表示したいのですがどのようにすればいいのか分かりません。
分かり難い説明で申し訳ありませんが、ご指導お願い致します。


岡田 之仁  2003-06-03 10:55:45  No: 107365

例えば、こういうことでしょうか・・・

Private Sub Command1_Click()

    Dim sz As String
    Dim p0 As Integer
    Dim p1 As Integer
    
    Text1.Text = ""
    
    If List1.ListIndex > -1 Then
        sz = List1.List(List1.ListIndex)
        p0 = InStr(1, sz, vbTab, vbBinaryCompare)
        If p0 > 0 Then
            p1 = InStr(p0 + 1, sz, vbTab, vbBinaryCompare)
            If p0 > 0 And p1 > 0 And p0 < p1 Then
                Text1.Text = Mid$(sz, p0 + 1, p1 - p0 - 1)
            End If
        End If
    End If

End Sub

以上。


稲兎  2003-06-03 17:52:28  No: 107366

岡田様
親切な回答ありがとうございます。
大変参考になります。

リストボックスにて選択したデータ(”0001”)をキーとしてACCESSのデータベースから該当するデータを抽出し、そのデータの内容をフォーム上の各テキストボックスへと表示したかったのです。
ACCESSだと簡単に行えるのですが、VBでは難しいのでしょうか?

私の説明が至らなかったばかりにお手数をお掛けしてしまい申し訳ありません。


稲兎  2003-06-03 19:23:30  No: 107367

SQLread = "select T_EmployeeMaster.* " & _
        "from T_EmployeeMaster where T_EmployeeMaster.eCD='" & Mid(lstEmployee.Text, 1, 4)

SQLを用いて抽出をしているのですが、エラーメッセージが表示されてしまいます。(文字列の構文エラー)

リストボックスの選択項目をキーに検索する事は無理なのでしょうか?
ご指導ありましたら宜しくお願い致します。


nanashi  2003-06-03 19:44:26  No: 107368

>SQLを用いて抽出をしているのですが、エラーメッセージが表示されてしまいます。(文字列の構文エラー)

そりゃ普通に構文エラーですよ。
文字列の指定はちゃんと前後を「'」でくくってください。

SQLread = "select T_EmployeeMaster.* " & _
          "from T_EmployeeMaster " & _
          "where(T_EmployeeMaster.eCD='" & Mid(lstEmployee.Text, 1, 4) & "')"


稲兎  2003-06-03 20:12:43  No: 107369

nanashi様
回答ありがとうございます!
文字列の指定は前後をくぐらなくてはダメだったんですね・・・。

大変勉強になりました!
おかげさまで無事に解決する事が出来ました!
ありがとうございました。


岡田 之仁  2003-06-03 20:26:50  No: 107370

ちょっと突貫で作りましたので、バグやエラーがあってもご容赦・・・

Option Explicit

Private Sub Command1_Click()

    Me.Hide
    Unload Me
    
    End

End Sub

Private Sub DataList1_Click()

    Adodc1.RecordSource = "select * from Member where ID='" & DataList1.BoundText & "'"
    Adodc1.Refresh

End Sub

Private Sub Form_Load()

    Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test.mdb;Persist Security Info=False"
    Adodc1.CommandType = adCmdText
    Adodc1.CursorLocation = adUseClient
    Adodc1.CursorType = adOpenDynamic
    Adodc1.LockType = adLockReadOnly
    Adodc1.Mode = adModeRead
    Adodc1.RecordSource = "select * from Member order by ID"
    Adodc1.Refresh
    
    Set DataList1.DataSource = Adodc1
    DataList1.DataField = "ID"
    DataList1.ListField = "ID"
    DataList1.BoundColumn = "ID"
    Set DataList1.RowSource = Adodc1.Recordset
    DataList1.Refresh
    
    Set Text1.DataSource = Adodc1
    Text1.DataField = "Name"
    Text1.Refresh
    
    Set Text2.DataSource = Adodc1
    Text2.DataField = "Yomigana"
    Text2.Refresh
    
    Adodc1.Refresh

End Sub

Private Sub Form_Unload(Cancel As Integer)

    Text2.DataField = ""
    Set Text2.DataSource = Nothing
    
    Text1.DataField = ""
    Set Text1.DataSource = Nothing
    
    DataList1.DataField = ""
    Set DataList1.DataSource = Nothing
    
    Adodc1.RecordSource = ""
    Adodc1.ConnectionString = ""
    
End Sub

●  プロジェクトのある場所にTEST.MDBを作成し、テーブル名を『Member』
    とします。
    フィールド情報は、
    ID        テキスト4文字(主キー)
    Name      テキスト
    Yomigana  テキスト

    フォームには、DBリストコントロールと、2ツのテキストボックス
    を配置し、また、ADODCコントロールを配置します。
    ここでは、プログラムの起動時に動的にデータベースに接続するよう
    にしています。

    ご参考までに・・・

以上。


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

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






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