如何将记录集中的特定字段加载到组合框中

时间:2013-03-18 11:25:54

标签: excel-vba combobox ado transpose vba

我有以下代码,它实际上使用Transpose和Recordset .GetRows将记录集的第一个字段加载到我的 Emp ID 组合框中。

    If m_adoStaffRS.RecordCount > 0 Then
    With m_adoStaffRS
        .MoveFirst
        cboEmpID.Clear
        cboEmpID.List = Application.WorksheetFunction.Transpose(.GetRows)
        '
        .MoveFirst
        '
        ' TROUBLE HERE >>>
        cboNameSelect.List = Application.WorksheetFunction.Transpose(.GetRows(Fields = .Fields("FirstName").Value & " " & .Fields("LastName").Value))
        '
    End With
    m_lnRecordID = 0
    cboEmpID.ListIndex = 0
End If

现在我想添加另一个搜索组合框,以便让不知道EMp ID的用户按名称进行搜索。

所以我想从记录集添加firlds FirstName,LastName ,但它不起作用。

这是我在上面的代码中尝试的内容:

cboNameSelect.List = Application.WorksheetFunction.Transpose(.GetRows(Fields = .Fields("FirstName").Value & " " & .Fields("LastName").Value))

我做错了什么?

菲利普

1 个答案:

答案 0 :(得分:1)

您作为字段参数传递给 GetRows()的值是错误的。根据MSDN doc:

  

字段

     

此可选参数是Variant,它指定单个字段名称或序号位置或字段名称或序号位置编号的数组。 ADO仅返回这些字段中的数据。

     

http://msdn.microsoft.com/en-us/library/ee266344.aspx

因此,必须传递两个元素的数组才能获得两个字段。这个代码是:

With m_adoStaffRS
    .MoveFirst
    Dim FullNames As Variant
    Dim FieldsToSelect(0 To 1) As Variant
    Dim i As Long

    FieldsToSelect(0) = "FirstName"
    FieldsToSelect(1) = "LastName"

    FullNames = .GetRows(Fields := FieldsToSelect)

    ' Now fill combo-box using desired format
    cboNameSelect.Clear
    For i = LBound(FullNames) To UBound(FullNames)
        cboNameSelect.AddItem FullNames(0, i) & " " & FullNames(1, i)
    Next i
End With

作为旁注。在查询数据源时,通常需要更早地进行所需的连接(FirstName& LastName)。