LoginSignup
1
0

More than 3 years have passed since last update.

デバックログ出力basファイル(vb.6.0 vba)(oracleバインド変数用)

Posted at

はじめに

vba等でデバックの際に、あまり実ソースに負担をかけないで
ログファイルを出力するため、専用に分離化しました。

ログコード

■Excel用[vba]

xx_DebugLogOut_forExcel.bas

Attribute VB_Name = "xx_DebugLogOutForExcel"
Option Explicit

'デバック用 = 最後には削除すること
Public gDebugLogStTime As Date
'出力フォルダ
Private Const LOG_FOLDER_NAME As String = "\LOG"
'ログ分の一番最初につける文字列
Private Const LOG_TOP_STR As String = "--" 

'【この関数に関するコメント用sub】※使用されることはありません
Private Sub comment()

'【対象ログ】
'XXX_Debug_Log_Print_SQL_VAL関数 = バインドパラメータの取得
'XXX_Debug_Log_Print_SQL_CMD関数 = sqlを出力
'XXX_Debug_Log_Print関数     = 通常のデバック出力

'**********************************************************************
'【記入用テンプレート】sqlの抽出の場合
'Call XXX_Debug_Log_Print_SQL_VAL("XXX", "XXX", OraDatabase)
'Call XXX_Debug_Log_Print_SQL_CMD("XXX", strSQL)
'**********************************************************************


'**********************************************************************
'【記入用テンプレート】デバック文出力の場合
'例[XXX]YYY
'Call XXX_Debug_Log_Print("XXX", "YYY")
'例[XXX]YYY:[ZZZ]
'Call XXX_Debug_Log_Print("XXX", "YYY", "ZZZ")
'
'**********************************************************************


'=========================================================
'関数名:XXX_Debug_Log_Print_SQL_VAL関数
'用途 :OsqlEditで出力する際の バインド形式でログ出力
'
'パラメータ:1)使用している関数名
'      2)バインド名称
'      3)データーベースオブジェクト
'
'
'記入例)
'Call XXX_Debug_Log_Print_SQL_VAL("CheckCheck", "I_SYU_POST_CD", OraDatabase)
'→[出力]2019/12/12_11:28:35[CheckCheck]!bind set I_SYU_POST_CD = '00';

'=========================================================
'関数名:XXX_Debug_Log_Print_SQL_CMD関数
'用途 :SQL文をログ出力
'
'パラメータ:1)使用している関数名
'      2)SQL文
'
'記入例)
'Call XXX_Debug_Log_Print_SQL_CMD("CheckCheck", strSQL)
'→[出力]2019/12/12_11:28:35[CheckCheck]SELECT 数量,SEQNO  FROM 棚マスタ WHERE 部署CD = :I_POST_CD


'=========================================================
'関数名:XXX_Debug_Log_Print関数
'用途 :ログ出力(通常)
'
'パラメータ:1)使用している関数名
'      2)出力したいメッセージ
'      3)(option)使用すると 「2)の文:[3)文]」となる、(値表示等に使用)

'記入例)
'Call XXX_Debug_Log_Print("CheckCheck", "I_SYU_POST_CD", "11")
'→[出力]2019/12/12_11:28:35[CheckCheck]I_SYU_POST_CD:[11]

'Call XXX_Debug_Log_Print("CheckCheck", "--開始--")
'→[出力]2019/12/12_11:28:35[CheckCheck]--開始--
'

'※※※※※※※【※テキストエディタ等で編集の場合】※※※※※※※※※※※※※
'出力されたログをログ部分とSQL部分に置き換え(※正規表現で置き換え)
'→時間と出力ログ文が分割されます

'---[1]----
'検索文字:^
'置換文字:--

'---[2]----
'検索文字:]
'置換文字:]\n\r

'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


