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


#はじめに

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

#ログコード

###■Excel用[vba]

```vb: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関数     = 通常のデバック出力

'**********************************************************************
'【記入用テンプレート】ｓｑｌの抽出の場合
'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 数量,ＳＥＱＮＯ  FROM 棚マスタ WHERE 部署ＣＤ = :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]--開始--
'

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

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

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

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


End Sub
'******************************************************************
'デバックログ出力(ＳＱＬ設定設定値取得)(アプリ直下出力)
'strProcName：関数名
'strOuStr  ：ＳＱＬ文やその値等
'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
'******************************************************************
'デバックログ出力(ＳＱＬ文出力)(アプリ直下出力)
'strProcName：関数名
'strOuStr  ：ＳＱＬ文やその値等
'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  ：ＳＱＬ文やその値等
'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]


```vb: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関数     = 通常のデバック出力

'**********************************************************************
'【記入用テンプレート】ｓｑｌの抽出の場合
'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 数量,ＳＥＱＮＯ  FROM 棚マスタ WHERE 部署ＣＤ = :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]--開始--
'
'※※※※※※※【※テキストエディタ等で編集の場合】※※※※※※※※※※※※※
'出力されたログをログ部分とＳＱＬ部分に置き換え（※正規表現で置き換え）
'→時間と出力ログ文が分割されます

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

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

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


End Sub
'******************************************************************
'デバックログ出力(ＳＱＬ設定設定値取得)(アプリ直下出力)
'strProcName：関数名
'strOuStr  ：ＳＱＬ文やその値等
'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
'******************************************************************
'デバックログ出力(ＳＱＬ文出力)(アプリ直下出力)
'strProcName：関数名
'strOuStr  ：ＳＱＬ文やその値等
'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  ：ＳＱＬ文やその値等
'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






```