La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4502 - DETERMINAR LAS TABLAS EN ADO
Autor:  Santiago Franchi
Estoy programando un DLL en VB para usarlo como servidor remoto en una aplicación que crearé posteriormente; pero para poder programarlo eficientemente, necesito saber la cantidad de tablas que hay en la base de datos.
En DAO se puede usar la colección TableDefs, pero en ADO, no se cómo determinar este valor.
Si alguien puede decirme alguna función, colección o cualquier otro medio para determinar este valor, desde ya muchísimas gracias.

  Respuesta:  Alberto
En principio es el propio SGBD el que tiene la información sobre las tablas existentes en la Base de Datos y normalmente estarán guardadas en tablas del sistema por lo que deberemos acceder a ellas mediante consultas SQL, por ejemplo en ACCESS la consulta:

SELECT Name
FROM msysobjects
WHERE type=1 AND
(flags=0 OR flags=8);

nos devuelve el nombre de las tablas de usuario aunque esten ocultas, si quitamos la segunda condición (flags=0 OR flags=8) nos devolverá todas las tablas, incluidas las de sistema.

Dependiendo del SGBD la tabla y las condiciones de la consulta serán diferentes, es más, puede que la consulta ya este creada por el sistema.

  Respuesta:  Ubeimar Alonso Vergara Gallo
Dim RS As ADODB.Recordset
Set RS = Conexion.OpenSchema(adSchemaTables)

Esto te devuelve un RecordSet con todas las tablas, incluidas las del sistema.

Si solo deseas contar tus tablas:

Do Until RS.EOF
If UCase(RS!TABLE_TYPE) = "TABLE" Then
NroTablas = NroTablas + 1
End If
.MoveNext
Loop

Estoy seguro que con eso funciona...

Mucha Suerte !!!
Ubeimar Vergara