【问题标题】:How to execute Sybase function/stored procedure from MS-Access vba?如何从 MS-Access vba 执行 Sybase 函数/存储过程?
【发布时间】:2015-10-15 09:39:20
【问题描述】:

我有一个 Access 前端,它与服务器上的 Sybase 后端有一个名为 fna 的 ODBC 连接。我可以轻松引用 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 中为函数添加了一个输入参数并保存了它,但我似乎无法将输入值传递给 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

【问题讨论】:

标签: vba ms-access-2010 sybase


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2018-03-12
    • 2018-07-18
    相关资源
    最近更新 更多