25 noviembre 2008

Comprobar si una tabla existe en Microsoft Access / VBA

Casi siempre, para un mismo problema, hay más de una solución.

Cuando trabajamos con VBA en Microsoft Access y deseamos comprobar la existencia de una tabla, son tres las formas de tratar el problema que vienen de inmediato a nuestra mente.

1) Recorrer los elementos de la colección TableDefs, para encontrar el elemento deseado.

Private Function TableExistsEx(ByVal Name As String) As Boolean
Dim i As Integer
Dim logEx As Boolean

Name = LCase(Name)
For i = vbEmpty To (CurrentDb.TableDefs.Count - 1)
If LCase(CurrentDb.TableDefs(i).Name) = Name Then
logEx = True
Exit For
End If
Next

TableExistsEx = logEx
End Function

2) Asignar el elemento de la colección TableDefs a un objeto de tal forma que al no existir nos genere un error.

Private Function TableExists(ByVal Name As String) As Boolean
Dim def As DAO.TableDef

On Local Error Resume Next

Set def = CurrentDb.TableDefs(Name)
TableExists = (Err.Number = vbEmpty)

On Local Error GoTo 0

End Function

3) Consultar la tabla MSysObjects

Private Function TableExists(ByVal Name As String) As Boolean

TableExists = _
Not (Nz(DLookup("[Name]", "MSysObjects", _
"[Name]='" & _
Name & "' And [Type]=6"), _
"No") = "No")
End Function

4 comentarios:

  1. Gracias, me ha sido de gran utilidad

    ResponderBorrar
  2. Gracias por este ejemplo

    ResponderBorrar
  3. Probé la tercera forma y es sencillamente adecuada, limpia y eficaz. Muchas gracias por poner estas respuestas a una pregunta tan concreta.

    Carlos Ramíez
    Costa Rica

    ResponderBorrar
  4. Tercera forma probada, excelente, limpia y sencilla.
    Muy agradecido por poner respuestas a este tipo de preguntas tan concretas.

    Carlos Ramírez
    Costa Rica

    ResponderBorrar