How to populate a text box from a listbox?

混江龙づ霸主 提交于 2020-01-15 03:47:29

问题


I have a listbox with combined Employee Number and Name. so what you see is 0001-John Doe but now when I try and populate a text box with the list box info it does not work.

How I populate my listbox:

Private Sub UserForm_Initialize()
 Dim conn As New ADODB.Connection
 Dim rsst As New ADODB.Recordset

   dbPath = Sheets("Info").Range("a2").Value
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath      

  rsst.Open "SELECT EmpNumber,EmpFirstName,EmpSurname FROM Employees;", _
   conn, adOpenStatic

 With rsst
 .MoveFirst
  Do Until .EOF

Me.lbxNextOfKinEmployeeNumber.AddItem rsst.Fields(0).Value & " - " & rsst.Fields(1) & " " & " " & rsst.Fields(2) & " "
 rsst.MoveNext
  Loop
 End With
End Sub

What's in my view button:

Private Sub btnNextOfKinSelect_Click()
            Dim CNOK As New ADODB.Connection
            Dim RNOK As New ADODB.Recordset

            txtNextofKinEmployeeNumber.Enabled = False
            'btnEditNextOfKin.Visible = True

        If lbxNextOfKinEmployeeNumber.ListIndex = -1 Then
                MsgBox "Please Select a Employee Number"
            Else

            dbPath = Sheets("Info").Range("a2").Value
             CNOK.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    RNOK.Open "SELECT * FROM EmployeeNextOfKin Where EmpNumber ='" & 
     Me.lbxNextOfKinEmployeeNumber & "'", _
      CNOK, adOpenStatic
       RNOK.MoveFirst

                txtNextofKinEmployeeNumber.Value = RNOK("EmpNumber")
                txtNextOfKinName.Value = RNOK("NextOfKinName")
                txtNextOfKinSurname.Value = RNOK("NextOfKinSurname")
                txtContactNumber.Value = RNOK("NextofKinContactNumber")
                txtContactAddressLine1.Value = RNOK("NextofKinAddress")
                txtNextofKinCity.Value = RNOK("NextofKinCity")
                txtCellNumber.Value = RNOK("NextofKinCellNumber")
    End If
End Sub

What I want is when I select 0001-John Doe it should get the data from my database and populate my textboxes.


回答1:


Code is trying to match concatenated string 0001-john doe with EmpNumber field value 0001. Options:

  1. set listbox RowSource as multi-column
Do Until rsst.EOF
With Me.lbxNextOfKinEmployeeNumber
    .ColumnCount = 2
    .ColumnWidths = "0;2"
    .AddItem rsst(0) & ";" & rsst(0) & " - " & rsst(1) & " " & rsst(2)
End With
rsst.MoveNext
Loop

If users would prefer to type name, don't include EmpNumber in concatenated string. Last name first might be more appropriate: .AddItem rsst(0) & ";" & rsst(2) & ", " & rsst(1)
Might want to sort recordset: ORDER BY EmpSurname

  1. extract EmpNumber from concatenated string Left(Me.lbxNextOfKinEmployeeNumber, 4)

  2. use LIKE and wildcard
    WHERE '" & Me.lbxNextOfKinEmployeeNumber & "' LIKE [EmpNumber] & '*'"



来源:https://stackoverflow.com/questions/57970988/how-to-populate-a-text-box-from-a-listbox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!