从Excel中运行访问查询并将parameter passing给查询
如何在ms中执行查询从Excel VBA代码或macros中访问db。 MS-Access查询接受一些参数,需要从Excel传递。 谢谢
这是一个可能性:
Dim cn As Object Dim strFile As String Dim strCon As String Dim strSQL As String strFile = "C:\docs\Test.mdb" strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile ''Late binding, so no reference is needed Set cn = CreateObject("ADODB.Connection") cn.Open strCon strSQL = "INSERT INTO ATable (AField) " _ & "VALUES (" & Sheet1.[A1] & ")" cn.Execute strSQL cn.Close Set cn = Nothing
您也可以将sql中的内联函数引用到Excel中的数据集中。
编辑重新评论
使用命令:
strSQL = "SELECT * FROM ATable " _ & "WHERE AField = @AField" With cmd Set .ActiveConnection = cn .CommandText = strSQL .CommandType = 1 'adCmdText ''ADO Datatypes are often very particular ''adSmallInt = 2 ; adParamInput = 1 .Parameters.Append .CreateParameter("@AField", 2, 1, , Sheet1.[A1]) End With Set rs = cmd.Execute
另请参阅: http : //support.microsoft.com/kb/181782
这使用ADODB。
Set m_Connection = New Connection If Application.Version = "12.0" Then m_Connection.Provider = "Microsoft.ACE.OLEDB.12.0" Else m_Connection.Provider = "Microsoft.Jet.OLEDB.4.0" End If m_Connection.Open <full path to Access DB> If m_Connection.State > 0 Then Dim rsSource As New Recordset rsSource.Open strQuery, m_Connection, adOpenForwardOnly, adLockReadOnly Dim result As Long Dim rngTarget As Range rngTarget = ThisWorkbook.Worksheets(m_SheetName).Range("A1") If Not rsSource.BOF Then result = rngTarget.CopyFromRecordset(rsSource) End If If rsSource.State Then rsSource.Close Set rsSource = Nothing End If
所以它运行查询并把它放在你喜欢的地方。 strQuery是数据库或SQLstring中查询的名称。