End Sub
'******************************************************************
'デバックログ出力(SQL設定設定値取得)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'oraObj    :オラクルオブジェクト
'******************************************************************
Public Sub XXX_Debug_Log_Print_SQL_VAL(ByVal strProcName As String, ByVal strOuStr As String, oraObj As Object)
    Call XXX_Debug_Log_Print_SQL_CMD(strProcName, strOuStr, "sqlval", oraObj)
End Sub
'******************************************************************
'デバックログ出力(SQL文出力)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'strOutval :値やその他(出力が「:[ 値 ]」となる)
'oraObj    :オラクルオブジェクト
'******************************************************************
Public Sub XXX_Debug_Log_Print_SQL_CMD(ByVal strProcName As String, ByVal strOuStr As String, Optional ByVal strOutval As String = "", Optional oraObj As Object = Nothing)

Dim strWritLog As String
Dim strRepOutstr As String

    strRepOutstr = strOuStr
    strWritLog = ""


    'strOutvalがついているときは 「設定値」と「値」を出力する
    If strOutval = "" Then

        'strOuStrのみの場合=> SQL文として判定(改行は削除する)
        strRepOutstr = Replace(strRepOutstr, vbCr, " ")
        strRepOutstr = Replace(strRepOutstr, vbLf, " ")
        strRepOutstr = Replace(strRepOutstr, "  ", " ")

        strWritLog = strWritLog & strRepOutstr

    Else
        '設定値
        If oraObj Is Nothing Then
            strWritLog = strWritLog & strOuStr & " :[" & strOutval & "]"
        Else
            strWritLog = strWritLog & "!bind set " & strOuStr & " = '" & oraObj.Parameters(strRepOutstr).Value & "';"
        End If


    End If

    'ログ書き込み
    Call writeLogMsg(strProcName, strWritLog)


End Sub


'******************************************************************
'デバックログ出力(通常デバック文)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'strOutval :値やその他(出力が「:[ 値 ]」となる)
'******************************************************************
Public Sub XXX_Debug_Log_Print(ByVal strProcName As String, ByVal strOuStr As String, Optional ByVal strOutval As String = "")

Dim strWritLog As String


    'strOutvalがついているときは 「設定値」と「値」を出力する
    If strOutval = "" Then
        'strOuStrのみの場合
        strWritLog = strWritLog & strOuStr
    Else
        '値設定
        strWritLog = strWritLog & strOuStr & ":[" & strOutval & "]"
    End If

    'ログ書き込み
    Call writeLogMsg(strProcName, strWritLog)


End Sub
'******************************************************************
'LOG作成ファイルパス取得
'******************************************************************
Private Function getFilePass() As String
Dim strWriteDirPass As String
Dim strWritePass As String

    '最初に起動したときの時間がログの時間となる
    If gDebugLogStTime < #1/1/1900# Then
        gDebugLogStTime = Now()
    End If


    'フォルダパス設定(ない時は作成)
    strWriteDirPass = ThisWorkbook.Path & LOG_FOLDER_NAME
    If Dir(strWriteDirPass, vbDirectory) = "" Then
        MkDir strWriteDirPass
    End If

    'ファイルパス設定
    strWritePass = strWriteDirPass & "\Log_" & BookName() & "_" & Format(gDebugLogStTime, "yyyymmdd_hhnnss") & ".log"


    getFilePass = strWritePass

End Function
'******************************************************************
'Excel名取得
'******************************************************************
Private Function BookName(Optional 拡張子 As Boolean = False) As String

  Dim bk_name As String

  Application.Volatile

  bk_name = ActiveWorkbook.Name

  If 拡張子 = True Then
    BookName = bk_name
  Else
    BookName = Left(bk_name, InStrRev(bk_name, ".") - 1)
  End If

End Function
'******************************************************************
'ファイル書き込み
'******************************************************************
Private Sub writeLogMsg(strProcName As String, strLogMsg As String)

