我搜索过MSDN,StackOverflow,SQLServer Central和太多网站 . 我已经尝试了几天,在Excel VBA代码中使用动态SQL SELECT语句找到在MS Access中执行参数查询的方法 . 我正在使用的系统与SQL Server TVF配合得非常好,但由于失去了服务器支持,我必须将其转换为Access . VBA代码首先循环访问Excel中的“输入”工作表,获取用于构建动态SQL SELECT语句的参数值和函数/查询名称 . 下面是构建连接的代码,并仅针对其中一个只需要1个输入参数的查询(有20个)调用Access Query:
Dim strSQL
' set up our connection
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\PathToDB Tables 2013-12-13.accdb;"
Set conn = CreateObject("ADODB.Connection")
conn.Open strConnection
' open the view and create the report
Set rs = CreateObject("ADODB.recordset")
Application.ODBCTimeout = 0
conn.CommandTimeout = 0
strSQL = "select * FROM "
strSQL = strSQL & strFunction
strSQL = strSQL & " (" & strParameters & ");"
'strSQL = strSQL & strOrderBy
rs.Open strSQL, conn
此时strSQL中的值是 SELECT * FROM Report_1_2_StaffAdds (#12/31/2013#);
rs.Open strSQL,conn中出现错误错误消息'FROM子句中的语法错误' .
这是MS Access查询:(查询名称为Report_1_2_StaffAdds)
PARAMETERS [previous_month] DateTime; SELECT [1_2_StaffAddsPart1].Unit, [1_2_StaffAddsPart1].Role, [1_2_StaffAddsPart1].Start_Date, [1_2_StaffAddsPart2].First_Worked, [1_2_StaffAddsPart2].Last_Worked, [1_2_StaffAddsPart1].Emp_Name, [1_2_StaffAddsPart1].Emp_Id, [1_2_StaffAddsPart2].Hours_to_Date FROM 1_2_StaffAddsPart1 INNER JOIN 1_2_StaffAddsPart2 ON [1_2_StaffAddsPart1].Emp_Id = [1_2_StaffAddsPart2].Emp_Id;
任何帮助都感激不尽 . 我相信如果我能得到答案,我可以修改它以包含最多3个输入参数,具体取决于在给定时间执行哪个Access查询 .
1 回答
在我看来,您试图将参数值包含在包含
SELECT
语句的字符串中 . 但是,我正在尝试这样做,所以我将为您提供一个简单的测试参数查询,该查询从ADODB.Command
对象打开一个记录集 .这是以下代码的立即窗口输出:
码: