※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

DBチェッククラス

  • ソース
Option Compare Database
Option Explicit

' ACC_CheckDataBase
' VBAでDBを操作する前に行う簡単なチェックを簡易提供する
' DBに接続されていることが前提
' 実行環境にはADOX,ADODBの参照設定が必要です

Private Sub class_initialize()
    ' なにもしません
End Sub

' HasSelectedTable
' 指定DBに指定テーブルが存在しているかを確認する
' 引数:あり
' iDB   : ADODB.Connection    :検索先のDB
' iSelectedTableName    : String  :検索対象のテーブル名
' 戻り値:あり
' Boolean   : 検索対象のテーブルの有無(テーブルが存在していた場合TRUE)
Public Function HasSelectedTable(ByVal iDB As ADODB.Connection, ByVal iSelectedTableName As String) As Boolean
    Dim dbCatalog As ADOX.Catalog
    Dim dbTbl As ADOX.Table
    Dim result As Boolean
    
    ' 1.返却値の初期化
    result = False
    
    ' 2.カタログ取得
    Set dbCatalog = New ADOX.Catalog
    Set dbCatalog.ActiveConnection = iDB
    
    ' 3.指定DBのすべてのテーブルに対し処理を行う
    For Each dbTbl In dbCatalog.Tables
        ' A.検索対象のテーブルが存在していれば、返却値をTRUEにする
        If dbTbl.Name = iSelectedTableName Then
            result = True
            Exit For
        End If
    Next
    
    HasSelectedTable = result
End Function


' HasRecordInSelectedTable
' 指定DBの指定テーブルがレコードを1件以上保持しているかを確認する
' 事前に指定テーブル自体の有無は確認しておくこと
' 引数:あり
' iDB   : ADODB.Connection   :検索先のDB
' iSelectedTableName    : String  :検索対象のテーブル名
' 戻り値:あり
' Boolean   : 検索対象のレコードの有無(レコードが存在していた場合TRUE)
Public Function HasRecordInSelectedTable(ByVal iDB As ADODB.Connection, ByVal iSelectedTableName As String) As Boolean
    Dim dbTbl As ADOX.Tables
    Dim rsObj As ADODB.Recordset
    Dim result As Boolean
    
    ' 1.返却値の初期化
    result = False
    
    ' 2.確認時点の指定テーブルのレコードを取得
    Set rsObj = New ADODB.Recordset
    Call rsObj.Open(iSelectedTableName, iDB, adOpenStatic, adLockReadOnly)
    
    If rsObj.RecordCount > 0 Then
        '3.レコード数が1件以上の場合、返却値をTRUEにする
        result = True
    End If
    
    Set rsObj = Nothing
    
    HasRecordInSelectedTable = result
End Function

' HasSelectedQuery
' 指定DBに指定クエリが存在しているかを確認する
' 引数:あり
' iDB   : ADODB.Connection   :検索先のDB
' iSelectedQueryName    : String  :検索対象のクエリ名
' 戻り値:あり
' Boolean   : 検索対象のクエリの有無(クエリが存在していた場合TRUE)
Public Function HasSelectedQuery(ByVal iDB As ADODB.Connection, ByVal iSelectedQueryName As String) As Boolean
    Dim dbCatalog As ADOX.Catalog
    Dim dbView As ADOX.View
    Dim dbPro As ADOX.Procedure
    Dim result As Boolean
    
    ' 1.返却値の初期化
    result = False
    
    ' 2.カタログ取得
    Set dbCatalog = New ADOX.Catalog
    Set dbCatalog.ActiveConnection = iDB
    
    ' 3.指定DBのすべてのクエリに対し処理を行う
    ' A.クエリ(View)
    For Each dbView In dbCatalog.Views
        ' 3.検索対象のテーブルが存在していれば、返却値をTRUEにする
        If dbView.Name = iSelectedQueryName Then
            result = True
            Exit For
        End If
    Next
    
    ' B.クエリ(Procesure)
    If result <> True Then
        For Each dbPro In dbCatalog.Procedures
            If dbPro.Name = iSelectedQueryName Then
                result = True
                Exit For
            End If
        Next
    End If
    
    HasSelectedQuery = result
End Function