谁能帮我看懂这段VB与ORACLE的代码Public Sub LogAndDisp(intOrgNo As Integer, oLabel As Label, _
            intMsgNo As Integer, intType As Integer, _
            strPname As String, strFname As String, _
            strMsg As String, Optional blnLog As Boolean = True)
'*****************************************************
' Purpose:   1.get error msg from dbt_alarm_const or VB/Oracle
'            2.write error log to database
'   intOrgN   Form number
'   oLabel:     the Label where display the message (lblOptMsg or lblSysMsg)
'   intMsgN   error number (err or OraDatabase.LastServerErr, if just display a
'               message which not in dbt_alarm_const or VB/Oracle internal error,
'               you can merely input 0,the function will not read from DB and
'                just display the strMsg)
'   intType:    message type (1.information,  2.alarm  3.error)
'   strPname:   process name  (char(6))
'   strFname:   function name (char(24))
'   strMsg:     message (char(80)
'   blnLog:     if write to log (True:write,  False:not write)
' Returns:   No returns
'*****************************************************
    On Error GoTo Err_Execute    
    '**********define parameters************'
    OraDatabase.Parameters.Add "inMsgNo", 0, ORAPARM_INPUT
    OraDatabase.Parameters("inMsgNo").serverType = ORATYPE_NUMBER
    
    OraDatabase.Parameters.Add "intype", 1, ORAPARM_BOTH
    OraDatabase.Parameters("intype").serverType = ORATYPE_NUMBER
    
    OraDatabase.Parameters.Add "incname", "***", ORAPARM_INPUT
    OraDatabase.Parameters("incname").serverType = ORATYPE_VARCHAR
    
    OraDatabase.Parameters.Add "inorgno", 0, ORAPARM_INPUT
    OraDatabase.Parameters("inorgno").serverType = ORATYPE_NUMBER
    
    OraDatabase.Parameters.Add "inpname", "***", ORAPARM_INPUT
    OraDatabase.Parameters("inpname").serverType = ORATYPE_VARCHAR
    
    OraDatabase.Parameters.Add "infname", "***", ORAPARM_INPUT
    OraDatabase.Parameters("infname").serverType = ORATYPE_VARCHAR
    
    OraDatabase.Parameters.Add "inMsg", "***", ORAPARM_BOTH
    OraDatabase.Parameters("inMsg").serverType = ORATYPE_VARCHAR
    
    
    '**********set parameters************'
    OraDatabase.Parameters("inMsgNo").Value = intMsgNo
    OraDatabase.Parameters("intype").Value = intType
    OraDatabase.Parameters("incname").Value = gstrCRT
    OraDatabase.Parameters("inorgno").Value = intOrgNo
    OraDatabase.Parameters("inpname").Value = strPname
    OraDatabase.Parameters("infname").Value = strFname
    If Not (intMsgNo > 2000 And intMsgNo < 3000) Then 'show instant message from Internal
        OraDatabase.Parameters("inMsg").Value = strMsg
            oLabel.Caption = Format(Now, "[Hh24:Nn:Ss]") & _
            "[" & gstrCRT & "][" & intOrgNo & "]<" & strFname & ">" & _
            strMsg
    Else  'search in dbt_alarm_const
            OraDatabase.DbExecuteSQL ("Begin OptErrMsg.GetErrMsg " & _
            "(:inMsgNo,:intype,:inMsg); End;")        If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
            Error 2
        End If
        If IsNull(OraDatabase.Parameters("inMsg").Value) Then
            oLabel.Caption = Format(Now, "[Hh24:Nn:Ss]") & _
            "[" & gstrCRT & "][" & intOrgNo & "]<" & strFname & ">" & _
            "No relational message in dbt_alarm_const"
        Else
            oLabel.Caption = Format(Now, "[Hh24:Nn:Ss]") & _
            "[" & gstrCRT & "][" & intOrgNo & "]<" & strFname & ">" & _
            OraDatabase.Parameters("inMsg").Value
        End If
    End If
    
    If blnLog Then
        '*********Log to dbt_alarm_log***********'
        
        OraDatabase.DbExecuteSQL ("Begin errmsg.logerrmsg " & _
            "(:inMsgNo,:intype,:incname,:inorgno,:inpname,:infname,:inMsg); End;")        If OraDatabase.LastServerErr <> 0 Or OraDatabase.LastServerErrText <> "" Then
            Error 2
        End If
    
        '*********Display on CRT***********'    End If
    Select Case OraDatabase.Parameters("intype").Value
        Case 1  'Information
        oLabel.ForeColor = &H80FF80
        Case 2 'Warning
        oLabel.ForeColor = &HFFFF&
        Case 3  'Error
        oLabel.ForeColor = &H80&
        Case Else
        oLabel.ForeColor = &HC000&
    End Select
    ''''remove Parameter '''''''
    OraDatabase.Parameters.Remove ("inMsgNo")
    OraDatabase.Parameters.Remove ("intype")
    OraDatabase.Parameters.Remove ("incname")
    OraDatabase.Parameters.Remove ("inorgno")
    OraDatabase.Parameters.Remove ("inpname")
    OraDatabase.Parameters.Remove ("infname")
    OraDatabase.Parameters.Remove ("inMsg")
    Exit SubErr_Execute:
'Check to see if an Oracle error has occurred.
If OraSession.LastServerErr = 0 Then
   If OraDatabase.LastServerErr = 0 Then 'Must be some non-Oracle error
    If Err = 1 Then
        ErrMsg = "The error number does not exit,please check."
    Else
        ErrMsg = "VB:" & Err & " " & Err.Description
    End If
   Else
    ErrMsg = OraDatabase.LastServerErrText
    OraDatabase.LastServerErrReset
   End If
  Else
      ErrMsg = OraSession.LastServerErrText
      OraSession.LastServerErrReset
  End If
Screen.MousePointer = vbDefault
MsgBox ErrMsg, vbCritical     ''''remove Parameter '''''''
    OraDatabase.Parameters.Remove ("inMsgNo")
    OraDatabase.Parameters.Remove ("intype")
    OraDatabase.Parameters.Remove ("incname")
    OraDatabase.Parameters.Remove ("inorgno")
    OraDatabase.Parameters.Remove ("inpname")
    OraDatabase.Parameters.Remove ("infname")
    OraDatabase.Parameters.Remove ("inMsg")
Exit Sub
End Sub

解决方案 »

  1.   

    这个函数是读取Oracle数据库中的存储过程,“define parameters”那段代码是设置该存储过程的所有相关参数到OraDatabase.Parameters链接对象中,然后通过“set parameters”设置该存储过程的参数的默认值。最后运行返回结果给相应的变量。你可以参考我的Blog里面的文章,也有相应的解释:
    http://blog.csdn.net/douhapy/archive/2005/01.aspx
      

  2.   

    http://blog.csdn.net/douhapy/archive/2005/01/10/246870.aspx
    http://blog.csdn.net/douhapy/archive/2005/01/10/246883.aspx
    http://blog.csdn.net/douhapy/archive/2005/01/10/246890.aspx