복붙노트

[SQL] 엑셀 VBA를 사용하여 SQL 쿼리를 실행합니다

SQL

엑셀 VBA를 사용하여 SQL 쿼리를 실행합니다

나는 SQL 및 VBA 상당히 새로운입니다. 내가 전화 통합 문서에 쿼리 결과를 가지고 다음 엑셀 통합 문서에서 VBA 하위에서 실행 할 수 있도록하고자하는 SQL 쿼리를 작성했습니다. 나는 온라인 (유래 및 기타 장소) 주장이 일을하지만 문제가 더 설명을 포함하지 않는 그들을 이해하는 데 몇 가지 잠수정을 발견했다. 예를 들어, 여기에 내가 온라인으로 발견 하위입니다 :

Sub ConnectSqlServer()

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String

    ' Create the connection string.
    sConnString = "Provider=SQLOLEDB;Data Source=INSTANCE\SQLEXPRESS;" & _
                  "Initial Catalog=MyDatabaseName;" & _
                  "Integrated Security=SSPI;"

    ' Create the Connection and Recordset objects.
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' Open the connection and execute.
    conn.Open sConnString
    Set rs = conn.Execute("SELECT * FROM Table1;")

    ' Check we have data.
    If Not rs.EOF Then
        ' Transfer result.
        Sheets(1).Range("A1").CopyFromRecordset rs
    ' Close the recordset
        rs.Close
    Else
        MsgBox "Error: No records returned.", vbCritical
    End If

    ' Clean up
    If CBool(conn.State And adStateOpen) Then conn.Close
    Set conn = Nothing
    Set rs = Nothing

End Sub

우선,이 작품은 것? 둘째, 나는 하위에서 대체 무엇을해야합니까 (이 등 제공, 데이터 원본, 초기 카탈로그, 모양)과 어디 그들을 대체 할 수있는 정보를 찾을 수 있습니까?

나는이 질문이 너무 혼동되지 희망 나는 당신의 도움을 주셔서 감사합니다!

해결법

  1. ==============================

    1.아래는 제가 현재 VBA로 MS SQL 서버 2008에서 풀 데이터에 사용하는 코드입니다. (내가 사용 당신은 당신이 적절한 ADODB 참조 [VBA 편집기 -> 도구 -> 참조]을 가지고 있고 Microsoft ActiveX 데이터 라이브러리가 선택되어 맨 아래 행에서 두 번째 인 검사 2.8 개체가 있는지 확인 있는지 확인해야합니다 윈도우 7에서 엑셀 2010) 당신은 약간 다른 액티브 X 버전이있을 수 있습니다,하지만 여전히 마이크로 소프트 액티브 X로 시작합니다 :

    아래는 제가 현재 VBA로 MS SQL 서버 2008에서 풀 데이터에 사용하는 코드입니다. (내가 사용 당신은 당신이 적절한 ADODB 참조 [VBA 편집기 -> 도구 -> 참조]을 가지고 있고 Microsoft ActiveX 데이터 라이브러리가 선택되어 맨 아래 행에서 두 번째 인 검사 2.8 개체가 있는지 확인 있는지 확인해야합니다 윈도우 7에서 엑셀 2010) 당신은 약간 다른 액티브 X 버전이있을 수 있습니다,하지만 여전히 마이크로 소프트 액티브 X로 시작합니다 :

    원격 호스트 및 사용자 이름 / 비밀번호로 MS SQL에 연결하기위한 서브 모듈

    Sub Download_Standard_BOM()
    'Initializes variables
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim ConnectionString As String
    Dim StrQuery As String
    
    'Setup the connection string for accessing MS SQL database
       'Make sure to change:
           '1: PASSWORD
           '2: USERNAME
           '3: REMOTE_IP_ADDRESS
           '4: DATABASE
        ConnectionString = "Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=USERNAME;Data Source=REMOTE_IP_ADDRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DATABASE"
    
        'Opens connection to the database
        cnn.Open ConnectionString
        'Timeout error in seconds for executing the entire query; this will run for 15 minutes before VBA timesout, but your database might timeout before this value
        cnn.CommandTimeout = 900
    
        'This is your actual MS SQL query that you need to run; you should check this query first using a more robust SQL editor (such as HeidiSQL) to ensure your query is valid
        StrQuery = "SELECT TOP 10 * FROM tbl_table"
    
        'Performs the actual query
        rst.Open StrQuery, cnn
        'Dumps all the results from the StrQuery into cell A2 of the first sheet in the active workbook
        Sheets(1).Range("A2").CopyFromRecordset rst
    End Sub
    
  2. from https://stackoverflow.com/questions/27385245/using-excel-vba-to-run-sql-query by cc-by-sa and MIT license