2014-08-27 3 views
1

다음은 ADO 레코드 집합을 사용하여 ListBox를 POpulating하기위한 코드입니다. 그것은 작동하지만 양식으로 표시되어야하는 방식이 아닙니다. enter image description hereADO 레코드 집합을 사용하여 목록 상자 채우기

Function PopulatelstReview() 
    Dim sList As String 
    Dim i As Long 
    Dim ADORs As ADODB.Recordset 
    Dim strSearchResult As String 
    Set AdoCn = New ADODB.Connection 

    Set AdoCmd = New ADODB.Command 

    AdoCn.Open AdoConnectionString 

    AdoCmd.ActiveConnection = AdoConnectionString 
    Debug.Print AdoConnectionString 

    Set ADORs = New ADODB.Recordset 
    'rs.Open "TestListReview", AdoCn 
    ADORs.CursorLocation = adUseClient 
    'rs.Open strSQL, AdoConnectionString, adOpenDynamic, adLockOptimistic, adCmdText 


     AdoCmd.CommandType = adCmdStoredProc 
     AdoCmd.CommandText = "TestListReview" 
     Set rs = AdoCmd.Execute 
    Set ADORs = ExecuteStoredProcedure("TestListReview", AdoCmd) 

    With ADORs 
    lstReview.RowSourceType = "Value List" 
      lstReview.ColumnHeads = False 

       Label43.Caption = ADORs.Fields(0).Name 
     Label44.Caption = ADORs.Fields(1).Name 
      Label45.Caption = ADORs.Fields(2).Name 
      Label48.Caption = ADORs.Fields(3).Name 
      Label49.Caption = ADORs.Fields(4).Name 
       Label50.Caption = ADORs.Fields(5).Name 
       Label51.Caption = ADORs.Fields(6).Name 
       Label52.Caption = ADORs.Fields(7).Name 

       lstReview.AddItem ADORs!id 
       lstReview.AddItem ADORs!TradePartner 
       lstReview.AddItem ADORs!TrustAccount 
       lstReview.AddItem ADORs!Date 
       lstReview.AddItem ADORs!CurrentBalance 
       lstReview.AddItem ADORs!FileName 
       lstReview.AddItem ADORs!RecordNum 
       lstReview.AddItem ADORs!ImportDateTime 

       sList = ADORs.GetString(adClipString, , ";", ";") 
      'lstReview.RowSourceType = "Value List" 
      'lstReview.RowSource = sList 
     End With 
    'Call RS2WS(ADORs, "A3") 
    'lstReview.Column(0, 1) = "ID" 

    End Function 

나는 각각의 값은 내가이

답변

2

당신이 Excel 또는 Access를 사용하고 할 수있는 방법을 말해 labels.please에 배치 appropiate 열을 받게해야해야합니까? Access를 사용하는 경우 테이블을 가져 오거나 링크 할 수 있으며 일반 쿼리를 (레코드 소스)로 사용하여 목록 상자를 채울 수 있습니다.

어쨌든 여기에 사용자의 메서드를 사용하여 목록 상자를 채우는 의사 코드가 있습니다. 서버에 연결하고 SQL 문을 실행 한 후 다음 코드를 시도하십시오.

Dim RC, CC As Long 
ADORs.MoveLast ' vba will not know the total row until you scroll down to the last 
RC = ADORs.RecordCount ' get the result row count 
CC = ADORs.Fields.count ' get the field/column count 
ADORs.MoveFirst ' Move back to the first record 

lstReview.ColumnHeads = True 
lstReview.ColumnCount = CC ' Number of column as in the recordset 

'Fill the column names 
Dim I As Integer 
For I = 0 To CC - 1 
    lstReview.Column(I, 0).value = ADORs.Fields(I).name 
Next I 


'Fill the data 
Dim J As Integer 
While Not ADORs.EOF 
    For I = 1 To RC - 1 
     For J = 0 To CC - 1 
      lstReview.Column(J, I).value = ADORs.Fields(J).value 
     Next J 
    Next I 
    ADORs.MoveNext 'moving to next record 
Wend 

또한 SQL 실행이 레코드를 반환 한 경우와 같은 트래핑 오류를 고려해야합니다. 당신이 엑셀을 사용하는 경우

접근을 위해 당신을 위해 :

+0

헤이 감사를 즐길 ... 당신이 도움이

If isNull(ADORs.RecordCount) or (ADORs.RecordCount = 0) Then MsgBox "Sorry no records found.." Exit Sub End If 

희망 같은 것을 사용할 수 있습니다이

If Nz(ADORs.RecordCount, 0) = 0 Then MsgBox "Sorry no records found.." Exit Sub End If 

을 사용할 수 있습니다 응답하지만 불행히도 나는 ADORs.MoveLast 라인에 "Rowset이 뒤로 가져 오기를 지원하지 않습니다."라는 오류가 발생했습니다. 및 lstReview.Column에 (.0) .value = ADORs.Fields (I) .Name 줄 "런타임 오류 : 424 개체 필요"...이 오류에 대한 어떤 생각이 있으면 말해주십시오. – vivek

+0

서버에 연결했기 때문에 호환되지 않거나 잘못된 유형입니까? 당신은 여전히 ​​첫 번째 질문에 대답하지 않았으며 엑셀이나 엑세스를 사용하고 있습니까? 연결 고리가 무엇입니까? adodb 연결에 대한이 코멘트를 참조하십시오 : http://estackoverflow.com/questions/25524210/execute-sql-query-from-excel/25528990#25528990 –

+0

귀중한 시간에 대한 감사 ... 나는 연결 문자열을 " 공급자 = sqloledb; " & _ "데이터 원본 ="& ServerString & "; "& _"초기 카탈로그 = "& DatabaseString & ";"& _ "사용자 ID ="& UserIdString & "; "& _"Password = "& PwdString & ";" ""; 나는 그 변수들을 글로벌 변수로 선언했다. 나는 VBA에서 작동하는 Access를 사용하고 있습니다. – vivek

관련 문제