Pertanyaan Menggunakan Excel VBA untuk menjalankan kueri SQL


Saya cukup baru di SQL dan VBA. Saya telah menulis sebuah query SQL yang saya ingin dapat memanggil dan menjalankan dari sub VBA di buku kerja excel dan kemudian membawa hasil query ke dalam buku kerja. Saya telah menemukan beberapa subs online (stackoverflow dan tempat lain) yang mengklaim melakukan ini tetapi saya mengalami kesulitan memahami mereka karena tidak mengandung penjelasan. Sebagai contoh, berikut adalah sub yang saya temukan online:

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

Pertama-tama, apakah ini akan berhasil? Kedua, apa yang harus saya ganti di sub (sepertinya penyedia, sumber data, katalog awal, dll) dan di mana saya menemukan info untuk menggantinya?

Saya harap pertanyaan ini tidak terlalu membingungkan dan saya menghargai bantuan Anda!


32
2017-12-09 17:37


asal


Jawaban:


Di bawah ini adalah kode yang saat ini saya gunakan untuk menarik data dari MS SQL Server 2008 ke VBA. Anda perlu memastikan bahwa Anda memiliki referensi ADODB yang tepat [VBA Editor-> Tools-> Referensi] dan pastikan Anda memilikinya Objek Data Microsoft ActiveX 2.8 Perpustakaan dicentang, yang merupakan baris kedua dari baris bawah yang dicentang (saya menggunakan Excel 2010 di Windows 7; Anda mungkin memiliki versi ActiveX yang sedikit berbeda, tetapi masih akan dimulai dengan Microsoft ActiveX):

References required for SQL

Sub Modul untuk Menghubungkan ke MS SQL dengan Remote Host & Nama Pengguna / Kata Sandi

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

36
2017-12-09 18:25