FindTable (ADO): saber si una tabla existe usando ADO
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
Argumento | Descripción |
---|---|
TableName | Requerido. Nombre de la tabla a buscar |
Pwd | Opcional. Contraseña de la base de datos |
DBPath | Opcional. 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)
Pregunta Sé cómo imprimir un informe mediante código y sé cómo hacer para que aparezca el cuadro de diálogo imprimir,…
Cómo conseguir en un informe calcular sólo el total para cada página