Juanjo Luna

MVP Microsoft 365 Apps & Services 2023

LinkedIn Learning Instructor

Presidente de Access User Groups España

CEO Luna-Soft

Desarrollador

Consultor Informático

Juanjo Luna

MVP Microsoft 365 Apps & Services 2023

LinkedIn Learning Instructor

Presidente de Access User Groups España

CEO Luna-Soft

Desarrollador

Consultor Informático

Blog Post

FindTable (ADO): saber si una tabla existe usando ADO

14 de febrero de 2024 ACCESS, El rincón de Happy, Tablas

Pregunta

¿Cómo puedo saber por código si una tabla existe o no dentro de una base de datos? Estoy utilizando ADO

Respuesta

La función FindTable verifica si una tabla existe dentro de una base de datos, utilizando ADO. Puede buscar en la base de datos actual o en una base de datos externa, incluso aunque tenga contraseña (ver más abajo en “Argumentos”)

FindTable devolverá -1 si ha encontrado la tabla especificada o, en caso contrario, devolverá el número de error que se haya producido.

Esta función necesita tener activada la referencia a la librería Microsoft ActiveX Data Objects 2.x Library.

Argumentos

ArgumentoDescripción
TableNameRequerido. Nombre de la tabla a buscar
PwdOpcional. Contraseña de la base de datos
DBPathOpcional. Ruta y nombre de la base de datos donde se buscará la tabla. Si este argumento se omite o está vacío (“”), la función buscará en la base de datos actual

Ejemplo de uso

(busca en la base de datos actual)
Dim ret As Long

    ret = FindTable("MiTabla")
    If ret = -1 Then
        MsgBox "La tabla existe"
    Else
        MsgBox "Se ha producido el error " & ret
    End If

(busca en una base de datos con contraseña)
Dim ret As Long

    ret = FindTable("MiTabla", "123456", "C:\MiBd.mdb")
    If ret = -1 Then
        MsgBox "La tabla existe"
    Else
        MsgBox "Se ha producido el error " & ret
    End If

Código

'---------------------------------------------------------
'
' FindTable
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
'     accessvbafaq@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function FindTable( _
                       TableName As String, _
                       Optional Pwd As String, _
                       Optional DBPath As String) As Long
                       
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset

    On Error GoTo FindTable_Error

    If DBPath = "" Then
        Set con = CurrentProject.Connection
    Else
        Set con = New ADODB.Connection
        With con
            .Provider = "Microsoft.Jet.OLEDB.4.0;"
            .ConnectionString = "Data Source=" & DBPath
            .Properties("Jet OLEDB:Database Password") = Pwd
            
            .Open
        End With
    End If
    
    Set rst = con.OpenSchema(adSchemaTables)
    rst.Find "TABLE_NAME='" & TableName & "'"
    If Not rst.EOF Then
        FindTable = -1
    End If
    
exit_Function:

    If Not rst Is Nothing Then
        rst.Close
        Set rst = Nothing
    End If
    
    If con.State = adStateOpen Then
        con.Close
    End If
    
    Set rst = Nothing
    Set con = Nothing

   On Error GoTo 0
   Exit Function

FindTable_Error:
    
    FindTable = Err.Number
    Resume exit_Function

End Function
'---------------------------------------------------------

Créditos

con el fin de dar a conocer el trabajo de uno de los más grandes en el mundo de Access en español, y tras solicitar su permiso, replico este artículo de Juan M Afán de Ribera. Todos los derechos y autoría corresponden a él. Access & VBA FAQ – FindTable (ADO) (archive.org)

Taggs:
Related Posts
Opciones de impresión a través de código

Pregunta Sé cómo imprimir un informe mediante código y sé cómo hacer para que aparezca el cuadro de diálogo imprimir,…

Totales por página

Cómo conseguir en un informe calcular sólo el total para cada página

Write a comment