【问题标题】:Runtime error 3151 when calling Oracle stored procedure with IN parameter使用 IN 参数调用 Oracle 存储过程时出现运行时错误 3151
【发布时间】:2014-10-09 08:52:01
【问题描述】:

我正在尝试在 MS Access 中调用 Oracle 程序。程序有 IN 参数,我无法调用它,每次我收到“ODBC 调用失败”错误。在没有任何 IN 或 OUT 参数的情况下运行 Oracle 过程时,即成功调用并执行所需的结果。我只是想知道如何在 Access for Oracle 过程中调用参数。

在下面的代码中,我有一个 Oracle 过程 trtP_FILENAME 是 IN 参数,我希望 IN 参数 P_FILENAME 仅由用户提供。在那个trt 过程中,我试图通过utl_file 函数导入文件,当我在Access 中调用它时运行SQL Developer 时它工作正常,但我无法这样做。

On Error GoTo trap


Dim db As Database
   Dim LSProc As QueryDef
   Dim LSQL As String

   Set db = CurrentDb()

   Set LSProc = db.CreateQueryDef("")

   'SQL to call stored procedure (with parameters)
    LSQL = "BEGIN trt ('" & P_FILENAME & "' )"
    'LSQL = "Begin TRT ('BUSMAY2014.csv')"
    LSQL = LSQL & "; END;"


   'Use {Microsoft ODBC for Oracle} ODBC connection
  LSProc.Connect = "ODBC;DSN=ODM_UNCT;UID=ODM_UNCTLD;PWD=****;SERVER=******"
   LSProc.SQL = LSQL
   LSProc.ReturnsRecords = False
   LSProc.ODBCTimeout = 0

   LSProc.Execute
   'DoCmd.RunSQL ("EXEC trt " & P_FILENAME)
 CallSProc = True
 Exit Sub
trap:
        Dim MyError As Error
      MsgBox Errors.Count
      For Each MyError In DBEngine.Errors
        With MyError
          MsgBox .Number & " " & .Description
        End With
      Next MyError

End Sub

MS ACCESS 是前端,Oracle 是后端。 TRT 是过程名称 P_FILENAME 是过程的 IN 参数

【问题讨论】:

    标签: oracle ms-access vba ms-access-2003


    【解决方案1】:

    以下代码适用于我:

    Dim db As DAO.Database, LSProc As DAO.QueryDef
    Set db = CurrentDb
    Set LSProc = db.CreateQueryDef("")
    LSProc.Connect = "ODBC;DSN=ODM_UNCT;UID=GORD;PWD=whatever;"
    LSProc.SQL = "BEGIN TRT('HelloFromAccess'); END;"
    LSProc.ReturnsRecords = False
    LSProc.Execute dbFailOnError
    Set LSProc = Nothing
    Set db = Nothing
    

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2018-02-09
      • 1970-01-01
      相关资源
      最近更新 更多