El amigo Luis, que está sacando gran partido a las bases de datos Access según me cuentan (espero que pronto lo muestre), me preguntaba hoy que si conocía alguna manera de acceder a los datos acerca de las tablas en una base de datos Access. Tenía una ligera idea de por dónde iban los tiros (MSysObjects), y, tras investigar un poco, a continuación paso a enumerar las sentencias necesarias para acceder a diversa información:
Número de tablas de usuario:
SELECT COUNT(*) FROM msysobjects WHERE (((msysobjects.Type)=1) AND ((msysobjects.Flags)=0));
Nombre de todas las tablas de usuario:
SELECT msysobjects.Name FROM msysobjects WHERE (((msysobjects.Type)=1) AND ((msysobjects.Flags)=0));
Número de formularios:
SELECT COUNT(*) FROM msysobjects WHERE (((msysobjects.Type)=-32768) AND ((msysobjects.Flags)=0));
Nombre de todos los formularios:
SELECT msysobjects.Name FROM msysobjects WHERE (((msysobjects.Type)=-32768) AND ((msysobjects.Flags)=0));
Número de consultas:
SELECT COUNT(*) FROM msysobjects WHERE (((msysobjects.Type)=5) AND ((msysobjects.Flags)=0));
Nombre de todas las consultas:
SELECT msysobjects.Name FROM msysobjects WHERE (((msysobjects.Type)=5) AND ((msysobjects.Flags)=0));
¿Preguntas? ¿Sugerencias? Usen los comentarios 🙂
¿Porqué el Type que corresponde a las consultas tiene un número tan gordo? ¿Y el “-” de después?
Ha sido un error en el coloreador de SQL. Es -32768. El ID elegido, se lo preguntas a MS 😛
Tienes que tener en cuenta que no suelen funcionar todas las aplicaciones, solo en casos concretos donde los permisos lo permitan.
¿Ein?
Adjunto información complementaria a la de Cris. Gracias por la info.
OpenSchema, método
Obtiene información del esquema de una base de datos a partir del proveedor.
Sintaxis
Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)
Valores devueltos
Devuelve un objeto Recordset que contiene información del esquema. El Recordset se abrirá como un cursor estático de sólo lectura. QueryType determina qué columnas aparecen en el objeto Recordset.
Parámetros
QueryType Un valor de la enumeración SchemaEnum que representa el tipo de consulta de esquema que desea ejecutar.
Criteria Opcional. Una matriz de restricciones de consulta para cada opción QueryType, como se muestra en SchemaEnum.
SchemaID El GUID de una consulta del esquema de proveedor no definida en la especificación OLE DB. Este parámetro se requiere si el valor de QueryType está establecido a adSchemaProviderSpecific; de otro modo, no se usa.
Comentarios
El método OpenSchema devuelve información descriptiva acerca del origen de datos, como qué tablas hay en él, las columnas de las tablas y los tipos de datos que aceptan.
El argumento QueryType es un GUID que indica las columnas (esquemas) que devuelve. La especificación OLE DB tiene una lista completa de esquemas.
El argumento Criteria limita el resultado de una consulta de esquema. Criteria especifica una matriz de valores que se tienen que dar en un subconjunto de columnas, llamadas columnas de restricción, en el Recordset resultante.
La constante adSchemaProviderSpecific se usa con el argumento QueryType si el proveedor define sus propias consultas de esquema no estándar, diferentes de las de la lista anterior. Cuando se usa esta constante, se requiere el argumento SchemaID para pasar el GUID de la consulta de esquema que se va a ejecutar. Si el valor de QueryType está establecido a adSchemaProviderSpecific pero no se proporciona un SchemaID, se producirá un error.
Los proveedores no están obligados a admitir todas las consultas de esquema estándar de OLE DB. Concretamente, la especificación OLE DB solamente requiere adSchemaTables, adSchemaColumns y adSchemaProviderTypes. No obstante, no es necesario que el proveedor admita todas las restricciones de Criteria mostradas en la lista anterior en dichas consultas de esquema.
Uso de Remote Data Service El método OpenSchema no está disponible en los objetos Connection de cliente.
Nota En Visual Basic, las columnas que tienen un entero de cuatro bytes sin signo (DBTYPE UI4) en el Recordset devuelto por el método OpenSchema en el objeto Connection no se pueden comparar con otras variables. Para obtener más información acerca de los tipos de datos de OLE DB, consulte el Capítulo 13 y el Apéndice A de la Referencia del programador de OLE DB de Microsoft.
Bueno, y a fuer de pasarme algo con el texto, una relación del enumerado en el que se basa el parámetro querytype y. lo más importante, la relación de columnas que devuelve el recordset:
SchemaEnum
Especifica el tipo de Recordset de esquema que obtiene el método OpenSchema.
Comentarios
Puede encontrar información adicional acerca de la función y las columnas devueltas por cada constante de ADO en los temas del Apéndice B de la Referencia del programador de OLE DB. El nombre de cada tema se presenta entre paréntesis en la sección Descripción de la tabla siguiente.
Puede encontrar información adicional acerca de la función y las columnas devueltas por cada constante de ADO MD en los temas del Capítulo 22 de OLE DB para OLAP. El nombre de cada tema se presenta entre paréntesis marcado con un asterisco (*) en la columna Descripción de la tabla siguiente.
Para convertir los tipos de datos de las columnas de la documentación de OLE DB a tipos de datos de ADO consulte la columna Descripción del tema DataTypeEnum de ADO. Por ejemplo, el tipo de datos DBTYPE_WSTR de OLE DB es equivalente al tipo de datos adWChar de ADO.
ADO genera resultados de tipo esquema para las constantes, adSchemaDBInfoKeywords y adSchemaDBInfoLiterals. ADO crea un Recordset y, a continuación, llena cada fila con los valores devueltos por los métodos IDBInfo::GetKeywords y IDBInfo::GetLiteralInfo, respectivamente. Puede encontrar información adicional acerca de estos métodos en la Sección IDBInfo de la Referencia del programador de OLE DB.
Constante Valor Descripción Columnas de restricción
AdSchemaAsserts 0 Devuelve las aserciones definidas en el catálogo que son propiedad de un usuario dado.
(Rowset ASSERTIONS)
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaCatalogs 1 Devuelve los atributos físicos asociados con catálogos accesibles desde el DBMS.
(Rowset CATALOGS)
CATALOG_NAME
adSchemaCharacterSets 2 Devuelve los juegos de caracteres definidos en el catálogo a los que puede tener acceso un usuario dado.
(Rowset CHARACTER_SETS)
CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
adSchemaCheckConstraints 5 Devuelve las restricciones de comprobación definidas en el catálogo que son propiedad de un usuario dado.
(Rowset CHECK_CONSTRAINTS)
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaCollations 3 Devuelve las ordenaciones de caracteres definidas en el catálogo a las que puede tener acceso un usuario dado.
(Rowset COLLATIONS)
COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
adSchemaColumnPrivileges 13 Devuelve los privilegios sobre columnas de tablas definidas en el catálogo que están disponibles o han sido concedidos a un usuario dado.
(Rowset COLUMN_PRIVILEGES)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
adSchemaColumns 4 Devuelve las columnas de las tablas (incluso las vistas) definidas en el catálogo a las que puede tener acceso un usuario dado.
(Rowset COLUMNS)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaColumnsDomainUsage 11 Devuelve las columnas definidas en el catálogo que dependen de un dominio definido en el catálogo y son propiedad de un usuario dado.
(Rowset DOLUMN_DOMAIN_USAGE)
DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
adSchemaConstraintColumnUsage 6 Devuelve las columnas que se utilizan en restricciones referenciales, restricciones de unicidad, restricciones de comprobación y aserciones definidas en el catálogo que son propiedad de un usuario dado.
(Rowset CONSTRAINT_DOMAIN_USAGE)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaConstraintTableUsage 7 Devuelve las tablas que se utilizan en restricciones referenciales, restricciones de unicidad, restricciones de comprobación y aserciones definidas en el catálogo que son propiedad de un usuario dado.
(Rowset CONSTRAINT_TABLE_USAGE)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaCubes 32 Devuelve información acerca de los cubos disponibles en un esquema, o el catálogo, si el proveedor no admite esquemas.
(Rowset CUBES)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
adSchemaDBInfoKeywords 30 Devuelve la lista de palabras clave específicas del proveedor.
(IDBInfo::GetKeywords *)
adSchemaDBInfoLiterals 31 Devuelve la lista de literales específicos del proveedor que se utilizan en los comandos de texto.
(IDBInfo::GetKeywords *)
adSchemaDimensions 33 Devuelve información acerca de las dimensiones de un cubo dado. Tiene una fila por cada dimensión.
(Rowset DIMENSIONS *)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_NAME
DIMENSION_UNIQUE_NAME
adSchemaForeignKeys 27 Devuelve las columnas de las claves externas definidas en el catálogo por un usuario dado.
(Rowset FOREIGN_KEYS)
PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
adSchemaHierarchies 34 Devuelve información acerca de las jerarquías disponibles en una dimensión.
(Rowset HIERARCHIES *)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME
HIERARCHY_NAME
HIERARCHY_UNIQUE_NAME
adSchemaIndexes 12 Devuelve los índices definidos en el catálogo que son propiedad de un usuario dado.
(Rowset INDEXES)
TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
adSchemaKeyColumnUsage 8 Devuelve las columnas definidas en el catálogo que tienen restricciones de clave establecidas por un usuario dado.
(Rowset KEY_COLUMN_USAGE)
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaLevels 35 Devuelve información acerca de los niveles disponibles en una dimensión.
(Rowset LEVELS)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME
HIERARCHY_UNIQUE_NAME
LEVEL_NAME
LEVEL_UNIQUE_NAME
adSchemaMeasures 36 Devuelve información acerca de las medidas disponibles.
(Rowset MEASURES *)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
MEASURE_NAME
MEASURE_UNIQUE_NAME
adSchemaMembers 38 Devuelve información acerca de los miembros disponibles.
(Rowset MEMBERS *)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME
HIERARCHY_UNIQUE_NAME
LEVEL_UNIQUE_NAME
LEVEL_NUMBER
MEMBER_NAME
MEMBER_UNIQUE_NAME
MEMBER_CAPTION
MEMBER_TYPE
Operador árbol (Para obtener más información, consulte OLE DB para OLAP!href(“mk:@MSITStore:OLEDB.chm::/htm/Oledbpart3_ole_db_for_olap.htm”)
adSchemaPrimaryKeys 28 Devuelve las columnas de las claves principales definidas en el catálogo por un usuario dado.
(Rowset PRIMARY_KEYS)
PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
adSchemaProcedureColumns 29 Devuelve información acerca de las columnas de conjuntos de filas devueltas por procedimientos.
(Rowset PROCEDURE_COLUMNS)
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
adSchemaProcedureParameters 26 Devuelve información acerca de los parámetros y los códigos devueltos por procedimientos.
(Rowset PROCEDURE_PARAMETERS)
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMETER_NAME
adSchemaProcedures 16 Devuelve los procedimientos definidos en el catálogo que son propiedad de un usuario dado.
(Rowset PROCEDURES *)
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE
adSchemaProperties 37 Devuelve información acerca de las propiedades disponibles en cada nivel de la dimensión.
(Rowset PROPERTIES *)
CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME
HIERARCHY_UNIQUE_NAME
LEVEL_UNIQUE_NAME
MEMBER_UNIQUE_NAME
PROPERTY_TYPE
PROPERTY_NAME
adSchemaProviderSpecific -1 Se utiliza si el proveedor define sus propias consultas de esquema no estándar.
adSchemaProviderTypes 22 Devuelve los tipos de datos (básicos) aceptados por el proveedor de datos.
(Rowset PROVIDER_TYPES)
DATA_TYPE
BEST_MATCH
adSchemaReferentialConstraints 9 Devuelve las restricciones referenciales definidas en el catálogo que son propiedad de un usuario dado.
(Rowset REFERENTIAL_CONSTRAINTS)
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaSchemata 17 Devuelve los esquemas (objetos de base de datos) que son propiedad de un usuario dado.
(Rowset SCHEMATA)
CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
adSchemaSQLLanguages 18 Devuelve los niveles de compatibilidad, opciones y dialectos aceptados en la implementación SQL del proceso de datos definido en el catálogo.
(Rowset SQL_LANGUAGES)
adSchemaStatistics 19 Devuelve las estadísticas definidas en el catálogo que son propiedad de un usuario dado.
(Rowset STATISTICS)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaTableConstraints 10 Devuelve las restricciones de tabla definidas en el catálogo que son propiedad de un usuario dado.
(Rowset TABLE_CONSTRAINTS)
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
adSchemaTablePrivileges 14 Devuelve los privilegios sobre tablas definidas en el catálogo que están disponibles o han sido concedidos a un usuario dado.
(Rowset TABLE_PRIVILEGES)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
adSchemaTables 20 Devuelve las tablas (incluso las vistas) definidas en el catálogo a las que puede tener acceso un usuario dado.
(Rowset TABLES)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
adSchemaTranslations 21 Devuelve las conversiones de caracteres definidas en el catálogo a las que puede tener acceso un usuario dado.
(Rowset TRANSLATIONS)
TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
adSchemaTrustees 39 Reservado para su uso futuro.
adSchemaUsagePrivileges 15 Devuelve los privilegios USAGE sobre objetos definidos en el catálogo que están disponibles o han sido concedidos a un usuario dado.
(Rowset USAGE_PRIVILEGES)
OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
adSchemaViewColumnUsage 24 Devuelve las columnas de las que dependen las tablas de las vistas, definidas en el catálogo y que son propiedad de un usuario dado.
(Rowset VIEW_COLUMN_USAGE)
VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViews 23 Devuelve las vistas definidas en el catálogo a los que puede tener acceso un usuario dado.
(Rowset VIEWS)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaViewTableUsage 25 Devuelve las tablas de las que dependen las tablas de las vistas, definidas en el catálogo y que son propiedad de un usuario dado.
(Rowset VIEW_TABLE_USAGE)
VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
Hola, agradeceria escribieras un ejemplo de como listar las columnas de una tabla en Access