Comprobar si existe una tabla en una base de datos cualquiera |
Por Enrique Martínez Montejo |
Última revisión: 26/03/2004 |
Mediante el método OpenSchema de un objeto Connection de la biblioteca de ADO, podemos abrir un Recordset especificando un criterio de restricción, el cuál deberá de incluir el nombre y el tipo de la tabla cuya existencia se desea conocer. Si el Recordset no contiene registros, significa que la tabla no se encuentra en la base de datos.
El siguiente ejemplo implementa una función que devolverá un valor Boolean dependiendo de si la tabla existe (True) o no (False) en la base de datos. Para ello, deberá de pasar a la función un objeto Connection abierto, y el nombre de la tabla que se desea comprobar.
A continuación, copie y pegue el siguiente código en la sección Declaraciones del formulario de inicio del proyecto.
Option Explicit
Private
Sub Form_Load()
Dim cnn
As ADODB.Connection
' Abrimos una conexión con una base
de datos SQL Server
'
Set cnn =
New ADODB.Connection
With cnn
.Provider = "SQLOLEDB.1"
.ConnectionString = "Data
Source=Nombre_Servidor_SQL;" & _
"Initial Catalog=Northwind;" & _
"Integrated Security=SSPI;"
.Open
End
With
' Comprobamos si existe la tabla
MsgBox ExisteTabla (cnn, "Employees")
End Sub
Private
Function ExisteTabla(ByVal cnn
As ADODB.Connection, _
ByVal strTableName
As
String)
As
Boolean
Dim rsTablas
As ADODB.Recordset
Dim vCriterio
As
Variant
' Abandonamos la función, si ...
'
' ... el objeto Connection no es válido, ...
If (cnn
Is
Nothing)
Then
Exit
Function
' ... o si la conexión está cerrada
If (cnn.State = adStateClosed)
Then
Exit
Function
' Establecemos el criterio,
indicando el nombre y tipo de la tabla
vCriterio = Array(Empty,
Empty, strTableName, "TABLE")
' Abro un recordset cuyo registros
contienen
' las tablas existentes en la base de datos
'
Set rsTablas = cnn.OpenSchema(adSchemaTables, vCriterio)
' Si el Recordset no tiene
registros, es porque la tabla
' no existe.
'
ExisteTabla = IIf(rsTablas.EOF,
False,
True)
End
Function
Enrique Martínez Montejo - 2004
NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.
NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.