2

TransposeとRecordset.GetRowsを使用して、レコードセットの最初のフィールドをEmpIDコンボボックス基本的にロードする以下のコードがあります。

    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

次に、別の検索コンボボックスを追加して、EMpIDを知らないユーザーが名前で検索できるようにします。

そのため、レコードセットからフィールドFirstName、LastNameを追加したいのですが、機能していません。

上記のコード内で試したことは次のとおりです。

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

私は何を間違っているのですか?

フィリップ

4

1 に答える 1

1

FieldsパラメーターとしてGetRows()に渡す値が間違っています。MSDNドキュメントによると:

田畑

このオプションのパラメーターはバリアントであり、単一のフィールド名または順序位置、あるいはフィールド名または順序位置番号の配列を指定します。ADOは、これらのフィールドのデータのみを返します。

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

したがって、2つのフィールドのみを取得するには、2つの要素の配列を渡す必要があります。このためのコードは次のようになります。

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)を少し早く実行する方が簡単です。

于 2013-03-31T12:39:46.577 に答える