我对 SQL 和 VBA 相当陌生。我编写了一个 SQL 查询,我希望能够从 Excel 工作簿中的 VBA 子程序调用和运行该查询,然后将查询结果带入工作簿中。我在网上找到了一些潜艇(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 编辑器->工具->参考]并确保你有Microsoft ActiveX 数据对象 2.8 库检查,这是检查的底部行中的第二个(我在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)