Dim strWritePass As String
Dim intFileNo  As Integer

    'ファイルパス取得
    strWritePass = getFilePass()

    ' ファイルの書き込み
    intFileNo = FileSystem.FreeFile()

    Open strWritePass For Append As #intFileNo
    Print #intFileNo, LOG_TOP_STR & Format(Now(), "yyyy/mm/dd_hh:nn:ss") & "[" & strProcName & "]" & strLogMsg
    Close #intFileNo

End Sub

■vb6.0用[bas]

xx_DebugLogOut.bas
Attribute VB_Name = "xx_DebugLogOut"
Option Explicit

'デバック用 = 最後には削除すること
Public gDebugLogStTime As Date
'出力フォルダ
Private Const LOG_FOLDER_NAME As String = "\LOG"
'ログ分の一番最初につける文字列
Private Const LOG_TOP_STR As String = "--" 


'【この関数に関するコメント用sub】※使用されることはありません
Private Sub comment()

'【対象ログ】
'XXX_Debug_Log_Print_SQL_VAL関数 = バインドパラメータの取得
'XXX_Debug_Log_Print_SQL_CMD関数 = sqlを出力
'XXX_Debug_Log_Print関数     = 通常のデバック出力

'**********************************************************************
'【記入用テンプレート】sqlの抽出の場合
'Call XXX_Debug_Log_Print_SQL_VAL("XXX", "XXX", OraDatabase)
'Call XXX_Debug_Log_Print_SQL_CMD("XXX", strSQL)
'**********************************************************************


'**********************************************************************
'【記入用テンプレート】デバック文出力の場合
'例[XXX]YYY
'Call XXX_Debug_Log_Print("XXX", "YYY")
'例[XXX]YYY:[ZZZ]
'Call XXX_Debug_Log_Print("XXX", "YYY", "ZZZ")
'
'**********************************************************************

'=========================================================
'関数名:XXX_Debug_Log_Print_SQL_VAL関数
'用途 :OsqlEditで出力する際の バインド形式でログ出力
'
'パラメータ:1)使用している関数名
'      2)バインド名称
'      3)データーベースオブジェクト
'
'
'記入例)
'Call XXX_Debug_Log_Print_SQL_VAL("CheckCheck", "I_SYU_POST_CD", OraDatabase)
'→[出力]2019/12/12_11:28:35[CheckCheck]!bind set I_SYU_POST_CD = '00';

'=========================================================
'関数名:XXX_Debug_Log_Print_SQL_CMD関数
'用途 :SQL文をログ出力
'
'パラメータ:1)使用している関数名
'      2)SQL文
'
'記入例)
'Call XXX_Debug_Log_Print_SQL_CMD("CheckCheck", strSQL)
'→[出力]2019/12/12_11:28:35[CheckCheck]SELECT 数量,SEQNO  FROM 棚マスタ WHERE 部署CD = :I_POST_CD

'=========================================================
'関数名:XXX_Debug_Log_Print関数
'用途 :ログ出力(通常)
'
'パラメータ:1)使用している関数名
'      2)出力したいメッセージ
'      3)(option)使用すると 「2)の文:[3)文]」となる、(値表示等に使用)

'記入例)
'Call XXX_Debug_Log_Print_SQL("CheckCheck", "I_SYU_POST_CD", "11")
'→[出力]2019/12/12_11:28:35[CheckCheck]I_SYU_POST_CD:[11]

'Call XXX_Debug_Log_Print_SQL("CheckCheck", "--開始--")
'→[出力]2019/12/12_11:28:35[CheckCheck]--開始--
'
'※※※※※※※【※テキストエディタ等で編集の場合】※※※※※※※※※※※※※
'出力されたログをログ部分とSQL部分に置き換え(※正規表現で置き換え)
'→時間と出力ログ文が分割されます

'---[1]----
'検索文字:^
'置換文字:--

'---[2]----
'検索文字:]
'置換文字:]\n\r

'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


