VBA, MS Access MS Access в примерах

Проверка на наличие таблицы в текущей БД (Fields.Сount) DAO и ADO

DAO

Public Function IsTablePresentDAO(strTableName As String) As Boolean
'es - 28.04.2022 v002
'Проверка на наличие  и работоспособность таблицы в текущей базе данных
'   Если  таблица существует - вернет True (Истина = -1)
'   В остальных случаях: False
'--------------------------------------------------------------------
Dim iVal As Integer
On Error GoTo IsTablePresentDAO_Err

' Пытаемся посчитать кол-во полей в заданной таблице
    iVal = CurrentDb.TableDefs(strTableName).Fields.Count
    
' Если поля есть - значит и таблица существует (что вполне логично)
    If iVal > 0 Then IsTablePresentDAO = True

IsTablePresentDAO_Bye:
    Exit Function

IsTablePresentDAO_Err:
    'Болок [Select Case] ниже в принцие не нужен - так ... на всякий случай
    Select Case Err.Number
        Case 3265  ' Ошибка обращения к обьекту (т.е. НЕТ таблицы)
        Case Else
            'MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
            "in procedure IsTablePresentDAO", vbCritical, "Error!"
    End Select
    Err.Clear
    Resume IsTablePresentDAO_Bye
End Function



ADO

Public Function IsTablePresentADO(sTableName As String) As Boolean
'es - 28.04.2022 LE 28.04.2022 v001
'Проверка на наличие и работоспособность таблицы в текущей базе данных
'   Если  таблица существует - вернет True (Истина = -1)
'   В остальных случаях: False
'----------------------------------------------------------------------------------------------
' ?IsTablePresentADO("tmp_FormsLog")
'----------------------------------------------------------------------------------------------
Dim rst As New ADODB.Recordset
Dim sSQL$, iFildsCount
On Error GoTo IsTablePresentADO_Err

    Set rst = CreateObject("ADODB.Recordset")
    sSQL = "SELECT * FROM " & sTableName
    rst.Open sSQL, CurrentProject.Connection, adOpenStatic, adLockReadOnly
    
    iFildsCount = rst.Fields.Count
    'Debug.Print iFildsCount
    If iFildsCount > 0 Then IsTablePresentADO = True

IsTablePresentADO_End:
    On Error Resume Next
    rst.Close
    Set rst = Nothing
    Err.Clear
    Exit Function

IsTablePresentADO_Err:
    'MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Function" & _
           "IsTablePresentADO - modTools.", vbCritical, "Error!"
    'Debug.Print "IsTablePresentADO_Line: " & Erl & "."
    Err.Clear
    Resume IsTablePresentADO_End
End Function
Назад ToTop
L.E. 28.04.2022
Рейтинг@Mail.ru