如何从 MS-Access vba 执行 Sybase function/stored 过程?
How to execute Sybase function/stored procedure from MS-Access vba?
我有一个 Access 前端,它有一个名为 fna 的 ODBC 连接到服务器上的 Sybase 后端。我可以轻松引用 Sybase 数据库中的表,但在 vba 中,我需要能够调用 Sybase 中的存储过程和函数。
函数名称是 CalcStats。
编辑:
阅读评论中的一些链接后,我得到了以下代码,它似乎 运行 但我无法弄清楚如何找到函数提供的 return 值。
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 所需连接字符串的方法。
所以我现在可以创建连接、触发函数并获取 return 值。但是,现在我正在处理最后一部分,即添加输入参数。我已经在 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
所以我遇到的最后一个问题是,无论出于何种原因,如果没有输入,我可以声明一个输出参数,但如果有输入,我必须删除输出参数声明。函数输出位于 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
我有一个 Access 前端,它有一个名为 fna 的 ODBC 连接到服务器上的 Sybase 后端。我可以轻松引用 Sybase 数据库中的表,但在 vba 中,我需要能够调用 Sybase 中的存储过程和函数。
函数名称是 CalcStats。
编辑: 阅读评论中的一些链接后,我得到了以下代码,它似乎 运行 但我无法弄清楚如何找到函数提供的 return 值。
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 所需连接字符串的方法。
所以我现在可以创建连接、触发函数并获取 return 值。但是,现在我正在处理最后一部分,即添加输入参数。我已经在 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
所以我遇到的最后一个问题是,无论出于何种原因,如果没有输入,我可以声明一个输出参数,但如果有输入,我必须删除输出参数声明。函数输出位于 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