因此,数据库hotchpotch。通过VBA在Access前端执行MySQL存储过程
- 我有一个存储过程的MySQL数据库。
- 我有一个连接到MySQL数据库(我可以调查表)的Access文件作为前端(与形式和东西)
- 我已经成功创建了一个ODBC通过查询(我认为这就是他们是什么调用)从数据库调用其中一个存储过程。在访问查询实际上只是
CALL myProcName;
,给我我希望当我Set Result = CurrentDb.OpenRecordset("myProcName")
把它从VBA的结果是什么,我想实现如下:
- 已经在存储过程需要一个参数的MySQL =>检查!
- 让该存储过程按预期工作=>在phpMyAdmin中检查=>检查!
- 在Access中保存了一个查询,该查询链接到此参数存储过程并给定固定参数值=>检查! (
CALL myProcName('myParameterValue')
,我可以调用从VBA,就像我做的unparametric查询) - 必须指定
'myParameterValue'
每次我执行能力的查询=>不检查
我需要以某种方式指定的参数在保存的查询的SQL定义中添加占位符,并在VBA中设置该参数。对于VBA部分我有和想法,我会发现相当优雅:
Private Sub ParametricQuery()
Dim QDef As QueryDef
Set QDef = CurrentDb.QueryDefs("myProcName")
QDef.Parameters(*insert parameter name here*) = parameter value
Dim Result As Recordset
Set Result = QDef.OpenRecordset
Do While Not Result.EOF
MsgBox Result.Fields(1) 'Display a field from the results
Loop
End Sub
但我将如何建立我的SQL定义?
PARAMETERS in_param TEXT;
CALL myProcName(in_param);
不起作用。如果我尝试
Set QDef = CurrentDb.QueryDefs("myProcName")
MsgBox QDef.Parameters.Count
我得到一个消息框,告诉我有一个总的在我的查询定义0参数是,这样是行不通的。
我在网上找到的是很多人通过字符串操作在VBA中构建实际的SQL。这让我不寒而栗,原因很多(安全性,可维护性和优雅性)。我坚信有一种更好的方式,希望能够按照我上面所描述的方式。唯一的问题是:如何做到这一点?
你能后的'在MySQL中建立PROCEDURE'线(无需整个PROC)?命名的参数及其类型非常重要。 – Parfait
嗯,我通过myphpadmin中相当不错的“创建过程”界面创建了程序。它有一个参数方向“IN”(很明显),类型为VARCHAR,长度为254(电子邮件地址的最大长度)。并且该过程做了一个简单的'SELECT * FROM table WHERE field = param' – lhiapgpeonk