[英]Creating Parameterized SQL Queries in Excel 2010 with VBA
I came across the following link: 我遇到了以下链接:
http://www.informit.com/guides/content.aspx?g=sqlserver&seqNum=135 http://www.informit.com/guides/content.aspx?g=sqlserver&seqNum=135
In it, they list relatively simple code to query the SQL Database from Excel VBA. 在其中,它们列出了相对简单的代码,以便从Excel VBA查询SQL数据库。
' Declare the QueryTable object
Dim qt As QueryTable
' Set up the SQL Statement
sqlstring = "select au_fname, au_lname from authors"
' Set up the connection string, reference an ODBC connection
' There are several ways to do this
' Leave the name and password blank for NT authentication
connstring = _
"ODBC;DSN=pubs;UID=;PWD=;Database=pubs"
' Now implement the connection, run the query, and add
' the results to the spreadsheet starting at row A1
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstring)
.Refresh
End With
'Save and close the macro, and run it from the same menu you accessed in step 2.
This works fine. 这很好用。 However, I want to be able to pull a value(s) back as a variable instead of dumping it to Excel.
但是,我希望能够将值作为变量拉回而不是将其转储到Excel。
Can someone assist me with that? 有人可以帮助我吗? I've tried looking for Excel VBA SQL Tutorials, but it seems that half the code I find doesn't work (perhaps because I don't understand it well enough).
我试过寻找Excel VBA SQL教程,但似乎我发现的一半代码不起作用(也许是因为我不太了解它)。
You can use ADO, for example: 您可以使用ADO,例如:
''Reference: Microsft ActiveX Data Objects x.x Library
Dim cmd As New ADODB.Command
Dim cn As New ADODB.Connection
Dim param1 As New ADODB.Parameter
Dim rs As ADODB.Recordset
With cn
.Provider = "SQLOLEDB"
''See also http://connectionsstrings.com
.ConnectionString = "Data Source=Server;Initial Catalog=test;Trusted_Connection=Yes"
.Open
End With
Set param1 = cmd.CreateParameter("@SiteID", adBigInt, adParamInput)
param1.Value = 1
cmd.Parameters.Append param1
With cmd
.ActiveConnection = cn
''Stored procedure
.CommandText = "spSiteInformation_Retrieve"
.CommandType = adCmdStoredProc
Set rs = .Execute
End With
For Each f In rs.Fields
Debug.Print f.Name; " "; f
Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
Further information: http://w3schools.com 更多信息: http : //w3schools.com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.