私はSQLとVBAを初めて使用します。 ExcelブックのVBAサブルーチンから呼び出して実行し、クエリ結果をブックに取り込むことができるSQLクエリを作成しました。これを行うと主張するいくつかの潜水艦(stackoverflowおよび他の場所)をオンラインで見つけましたが、説明が含まれていないため、それらを理解するのに苦労しています。たとえば、これは私がオンラインで見つけたサブです:
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
まず第一に、これは機能しますか?第二に、サブで何を置き換える必要がありますか(プロバイダー、データソース、初期カタログなど)、それらを置き換える情報はどこにありますか?
この質問が混乱しすぎないことを願っています。ご協力いただきありがとうございます。
以下は、MS SQL Server 2008からVBAにデータをプルするために現在使用しているコードです。適切なADODB参照があることを確認する必要があります[VBA Editor-> Tools-> References]そして、あなたが持っていることを確認する必要がありますMicrosoft ActiveX Data Objects 2.8 Libraryチェック済み、チェックされている一番下の行から2番目です(Windows 7でExcel 2010を使用しています。ActiveXのバージョンは少し異なるかもしれませんが、Microsoft ActiveXで始まります)。
リモートホストとユーザー名/パスワードで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