End Sub
'******************************************************************
'デバックログ出力(SQL設定設定値取得)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'oraObj    :オラクルオブジェクト
'******************************************************************
Public Sub XXX_Debug_Log_Print_SQL_VAL(ByVal strProcName As String, ByVal strOuStr As String, oraObj As Object)
    Call XXX_Debug_Log_Print_SQL_CMD(strProcName, strOuStr, "sqlval", oraObj)
End Sub
'******************************************************************
'デバックログ出力(SQL文出力)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'strOutval :値やその他(出力が「:[ 値 ]」となる)
'oraObj    :オラクルオブジェクト
'******************************************************************
Public Sub XXX_Debug_Log_Print_SQL_CMD(ByVal strProcName As String, ByVal strOuStr As String, Optional ByVal strOutval As String = "", Optional oraObj As Object = Nothing)

Dim strWritLog As String
Dim strRepOutstr As String

    strRepOutstr = strOuStr
    strWritLog = ""

    'strOutvalがついているときは 「設定値」と「値」を出力する
    If strOutval = "" And oraObj Is Nothing Then

        'strOuStrのみの場合=> SQL文として判定(改行は削除する)
        strRepOutstr = Replace(strRepOutstr, vbCr, " ")
        strRepOutstr = Replace(strRepOutstr, vbLf, " ")
        strRepOutstr = Replace(strRepOutstr, "  ", " ")

        strWritLog = strWritLog & strRepOutstr

    ElseIf strOutval <> "" And Not (oraObj Is Nothing) Then

        '設定値
        strWritLog = strWritLog & "!bind set " & strOuStr & " = '" & oraObj.Parameters(strOuStr).Value & "';"

    Else

        strWritLog = strWritLog & strOuStr

    End If


    'ログ書き込み
    Call writeLogMsg(strProcName, strWritLog)


End Sub


'******************************************************************
'デバックログ出力(通常デバック文)(アプリ直下出力)
'strProcName:関数名
'strOuStr  :SQL文やその値等
'strOutval :値やその他(出力が「:[ 値 ]」となる)
'******************************************************************
Public Sub XXX_Debug_Log_Print(ByVal strProcName As String, ByVal strOuStr As String, Optional ByVal strOutval As String = "")

Dim strWritLog As String


    'strOutvalがついているときは 「設定値」と「値」を出力する
    If strOutval = "" Then
        'strOuStrのみの場合
        strWritLog = strWritLog & strOuStr
    Else
        '値設定
        strWritLog = strWritLog & strOuStr & ":[" & strOutval & "]"
    End If

    'ログ書き込み
    Call writeLogMsg(strProcName, strWritLog)


End Sub
'******************************************************************
'LOG作成ファイルパス取得
'******************************************************************
Private Function getFilePass() As String
Dim strWriteDirPass As String
Dim strWritePass As String

    '最初に起動したときの時間がログの時間となる
    If gDebugLogStTime < #1/1/1900# Then
        gDebugLogStTime = Now()
    End If


    'フォルダパス設定(ない時は作成)
    strWriteDirPass = App.Path & LOG_FOLDER_NAME
    If Dir(strWriteDirPass, vbDirectory) = "" Then
        MkDir strWriteDirPass
    End If

    'ファイルパス設定
    strWritePass = strWriteDirPass & "\Log_" & App.EXEName & "_" & Format(gDebugLogStTime, "yyyymmdd_hhnnss") & ".log"


    getFilePass = strWritePass

End Function
'******************************************************************
'ファイル書き込み
'******************************************************************
Private Sub writeLogMsg(strProcName As String, strLogMsg As String)

Dim strWritePass As String
Dim intFileNo  As Integer

    'ファイルパス取得
    strWritePass = getFilePass()

    ' ファイルの書き込み
    intFileNo = FileSystem.FreeFile()

    Open strWritePass For Append As #intFileNo
    Print #intFileNo, LOG_TOP_STR & Format(Now(), "yyyy/mm/dd_hh:nn:ss") & "[" & strProcName & "]" & strLogMsg
    Close #intFileNo

End Sub






1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0