如何在excel vba中创build一个参数化的访问查询并用variables初始化它

你能帮助我如何创build一个dynamic访问查询(参数化访问查询)

用excel vba中的variables初始化它

eX:从id = 1的客户中select&

其中id = 1应该使用像id = @id这样的variables进行初始化

这是我在Access中创build和testing的一个参数查询。

PARAMETERS [@id] Long; SELECT c.id, c.customer_name FROM customers AS c WHERE (((c.id)=[@id])); 

我可以在Excel中使用ADO为该参数分配一个值,并根据该查询检索logging集。 这是我在Excel中创build的新模块的代码。

 Option Explicit Public Sub AdoCommandWithParameter() Const cstrDbPath As String = "C:\share\Access\whiteboard2003.mdb" 'Dim cmd As ADODB.Command ' 'Dim cn As ADODB.Connection ' 'Dim rs As ADODB.Recordset ' Dim cmd As Object Dim cn As Object Dim rs As Object Dim strConnString As String Dim strSql As String strSql = "PARAMETERS [@id] Long;" & vbCrLf & _ "SELECT c.id, c.customer_name" & vbCrLf & _ "FROM customers AS c" & vbCrLf & _ "WHERE (((c.id)=[@id]));" Debug.Print strSql strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & vbCrLf & _ "Data Source=" & cstrDbPath & ";" & vbCrLf & _ "Mode=Share Deny None;" 'Set cn = New ADODB.Connection ' Set cn = CreateObject("ADODB.Connection") cn.CursorLocation = 3 ' adUseClient ' cn.Open strConnString 'Set cmd = New ADODB.Command ' Set cmd = CreateObject("ADODB.Command") cmd.CommandText = strSql cmd.ActiveConnection = cn cmd.Parameters("[@id]") = 1 Set rs = cmd.Execute Debug.Print "RecordCount: " & rs.RecordCount rs.Close Set rs = Nothing Set cmd = Nothing cn.Close Set cn = Nothing End Sub 

更改cstrDbPath的值以匹配Access数据库文件的位置和名称。

最棘手的部分是获取正确的连接string。 如果遇到问题,请参阅ConnectionStrings.com 。

我写了这个过程来使用ADO的后期绑定。 如果您希望早期绑定,则需要为可用版本的Microsoft ActiveX数据对象库设置引用。 并切换到我注释的路线。

这是您设置参数值的行:

 cmd.Parameters("[@id]") = 1 

改变它来提供你想要的价值; 我们不知道价值是从哪里来的。

除了Debug.Print它的RecordCount ,你可能会想用logging集做一些事情,但是我们不知道这可能是什么。 🙂