2015-10-14 99 views
0

我有一个Access前端,在服务器上有一个名为fna的ODBC连接到Sybase后端。我可以很容易地引用Sybase数据库中的表,但在vba中我需要能够调用Sybase中的存储过程和函数。如何从MS-Access vba执行Sybase函数/存储过程?

函数名称是CalcStats。

编辑: 通过阅读评论中的一些链接后,我得到了下面的代码似乎运行,但我无法弄清楚如何找到函数提供的返回值。

Dim trash As String 
Dim conn As ADODB.Connection 
Dim cmd1 As ADODB.Command 
Dim rs1 As Recordset 
Set conn = New ADODB.Connection 
conn.ConnectionString = "datasource=ODBC;DSN=fna" 
conn.Open 

Set cmd1 = New ADODB.Command 
cmd1.ActiveConnection = conn 
cmd1.CommandType = adCmdStoredProc 
cmd1.CommandText = "CalcStats" 

cmd1.Execute 

编辑2: 最后计算出输出部分。感谢A.S.H的链接和Gord Thompson提供的获取ADODB所需的连接字符串的方法。

所以我现在可以创建一个连接,触发函数并获取返回值。但是,现在我正在处理添加输入参数的最后部分。我添加了一个输入参数给sybase中的函数并保存了它,但我似乎无法将输入值传递到Access端的函数中。

Dim trash As String 
Dim conn As ADODB.Connection 
Dim cmd1 As ADODB.Command 

Set conn = New ADODB.Connection 
conn.ConnectionString = "datasource=ODBC;DSN=fna" 
conn.Open 

Set cmd1 = New ADODB.Command 
cmd1.ActiveConnection = conn 
cmd1.CommandType = adCmdStoredProc 
cmd1.CommandText = "CalcStats" 
cmd1.Parameters.Append cmd1.CreateParameter("MeasurementClm", adInteger, adParamInput, , 3) 
cmd1.Parameters.Append cmd1.CreateParameter("OutputValue1", adInteger, adParamReturnValue) 

cmd1.Execute 

trash = cmd1.Parameters.Item(0).Value 
conn.Close 
+1

这可能帮助:http://stackoverflow.com/questions/24267080/calling-stored-procedure-vba –

+0

你熟悉的“pass-通过查询“在Access? –

+0

我不知道传递查询是什么。 – Bryan

回答

0

所以,我有最后一个问题是,不管是什么原因,我就是如果没有输入,但如果有投入,我不得不删除输出参数声明中声明输出参数。函数输出位于parameters.item(0)位置。感谢A.S.H和Gord Thompson提供的链接和建议。这里是我结束了与该代码是现在工作:

Dim trash As String 
Dim conn As ADODB.Connection 
Dim cmd1 As ADODB.Command 
Dim rs1 As Recordset 

Set conn = New ADODB.Connection 
conn.ConnectionString = "datasource=ODBC;DSN=fna" 
conn.Open 

Set cmd1 = New ADODB.Command 
cmd1.ActiveConnection = conn 
cmd1.CommandType = adCmdStoredProc 
cmd1.CommandText = "CalcStats" 
cmd1.Parameters.Refresh 
cmd1.Parameters.Append cmd1.CreateParameter("InputValue1", adInteger, adParamInput, , 3) 
'cmd1.Parameters.Append cmd1.CreateParameter("OutputValue3", adInteger, adParamReturnValue) 

cmd1.Execute 

trash = cmd1.Parameters.Item(0).Value 
conn.Close