2

我有下面的代码,它基本上通过使用转置和 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))

请问我做错了什么?

菲利普

4

1 回答 1

1

作为Fields参数传递给GetRows()的值是错误的。根据 MSDN 文档:

字段

此可选参数是一个 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

作为旁注。在查询数据源时,提前一点执行所需的连接(名字和姓氏)通常更直接。

于 2013-03-31T12:39:46.577 回答