如何从列表框中填充文本框?

Posted

技术标签:

【中文标题】如何从列表框中填充文本框?【英文标题】:How to populate a text box from a listbox? 【发布时间】:2019-09-17 09:10:28 【问题描述】:

我有一个包含员工编号和姓名的列表框。所以你看到的是 0001-John Doe 但现在当我尝试使用列表框信息填充文本框时它不起作用。

我如何填充我的列表框:

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

我的视图按钮是什么:

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

我想要的是当我选择 0001-John Doe 时,它​​应该从我的数据库中获取数据并填充我的文本框。

【问题讨论】:

如果在 RNOK.Movefirst 处下断点,然后使用 F8,这些值是否真的在字段中? so 在 Where EmpNumber ='" & Me.lbxNextOfKinEmployeeNumber & "' 它确实返回了整个 0001- john doe 的值 但在 RNOK.movefirst 上中断 你不需要那行,当你打开一个记录集时,你总是在第一条记录上,除非它是空的 【参考方案1】:

代码正在尝试将串联字符串 0001-john doe 与 EmpNumber 字段值 0001 匹配。选项:

    将列表框 RowSource 设置为多列
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

如果用户更喜欢键入名称,请不要在串联字符串中包含 EmpNumber。姓氏在前可能更合适: .AddItem rsst(0) & ";" & rsst(2) & ", " & rsst(1) 可能想要对记录集进行排序:ORDER BY EmpSurname

    从串联字符串中提取 EmpNumber Left(Me.lbxNextOfKinEmployeeNumber, 4)

    使用 LIKE 和通配符WHERE '" & Me.lbxNextOfKinEmployeeNumber & "' LIKE [EmpNumber] & '*'"

【讨论】:

以上是关于如何从列表框中填充文本框?的主要内容,如果未能解决你的问题,请参考以下文章

从文本框中使用 jquery mobile 填充下拉列表

用户输入值时如何从文本框中填充消息框?

如何使用 jQuery 从文本框中的列表中显示选定的选项?

如何通过单击列表框行项将搜索结果返回到文本框

单击列表框时,如何在文本框中以另一种形式从ms access 2010中的列表框中移动所选项目

使用组合框中的选择填充文本框中的计算字段