Acceso a la información de las tablas de una base de datos Access

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 🙂

7 Responses

  1. ¿Porqué el Type que corresponde a las consultas tiene un número tan gordo? ¿Y el “-” de después?

  2. Ha sido un error en el coloreador de SQL. Es -32768. El ID elegido, se lo preguntas a MS 😛

  3. Tienes que tener en cuenta que no suelen funcionar todas las aplicaciones, solo en casos concretos donde los permisos lo permitan.

  4. 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.

  5. 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

  6. Hola, agradeceria escribieras un ejemplo de como listar las columnas de una tabla en Access

Leave a reply to Luis Cancel reply