【发布时间】:2015-11-04 03:06:25
【问题描述】:
我从 Excel VBA 连接到 MySQL 以获取 my_stored_procedure。工作正常,除了当我使用日期过滤器作为参数传递给 MySQL SP 时,我收到一个运行时错误。
日期过滤器由用户在开始日期和结束日期两个单元格中输入。单元格定义为范围 dateFrom 和 dateTo。
所以我使用这些范围传递给 mySql rs,但 VBA 会返回:
运行时错误'-2147217900 (80040e14)'
你的 MySQL 语法有错误;检查相应的手册 到您的 MYSQL 服务器版本... 'my_stored_procedure '2015-10-01', '2015-10-30'' 在第 1 行。
下面是我的 VBA 代码:
Const ConnStr As String = "Driver={MySQL ODBC 5.3 ANSI Driver};Server=0.0.0.0;Database=db;User=user;Password=pw;Option=3;PORT=3306;Connect Timeout=20;"
Function MySqlCommand(strSql As String) As Variant
Dim conMySQL
Set conMySQL = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
conMySQL.ConnectionString = ConnStr
conMySQL.Open
Set cmd.ActiveConnection = conMySQL
cmd.CommandText = strSql
ReturnValue = cmd.Execute
conMySQL.Close
End Function
Function MySqlRS(strSql As String) As ADODB.Recordset
Dim conMySQL
Set conMySQL = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
conMySQL.ConnectionString = ConnStr
conMySQL.Open
Set rs.ActiveConnection = conMySQL
rs.Open strSql
Set MySqlRS = rs
End Function
_____
Public Sub fetchReport()
Dim rs As ADODB.Recordset
Set rs = MySqlRS("my_stored_procedure '" & Format(Range("dateFrom"), "yyyy-mm-dd") & "' ,'" & Format(Range("dateTo"), "yyyy-mm-dd") & "' ")
Dim hd As Integer
If Not rs.EOF Then
For hd = 0 To rs.Fields.Count - 1
Worksheets("data").Cells(1, hd + 1).Value = rs.Fields(hd).Name 'insert column headers
Next
Sheets("data").Range("A2").CopyFromRecordset rs 'insert data
Sheets("data").Range("A1").CurrentRegion.Name = "rsRange" 'set named range for pivot
End If
ActiveWorkbook.RefreshAll
End Sub
这是我的 SP 语法:
CREATE DEFINER=`user`@`%` PROCEDURE `my_stored_procedure`
(
in fromDate date,
in toDate date
)
BEGIN
SELECT ...
WHERE dateColumn >= fromDate AND dateColumn <= toDate
END
感谢任何帮助。
乔尔
【问题讨论】:
-
这就是你的全部代码吗?或者还有更多?我正在寻找一个命令字符串和一个执行方法
-
我刚刚用整个 vb 代码 tnx 编辑了 op!
-
这是您处理对数据库连接字符串 > 连接 > 命令 > 记录集的查询所需的方式。您缺少创建命令传递存储过程并执行。
-
谢谢。我会在哪里添加它和什么?只是补充一下,在我添加日期查询之前,代码工作得很好。设置 rs = MySqlRS("my_stored_procedure")
-
我给你一些代码给我一点
标签: mysql vba excel runtime-error parameter-passing