programing

헤더가 있는 vba를 사용하여 sql 쿼리 결과를 excel로 내보내기

skycolor 2023. 7. 6. 22:03
반응형

헤더가 있는 vba를 사용하여 sql 쿼리 결과를 excel로 내보내기

Excel을 위해 간단한 SQL 쿼리 결과를 내보내야 합니다.결과를 얻을 수 있는데 헤더가 누락되었는데 헤더도 어떻게 내보낼 수 있나요?

제가 지금까지 가지고 있는 것은 다음과 같습니다.

Sub Conn2SQL()

Dim cnn1 As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Set cnn1 = New ADODB.Connection
  cnn1.ConnectionString = "driver={SQL Server};server=MyDBServer;uid=MyuserID;pwd=mypassword;database=MyDB"
  cnn1.ConnectionTimeout = 30
  cnn1.Open  

SQry = "use MyDB select * from TableName"

mrs.Open SQry, cnn1

Sheet2.Range("A2").CopyFromRecordset mrs

mrs.Close
cnn1.Close

End Sub

필드 이름을 반복하여 머리글을 포함해야 합니다.Microsoft 사이트의 예는 다음과 같습니다.

For iCols = 0 To oRS.Fields.Count - 1
 Sheet(1).Cells(1, iCols + 1).Value = oRS.Fields(iCols).Name
Next

코드에 구현하려면 다음과 같습니다.

Sub Conn2SQL()

    Dim cnn1 As New ADODB.Connection
    Dim mrs As New ADODB.Recordset
    Dim iCols As Integer

    Set cnn1 = New ADODB.Connection
      cnn1.ConnectionString = "driver={SQL Server};server=MyDBServer;uid=MyuserID;pwd=mypassword;database=MyDB"
      cnn1.ConnectionTimeout = 30
      cnn1.Open

    SQry = "use MyDB select * from TableName"

    mrs.Open SQry, cnn1

    For iCols = 0 To mrs.Fields.Count - 1
        Worksheets("Sheet2").Cells(1, iCols + 1).Value = mrs.Fields(iCols).Name
    Next

    Sheet2.Range("A2").CopyFromRecordset mrs

    mrs.Close
    cnn1.Close

End Sub

이것을 할 수 있는 다른 것이 있습니다.SQL 연결 및 테이블 데이터를 시트에 추가할 수 있습니다. (Excel 데이터 연결 마법사)

그런 다음 VBA를 사용하여 표의 데이터를 삭제하고 코드를 통해 데이터를 삽입합니다(VBA를 사용하여 SQL 연결 및 쿼리 작성).

코드가 성공적으로 데이터를 삭제하고 SQL 데이터를 해당 테이블에 재쿼리하면 생성된 연결을 삭제할 수 있습니다.

열 머리글이 있는 테이블이 표시되고 이제 데이터가 동적으로 테이블로 가져와 덤프됩니다.열 제목 VBA가 필요하지 않습니다.:)

저는 여전히 더 나은 해결책을 찾기를 바라고 있습니다.이게 왜 더 쉽지 않은지 모르겠어요.

'Get Header into an array:

    Dim HeadString As String
    Dim HeadArr as Variant 

    For iCols = 0 To mrs.Fields.Count - 1
    If HeadString = "" Then
        HeadString = mrs.Fields(iCols).Name
    Else
        HeadString = HeadString & "," & mrs.Fields(iCols).Name
    End If

        Next f
 Debug.Print HeadString 
  HeadArr  = Split(HeadString, ",")
 Debug.Print HeadArr (0)

언급URL : https://stackoverflow.com/questions/24282620/export-sql-query-results-to-excel-using-vba-with-headers

반응형