客户端利用存储过程获取Oracle数据库的序列值-AngelHis
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


客户端利用存储过程获取Oracle数据库的序列值

发表时间:2022/10/25 22:21:22 评论(0) 浏览(1345)  评论 | 加入收藏 | 复制
   
摘 要:通常在access客户端是无法直接获取oracle数据库的序列,用Ado运行“SELECT SQ_REG_MZ.NEXTVAL INTO SQ_NO FROM DUAL; ”时会无法执行。解决方法:可以通过调用数据库存储过程的方法间接获取。
正 文:

1.数据库创建序列

-- Create sequence 

create sequence SQ_PATIENT_NO_MZ
minvalue 1
maxvalue 999999999999999999999999999
start with 1001
increment by 1
nocache;


2.数据库创建存储过程

Create or REPLACE PROCEDURE PRC_REG_MZ_NO(SQ_PATIENT_NO IN OUT NUMBER) IS
BEGIN 
  Select SQ_PATIENT_NO_MZ.NEXTVAL INTO SQ_PATIENT_NO FROM DUAL; 
END PRC_REG_MZ_NO;


3. 客户端创建调用存储过程的函数

Public Function orcProc(ProcName As String, Optional strPara As Variant, Optional WARN As Integer, Optional Conn As ADODB.Connection) As Integer
'******************
'通过数组参数调用存储过程
'参数 storProcName 为存储过程名
'参数 strPara() 使用数组作为存储过程参数
'******************
    On Error GoTo ERR
    Dim cmd As New ADODB.Command
    Dim ConnStr As String
    Dim I As Integer
    '    ConnStr = "DRIVER={Microsoft ODBC for oracle};UID=*****;PWD=*****;SERVER=*****;"
    '    conn.ConnectionString = ConnStr
    '    conn.Open
    DoCmd.Hourglass True
    If Conn Is Nothing Then Set Conn = orC_ADOConn()
    cmd.ActiveConnection = Conn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = ProcName
    If Not IsMissing(strPara) Then
        If UBound(strPara) >= 0 Then
            For I = 0 To UBound(strPara)
                cmd.Parameters(I).Value = strPara(I)
            Next
        End If
    End If
    cmd.Execute
    If Not IsMissing(strPara) Then
        If UBound(strPara) >= 0 Then
            For I = 0 To UBound(strPara)
                strPara(I) = cmd.Parameters(I).Value
            Next
        End If
    End If
    Set cmd = Nothing
    orcProc = 1
    DoCmd.Hourglass False
    Exit Function
ERR:
    DoCmd.Hourglass False
    Set cmd = Nothing
    orcProc = 0
    If WARN = 1 Then MsgBox "执行错误【" & ProcName & "】——" & ERR.Description, vbInformation, "系统提示"
End Function

4.测试

Function F_GET_PATIENT_NO_MZ_TEST() As Long
    Dim P() As Variant, I As Integer, L As Long
    P = Array(L)
    Debug.Print Now()
    I = orcProc("PRC_REG_MZ_NO", P, 1)
    Debug.Print Now()
    If I = 1 Then L = P(0)
    F_GET_PATIENT_NO_MZ_TEST = L
    Debug.Print L
End Function


Access软件网交流QQ群(群号:198465573)
 
 相关文章
ACCESS网络连接到ORACLE数据库提取数据实例  【菜鸟先飞  2012/8/14】
Access、SQL Server、Oracle常见应用的区别  【宏鹏(转载)  2013/3/6】
Access转Oracle  【nivenm  2013/6/4】
怎样选择数据库(access,sqlserver,oracle,...  【在水一方  2013/8/2】
Access、SQLServer、Oracle常见的区别  【在水一方  2014/3/12】
获取Oracle服务器时间(ADO)  【在水一方  2014/12/5】
Oracle、SQLServer、Symfoware、DB2、SY...  【易勋  2016/1/14】
Access链接oracle代码  【麥田  2016/1/30】
VB读取ORACLE数据库的两种方法  【chinasa  2018/2/28】
常见问答
技术分类
相关资源
文章搜索
关于作者

AngelHis

文章分类

文章存档

友情链接