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
最終更新:2013年06月09日 00:21