如何从MS Access vba执行Sybase函数/存储过程?

如何从MS Access vba执行Sybase函数/存储过程?,vba,ms-access-2010,sybase,Vba,Ms Access 2010,Sybase,我有一个访问前端,它有一个名为fna的ODBC连接,连接到服务器上的Sybase后端。我可以很容易地引用Sybase数据库中的表,但在vba中,我需要能够调用Sybase中的存储过程和函数 函数名为CalcStats 编辑: 在阅读了注释中的一些链接之后,我看到了下面的代码,它似乎正在运行,但我不知道如何找到函数提供的返回值 Dim trash As String Dim conn As ADODB.Connection Dim cmd1 As ADODB.Command Dim rs1 As

我有一个访问前端,它有一个名为fna的ODBC连接,连接到服务器上的Sybase后端。我可以很容易地引用Sybase数据库中的表,但在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中为函数添加了一个输入参数并保存了它,但似乎无法在访问端将输入值传递给函数

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

所以我遇到的最后一个问题是,无论出于什么原因,如果没有输入,我可以声明一个输出参数,但是如果有输入,我必须删除输出参数声明。函数输出位于parameters.item0位置。感谢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

这可能会有帮助:您熟悉Access中的传递查询吗?我不知道传递查询是什么。