CDaoDatabase (clase)

Representa una conexión a una base de datos de Access mediante objetos de acceso a datos (DAO).

Nota:

El objeto de acceso a datos (DAO) se admite a través de Office 2013. DAO 3.6 es la versión final y está obsoleta.

Sintaxis

class CDaoDatabase : public CObject

Miembros

Constructores públicos

Nombre Descripción
CDaoDatabase::CDaoDatabase Construye un objeto CDaoDatabase. Llame a Open para conectar el objeto a una base de datos.

Métodos públicos

Nombre Descripción
CDaoDatabase::CanTransact Devuelve un valor distinto de cero si la base de datos admite transacciones.
CDaoDatabase::CanUpdate Devuelve un valor distinto de cero si el objeto CDaoDatabase se puede actualizar (no es de solo lectura).
CDaoDatabase::Close Cierra la conexión de base de datos.
CDaoDatabase::Create Crea el objeto de base de datos DAO subyacente e inicializa el objeto CDaoDatabase.
CDaoDatabase::CreateRelation Define una nueva relación entre las tablas de la base de datos.
CDaoDatabase::DeleteQueryDef Elimina un objeto querydef guardado en la colección QueryDefs de la base de datos.
CDaoDatabase::DeleteRelation Elimina una relación existente entre tablas de la base de datos.
CDaoDatabase::DeleteTableDef Elimina la definición de una tabla de la base de datos. Esto elimina la tabla en sí y todos sus datos.
CDaoDatabase::Execute Ejecuta una consulta de acción. La llamada a Execute en una consulta que devuelve resultados inicia una excepción.
CDaoDatabase::GetConnect Devuelve la cadena de conexión usada para conectar el objeto CDaoDatabase a una base de datos. Se usa en ODBC.
CDaoDatabase::GetName Devuelve el nombre de la base de datos en uso actualmente.
CDaoDatabase::GetQueryDefCount Devuelve el número de consultas definidas en la base de datos.
CDaoDatabase::GetQueryDefInfo Devuelve información sobre una consulta especificada definida en la base de datos.
CDaoDatabase::GetQueryTimeout Devuelve el número de segundos después del cual se agota el tiempo de espera de las operaciones de consulta de base de datos. Afecta a todas las operaciones abiertas posteriores, agregar nuevas, actualizar y editar y otras operaciones en orígenes de datos ODBC (solo) como Execute llamadas.
CDaoDatabase::GetRecordsAffected Devuelve el número de registros afectados por la última operación de actualización, edición o incorporación o por una llamada a Execute.
CDaoDatabase::GetRelationCount Devuelve el número de relaciones definidas entre tablas de la base de datos.
CDaoDatabase::GetRelationInfo Devuelve información sobre una relación especificada definida entre tablas de la base de datos.
CDaoDatabase::GetTableDefCount Devuelve el número de tablas definidas en la base de datos.
CDaoDatabase::GetTableDefInfo Devuelve información sobre una tabla especificada de la base de datos.
CDaoDatabase::GetVersion Devuelve la versión del motor de base de datos asociado a la base de datos.
CDaoDatabase::IsOpen Devuelve un valor distinto de cero si el objeto CDaoDatabase está conectado actualmente a una base de datos.
CDaoDatabase::Open Establece una conexión con una base de datos.
CDaoDatabase::SetQueryTimeout Establece el número de segundos después de los cuales se agota el tiempo de espera de las operaciones de consulta de base de datos (solo en orígenes de datos ODBC). Afecta a todas las operaciones abiertas posteriores, agregar nuevas, actualizar y eliminar.

Miembros de datos públicos

Nombre Descripción
CDaoDatabase::m_pDAODatabase Puntero al objeto de base de datos DAO subyacente.
CDaoDatabase::m_pWorkspace Puntero al objeto CDaoWorkspace que contiene la base de datos y define su espacio de transacciones.

Comentarios

Para obtener información sobre los formatos de base de datos admitidos, vea la función miembro GetName. Puede tener uno o varios objetos CDaoDatabase activos a la vez en una determinada "área de trabajo" representada por un objeto CDaoWorkspace. El área de trabajo mantiene una colección de objetos de base de datos abiertos que se conoce como colección Databases.

Uso

Puede crear objetos de base de datos implícitamente al crear objetos de conjunto de registros. Pero también puede crear objetos de base de datos explícitamente. Para usar una base de datos existente explícitamente con CDaoDatabase, realice una de las siguientes acciones:

  • Construya un objeto CDaoDatabase y pase un puntero a un objeto CDaoWorkspace abierto.

  • O bien, construya un objeto CDaoDatabase sin especificar el área de trabajo (MFC crea un objeto de área de trabajo temporal).

Para crear una nueva base de datos de Microsoft Jet (.MDB), construya un objeto CDaoDatabase y llame a su función miembro Create. No llame a Open después de Create.

Para abrir una base de datos existente, construya un objeto CDaoDatabase y llame a su función miembro Open.

Cualquiera de estas técnicas anexa el objeto de base de datos DAO a la colección Databases del área de trabajo y abre una conexión a los datos. Cuando luego construya objetos CDaoRecordset, CDaoTableDef o CDaoQueryDef para trabajar en la base de datos conectada, pase los constructores de estos objetos a un puntero al objeto CDaoDatabase. Cuando termine de usar la conexión, llame a la función miembro Close y destruya el objeto CDaoDatabase. Close cierra los conjuntos de registros que aún no ha cerrado.

Transacciones

El procesamiento de transacciones de base de datos se proporciona en el nivel de área de trabajo; vea las funciones miembro BeginTrans, CommitTrans y Rollback de la clase CDaoWorkspace.

Conexiones ODBC

La manera recomendada de trabajar con orígenes de datos open Database Base Connectivity (ODBC) es adjuntar tablas externas a una base de datos de Microsoft Jet (.MDB).

Colecciones

Cada base de datos mantiene sus propias colecciones de objetos tabledef, querydef, recordset y de relación. La clase CDaoDatabase proporciona funciones miembro para manipular estos objetos.

Nota:

Los objetos se almacenan en DAO, no en el objeto de base de datos MFC. MFC proporciona clases para objetos tabledef, querydef y recordset, pero no para objetos de relación.

Jerarquía de herencia

CObject

CDaoDatabase

Requisitos

Encabezado: afxdao.h

CDaoDatabase::CanTransact

Llame a esta función miembro para determinar si la base de datos permite transacciones.

BOOL CanTransact();

Valor devuelto

Un valor distinto de cero si la base de datos admite transacciones; de lo contrario, 0.

Comentarios

Las transacciones se administran en el área de trabajo de la base de datos.

CDaoDatabase::CanUpdate

Llame a esta función miembro para determinar si el objeto CDaoDatabase permite actualizaciones.

BOOL CanUpdate();

Valor devuelto

Un valor distinto de cero si el objeto CDaoDatabase permite actualizaciones; de lo contrario, 0, lo que indica que se ha pasado TRUE en bReadOnly al abrir el objeto CDaoDatabase o que la propia base de datos es de solo lectura. Vea la función miembro Open.

Comentarios

Para obtener información sobre la posibilidad de actualizar una base de datos, vea el tema sobre la propiedad Updatable en la Ayuda de DAO.

CDaoDatabase::CDaoDatabase

Construye un objeto CDaoDatabase.

CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);

Parámetros

pWorkspace
Puntero al objeto CDaoWorkspace que va a contener el nuevo objeto de base de datos. Si acepta el valor predeterminado de NULL, el constructor crea un objeto temporal CDaoWorkspace que usa el área de trabajo DAO predeterminada. Puede obtener un puntero al objeto de área de trabajo por medio del miembro de datos m_pWorkspace.

Comentarios

Después de construir el objeto, si va a crear una nueva base de datos de Microsoft Jet (.MDB), llame a la función miembro Create del objeto. Si, en su lugar, abre una base de datos existente, llame a la función miembro Open del objeto.

Cuando termine con el objeto, debe llamar a su función miembro Close y luego destruir el objeto CDaoDatabase.

Es posible que le resulte cómodo insertar el objeto CDaoDatabase en la clase de documento.

Nota:

Un objeto CDaoDatabase también se crea implícitamente si se abre un objeto CDaoRecordset sin pasar un puntero a un objeto existente CDaoDatabase. Este objeto de base de datos se cierra cuando se cierra el objeto recordset.

CDaoDatabase::Close

Llame a esta función miembro para desconectar de una base de datos y cerrar los objetos recordset, tabledef y querydef asociados a la base de datos.

virtual void Close();

Comentarios

Es recomendable cerrar estos objetos usted mismo antes de llamar a esta función miembro. Al cerrar un objeto CDaoDatabase, se quita de la colección Databases del área de trabajo asociada. Dado Close que no destruye el CDaoDatabase objeto, puede reutilizar el objeto abriendo la misma base de datos o una base de datos diferente.

Precaución

Llame a la función miembro Update (si hay modificaciones pendientes) y a la función miembro Close en todos los objetos recordset abiertos antes de cerrar una base de datos. Si sale de una función que declara CDaoRecordset u objetos CDaoDatabase en la pila, se cierra la base de datos, se pierden los cambios no guardados, se revierten todas las transacciones pendientes y se pierden las modificaciones pendientes en los datos.

Precaución

Si intenta cerrar un objeto de base de datos mientras hay objetos recordset abiertos, o si intenta cerrar un objeto de área de trabajo mientras hay objetos de base de datos que pertenecen a esa área de trabajo específica abiertos, esos objetos recordset se cierran y se revierten las actualizaciones o modificaciones pendientes. Si intenta cerrar un objeto de área de trabajo mientras hay objetos de base de datos que pertenecen a él abiertos, la operación cierra todos los objetos de base de datos que pertenecen a ese objeto de área de trabajo específico, lo que puede dar lugar a que se cierren los objetos recordset no cerrados. Si no cierra el objeto de base de datos, MFC notifica un error de aserción en las compilaciones de depuración.

Si el objeto de base de datos se define fuera del ámbito de una función y sale de la función sin cerrarla, el objeto de base de datos permanecerá abierto hasta que se cierre explícitamente o el módulo en el que esté definido está fuera del ámbito.

CDaoDatabase::Create

Para crear una nueva base de datos de Microsoft Jet (.MDB), llame a esta función miembro después de construir un objeto CDaoDatabase.

virtual void Create(
    LPCTSTR lpszName,
    LPCTSTR lpszLocale = dbLangGeneral,
    int dwOptions = 0);

Parámetros

lpszName
Expresión de cadena que es el nombre del archivo de base de datos que se está creando. Puede ser una ruta de acceso completa y el nombre de archivo, como "C:\\MYDB. MDB". Debe proporcionar un nombre. Si no proporciona una extensión de nombre de archivo, . MDB se anexa. Si la red admite la convención de nomenclatura uniforme (UNC), también puede especificar una ruta de acceso de red, como "\\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB". Con esta función miembro solo se pueden crear archivos de base de datos de Microsoft Jet (.MDB). (Se requieren barras diagonales inversas dobles en los literales de cadena porque "\" es el carácter de escape de C++).

lpszLocale
Expresión de cadena usada para especificar el orden de intercalación para crear la base de datos. El valor predeterminado es dbLangGeneral. Los valores posibles son:

  • dbLangGeneral Inglés, alemán, francés, portugués, italiano y español moderno

  • dbLangArabic Árabe

  • dbLangCyrillic Ruso

  • dbLangCzech Checo

  • dbLangDutch Neerlandés

  • dbLangGreek Griego

  • dbLangHebrew Hebreo

  • dbLangHungarian Húngaro

  • dbLangIcelandic Islandés

  • dbLangNordic Idiomas nórdicos (solo versión 1.0 del motor de base de datos de Microsoft Jet)

  • dbLangNorwdan Noruego y danés

  • dbLangPolish Polaco

  • dbLangSpanish Español tradicional

  • dbLangSwedfin Sueco y finlandés

  • dbLangTurkishTurco

dwOptions
Entero que indica una o varias opciones. Los valores posibles son:

  • dbEncrypt Crea una base de datos cifrada.

  • dbVersion10 Crea una base de datos con la versión 1.0 de la base de datos de Microsoft Jet.

  • dbVersion11 Crea una base de datos con la versión 1.1 de la base de datos de Microsoft Jet.

  • dbVersion20 Crea una base de datos con la versión 2.0 de la base de datos de Microsoft Jet.

  • dbVersion30 Crea una base de datos con la versión 3.0 de la base de datos de Microsoft Jet.

Si se omite la constante de cifrado, se crea una base de datos sin cifrar. Solo se puede especificar una constante de versión. Si se omite una constante de versión, se crea una base de datos que usa la versión 3.0 de la base de datos de Microsoft Jet.

Precaución

Si una base de datos no está cifrada, es posible, incluso si implementa la seguridad de usuario o contraseña, para leer directamente el archivo de disco binario que constituye la base de datos.

Comentarios

Create crea el archivo de base de datos y el objeto de base de datos DAO subyacente e inicializa el objeto de C++. El objeto se anexa a la colección Databases del área de trabajo asociada. El objeto de base de datos está en un estado abierto; no llame a Open* después Createde .

Nota:

Con Create, solo se pueden crear bases de datos de Microsoft Jet (.MDB). No se pueden crear bases de datos ISAM ni ODBC.

CDaoDatabase::CreateRelation

Llame a esta función miembro para establecer una relación entre uno o varios campos de una tabla principal de la base de datos y uno o varios campos de una tabla externa (otra tabla de la base de datos).

void CreateRelation(
    LPCTSTR lpszName,
    LPCTSTR lpszTable,
    LPCTSTR lpszForeignTable,
    long lAttributes,
    LPCTSTR lpszField,
    LPCTSTR lpszForeignField);

void CreateRelation(CDaoRelationInfo& relinfo);

Parámetros

lpszName
Nombre único del objeto de relación. El nombre debe comenzar con una letra y puede contener un máximo de 40 caracteres. Puede incluir números y caracteres de subrayado, pero no signos de puntuación ni espacios.

lpszTable
Nombre de la tabla principal de la relación. Si la tabla no existe, MFC produce una excepción de tipo CDaoException.

lpszForeignTable
Nombre de la tabla externa de la relación. Si la tabla no existe, MFC produce una excepción de tipo CDaoException.

lAttributes
Valor long que contiene información sobre el tipo de relación. Puede usar este valor para aplicar integridad referencial, entre otras cosas. Puede usar el operador OR bit a bit (|) para combinar cualquiera de los valores siguientes (siempre que la combinación tenga sentido):

  • dbRelationUnique La relación es de uno a uno.

  • dbRelationDontEnforce La relación no se aplica (sin integridad referencial).

  • dbRelationInherited La relación existe en una base de datos no actual que contiene las dos tablas adjuntas.

  • dbRelationUpdateCascade Las actualizaciones se aplican en cascada (para obtener más información sobre las actualizaciones en cascada, vea Comentarios).

  • dbRelationDeleteCascade Eliminaciones en cascada.

lpszField
Puntero a una cadena terminada en null que contiene el nombre de un campo de la tabla principal (cuyo nombre ha asignado lpszTable).

lpszForeignField
Puntero a una cadena terminada en null que contiene el nombre de un campo de la tabla externa (cuyo nombre ha asignado lpszForeignTable).

relinfo
Referencia a un objeto CDaoRelationInfo que contiene información sobre la relación que quiere crear.

Comentarios

La relación no puede implicar una consulta ni una tabla adjunta de una base de datos externa.

Use la primera versión de la función cuando la relación implique un campo de cada una de las dos tablas. Use la segunda versión cuando la relación implique varios campos. El número máximo de campos de una relación es 14.

Esta acción crea un objeto de relación DAO subyacente, pero se trata de un detalle de implementación de MFC, ya que la encapsulación de objetos de relación de MFC está incluida en la clase CDaoDatabase. MFC no proporciona una clase para las relaciones.

Si establece los atributos del objeto de relación para activar las operaciones en cascada, el motor de base de datos actualiza o elimina automáticamente los registros de una o más tablas cuando se realizan cambios en las tablas de clave principal relacionadas.

Por ejemplo, imagine que establece una relación de eliminación en cascada entre una tabla Customers y una tabla Orders. Al eliminar registros de la tabla Customers, también se eliminan registros de la tabla Orders relacionados con ese cliente. Además, si establece relaciones de eliminación en cascada entre la tabla Orders y otras tablas, los registros de esas tablas se eliminan automáticamente al eliminar registros de la tabla Customers.

Para obtener información relacionada, vea el tema sobre el método Close en la Ayuda de DAO.

CDaoDatabase::DeleteQueryDef

Llame a esta función miembro para eliminar la consulta especificada(consulta guardada) de la CDaoDatabase colección QueryDefs del objeto.

void DeleteQueryDef(LPCTSTR lpszName);

Parámetros

lpszName
Nombre de la consulta guardada que se va a eliminar.

Comentarios

Después, esa consulta ya no está definida en la base de datos.

Para obtener información sobre cómo crear objetos querydef, vea la clase CDaoQueryDef. Un objeto querydef se asocia a un objeto CDaoDatabase determinado cuando se construye el objeto CDaoQueryDef y se le pasa un puntero al objeto de base de datos.

CDaoDatabase::DeleteRelation

Llame a esta función miembro para eliminar una relación existente de la colección Relations del objeto de base de datos.

void DeleteRelation(LPCTSTR lpszName);

Parámetros

lpszName
Nombre de la relación que se va a eliminar.

Comentarios

Después, la relación ya no existe.

Para obtener información relacionada, vea el tema sobre el método Delete en la Ayuda de DAO.

CDaoDatabase::DeleteTableDef

Llame a esta función miembro para eliminar la tabla especificada y todos sus datos de la colección TableDefs del objeto CDaoDatabase.

void DeleteTableDef(LPCTSTR lpszName);

Parámetros

lpszName
Nombre del objeto tabledef que se va a eliminar.

Comentarios

Después, esa tabla ya no está definida en la base de datos.

Nota:

Tenga mucho cuidado de no eliminar tablas del sistema.

Para obtener información sobre cómo crear objetos tabledef, vea la clase CDaoTableDef. Un objeto tabledef se asocia a un objeto CDaoDatabase determinado cuando se construye el objeto CDaoTableDef y se le pasa un puntero al objeto de base de datos.

Para obtener información relacionada, vea el tema sobre el método Delete en la Ayuda de DAO.

CDaoDatabase::Execute

Llame a esta función miembro para ejecutar una consulta de acción o una instrucción SQL en la base de datos.

void Execute(
    LPCTSTR lpszSQL,
    int nOptions = dbFailOnError);

Parámetros

lpszSQL
Puntero a una cadena terminada en null que contiene un comando SQL válido que se va a ejecutar.

nOptions
Entero que especifica opciones relacionadas con la integridad de la consulta. Puede usar el operador OR bit a bit (|) para combinar cualquiera de las siguientes constantes siempre que tenga sentido la combinación. Por ejemplo, no se combinaría dbInconsistent con dbConsistent:

  • dbDenyWrite Denegar el permiso de escritura a otros usuarios.

  • dbInconsistent (Valor predeterminado) Actualizaciones incoherentes.

  • dbConsistent Actualizaciones coherentes.

  • dbSQLPassThrough Paso a través de SQL. Hace que la instrucción SQL se pase a un origen de datos ODBC para su procesamiento.

  • dbFailOnError Revierte las actualizaciones si se produce un error.

  • dbSeeChanges Genere un error en tiempo de ejecución si otro usuario está cambiando los datos que está editando.

Nota:

Si se incluyen dbInconsistent y dbConsistent o no se incluye ninguno, el resultado es el valor predeterminado. Para obtener una explicación de estas constantes, vea el tema sobre el método Execute en la Ayuda de DAO.

Comentarios

Execute funciona solo para consultas de acción o consultas de paso a través de SQL que no devuelven resultados. No funciona para las consultas select, que devuelven registros.

Para obtener una definición e información sobre las consultas de acción, vea los temas sobre la consulta de acción y el método Execute en la Ayuda de DAO.

Sugerencia

Dada una instrucción SQL correcta sintácticamente y los permisos adecuados, la Execute función miembro no producirá un error aunque no se pueda modificar ni eliminar una sola fila. Por lo tanto, use siempre la opción dbFailOnError con la función miembro Execute para ejecutar una consulta de actualización o eliminación. Esta opción hace que MFC inicie una excepción de tipo CDaoException y revierta todos los cambios correctos si alguno de los registros afectados está bloqueado y no se puede actualizar ni eliminar. Tenga en cuenta que siempre puede llamar a GetRecordsAffected para ver cuántos registros se han visto afectados.

Llame a la función miembro GetRecordsAffected del objeto de base de datos para determinar el número de registros afectados por la llamada más reciente Execute. Por ejemplo, GetRecordsAffected devuelve información sobre el número de registros eliminados, actualizados o insertados al ejecutar una consulta de acción. El recuento devuelto no refleja los cambios en las tablas relacionadas cuando las actualizaciones o eliminaciones en cascada están en vigor.

Execute no devuelve un conjunto de registros. El uso de Execute en una consulta que selecciona registros hace que MFC inicie una excepción de tipo CDaoException. (No hay ninguna función miembro ExecuteSQL análoga a CDatabase::ExecuteSQL).

CDaoDatabase::GetConnect

Llame a esta función miembro para recuperar la cadena de conexión empleada para conectar el objeto CDaoDatabase a una base de datos ODBC o ISAM.

CString GetConnect();

Valor devuelto

La cadena de conexión si se ha llamado a Open correctamente en un origen de datos ODBC; de lo contrario, una cadena vacía. En una base de datos de Microsoft Jet (.MDB), la cadena siempre está vacía a menos que se establezca para su uso con la opción dbSQLPassThrough empleada con la función miembro Execute o para abrir un conjunto de registros.

Comentarios

La cadena proporciona información sobre el origen de una base de datos abierta o una base de datos usada en una consulta de tránsito. La cadena de conexión se compone de un especificador de tipo de base de datos y cero o más parámetros separados por puntos y coma.

Nota:

El uso de las clases DAO de MFC para conectarse a un origen de datos por medio de ODBC es menos eficaz que conectarse mediante una tabla adjunta.

Nota:

La cadena de conexión se usa para pasar información adicional a ODBC y determinados controladores ISAM según sea necesario. No se usa para . Bases de datos MDB. En el caso de las tablas base de bases de datos de Microsoft Jet, la cadena de conexión es una cadena vacía (""), excepto cuando se usa en una consulta de tránsito SQL, como se describe arriba en Valor devuelto.

Vea la función miembro Open para obtener una explicación de cómo se crea la cadena de conexión. Una vez establecida la cadena de conexión en la llamada Open, puede usarla más adelante para comprobar el valor a fin de determinar el tipo, la ruta de acceso, el identificador de usuario, la contraseña o el origen de datos ODBC de la base de datos.

CDaoDatabase::GetName

Llame a esta función miembro para recuperar el nombre de la base de datos abierta actualmente, que es el nombre de un archivo de base de datos existente o el nombre de un origen de datos ODBC registrado.

CString GetName();

Valor devuelto

Ruta de acceso completa y nombre de archivo de la base de datos, si se ha ejecutado correctamente; de lo contrario, valor CString vacío.

Comentarios

Si la red admite la convención de nomenclatura uniforme (UNC), también puede especificar una ruta de acceso de red, por ejemplo, "\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB.MDB". (Se requieren barras diagonales inversas dobles en los literales de cadena porque "\" es el carácter de escape de C++).

Por ejemplo, podría mostrar este nombre en un encabezado. Si se produce un error mientras se recupera el nombre, MFC inicia una excepción de tipo CDaoException.

Nota:

Para un mejor rendimiento al acceder a bases de datos externas, se recomienda adjuntar tablas de bases de datos externas a una base de datos de Microsoft Jet (.MDB) en lugar de conectarse directamente al origen de datos.

El tipo de base de datos se indica mediante el archivo o directorio al que apunta la ruta de acceso, como sigue:

Nombre de ruta de acceso apunta a... Tipo de base de datos
Archivo .MDB Base de datos de Microsoft Jet (Microsoft Access)
Directorio que contiene archivos .DBF Base de datos dBASE
Directorio que contiene archivo .XLS Base de datos de Microsoft Excel
Directorio que contiene archivos .PDX Base de datos de Paradox
Directorio que contiene archivos de base de datos de texto con formato correcto Base de datos de formato de texto

En bases de datos ODBC, como SQL Server y Oracle, la cadena de conexión de la base de datos identifica un nombre de origen de datos (DSN) registrado por ODBC.

CDaoDatabase::GetQueryDefCount

Llame a esta función miembro para recuperar el número de consultas definidas en la colección QueryDefs de la base de datos.

short GetQueryDefCount();

Valor devuelto

Número de consultas definidas en la base de datos.

Comentarios

GetQueryDefCount es útil si necesita recorrer en bucle todos los objetos querydef de la colección QueryDefs. Para obtener información sobre una consulta determinada de la colección, vea GetQueryDefInfo.

CDaoDatabase::GetQueryDefInfo

Llame a esta función miembro para obtener varios tipos de información sobre una consulta definida en la base de datos.

void GetQueryDefInfo(
    int nIndex,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetQueryDefInfo(
    LPCTSTR lpszName,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parámetros

nIndex
Índice de la consulta predefinida en la colección QueryDefs de la base de datos para la búsqueda por índice.

querydefinfo
Referencia a un objeto CDaoQueryDefInfo que devuelve la información solicitada.

dwInfoOptions
Opciones que especifican qué información sobre el conjunto de registros se va a recuperar. Las opciones disponibles se enumeran aquí junto con lo que hacen que devuelva la función sobre el conjunto de registros:

  • AFX_DAO_PRIMARY_INFO (Valor predeterminado) Nombre, Tipo

  • AFX_DAO_SECONDARY_INFO Información principal más: Fecha de creación, Fecha de última actualización, Registros devueltos, Actualizable

  • AFX_DAO_ALL_INFO información principal y secundaria más: SQL, Connect, ODBCTimeout

lpszName
Cadena que contiene el nombre de una consulta definida en la base de datos para la búsqueda por nombre.

Comentarios

Se proporcionan dos versiones de la función para que pueda seleccionar una consulta por índice en la colección QueryDefs de la base de datos o por el nombre de la consulta.

Para obtener una descripción de la información devuelta en querydefinfo, vea la estructura CDaoQueryDefInfo. Esta estructura tiene miembros que corresponden a los elementos de información enumerados anteriormente en la descripción de dwInfoOptions. Si solicita un nivel de información, también obtendrá los niveles anteriores de información.

CDaoDatabase::GetQueryTimeout

Llame a esta función miembro para recuperar el número actual de segundos que se permiten antes de que se agote el tiempo de espera de las operaciones posteriores en la base de datos conectada.

short GetQueryTimeout();

Valor devuelto

Entero corto que contiene el valor de tiempo de espera en segundos.

Comentarios

Una operación puede agotar el tiempo de espera debido a problemas de acceso a la red, un tiempo excesivo de procesamiento de las consultas, etc. Mientras el valor está en vigor, afecta a todas las operaciones abiertas, de incorporación, de actualización y de eliminación en todos los conjuntos de registros asociados a este objeto CDaoDatabase. Puede cambiar el valor de tiempo de espera actual si llama a SetQueryTimeout. Cambiar el valor de tiempo de espera de consulta de un conjunto de registros después de abrir no cambia el valor del conjunto de registros. Por ejemplo, las operaciones move posteriores no usan el nuevo valor. El valor predeterminado se establece al principio cuando se inicializa el motor de base de datos.

El valor predeterminado de los tiempos de espera de consulta se toma del Registro de Windows. Si no hay ningún valor del Registro, el valor predeterminado es de 60 segundos. No todas las bases de datos admiten la posibilidad de establecer un valor de tiempo de espera de consulta. Si establece un valor de tiempo de espera de consulta de 0, no se produce ningún tiempo de espera; además, la comunicación con la base de datos puede dejar de responder. Este comportamiento puede ser útil durante el desarrollo. Si se produce un error en la llamada, MFC inicia una excepción de tipo CDaoException.

Para obtener información relacionada, vea el tema sobre la propiedad QueryTimeout en la Ayuda de DAO.

CDaoDatabase::GetRecordsAffected

Llame a esta función miembro para determinar el número de registros afectados por la llamada más reciente de la función miembro Execute.

long GetRecordsAffected();

Valor devuelto

Entero largo que contiene el número de registros afectados.

Comentarios

El valor devuelto incluye el número de registros eliminados, actualizados o insertados por una consulta de acción ejecutada con Execute. El recuento devuelto no refleja los cambios en las tablas relacionadas cuando las actualizaciones o eliminaciones en cascada están en vigor.

Para obtener información relacionada, vea el tema sobre la propiedad RecordsAffected en la Ayuda de DAO.

CDaoDatabase::GetRelationCount

Llame a esta función miembro para obtener el número de relaciones definidas entre tablas de la base de datos.

short GetRelationCount();

Valor devuelto

Número de relaciones definidas entre tablas de la base de datos.

Comentarios

GetRelationCount es útil si necesita recorrer en bucle todas las relaciones definidas en la colección Relations de la base de datos. Para obtener información sobre una relación determinada de la colección, vea GetRelationInfo.

Para ilustrar el concepto de una relación, imagine una tabla Suppliers y una tabla Products que podrían tener una relación uno a varios. En esta relación, un proveedor puede suministrar más de un producto. Otras relaciones son uno a uno y varios a varios.

CDaoDatabase::GetRelationInfo

Llame a esta función miembro para obtener información sobre una relación especificada en la colección Relations de la base de datos.

void GetRelationInfo(
    int nIndex,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetRelationInfo(
    LPCTSTR lpszName,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parámetros

nIndex
Índice del objeto de relación de la colección Relations de la base de datos para la búsqueda por índice.

relinfo
Referencia a un objeto CDaoRelationInfo que devuelve la información solicitada.

dwInfoOptions
Opciones que especifican qué información sobre la relación se va a recuperar. Las opciones disponibles se enumeran aquí junto con lo que hacen que devuelva la función sobre la relación:

  • AFX_DAO_PRIMARY_INFO (Valor predeterminado) Nombre, Tabla, Tabla externa

  • AFX_DAO_SECONDARY_INFO Attributes, Field Information

Field Information es un objeto CDaoRelationFieldInfo que contiene los campos de la tabla principal implicada en la relación.

lpszName
Cadena que contiene el nombre del objeto de relación para la búsqueda por nombre.

Comentarios

Dos versiones de esta función proporcionan acceso por índice o por nombre. Para obtener una descripción de la información devuelta en relinfo, vea la estructuraCDaoRelationInfo. Esta estructura tiene miembros que corresponden a los elementos de información enumerados anteriormente en la descripción de dwInfoOptions. Si solicita información en un nivel, también obtiene información de los niveles anteriores.

Nota:

Si establece los atributos del objeto de relación para activar las operaciones en cascada (dbRelationUpdateCascades o dbRelationDeleteCascades), el motor de base de datos de Microsoft Jet actualiza o elimina automáticamente los registros de una o más tablas cuando se realizan cambios en las tablas de clave principal relacionadas. Por ejemplo, imagine que establece una relación de eliminación en cascada entre una tabla Customers y una tabla Orders. Al eliminar registros de la tabla Customers, también se eliminan registros de la tabla Orders relacionados con ese cliente. Además, si establece relaciones de eliminación en cascada entre la tabla Orders y otras tablas, los registros de esas tablas se eliminan automáticamente al eliminar registros de la tabla Customers.

CDaoDatabase::GetTableDefCount

Llame a esta función miembro para recuperar el número de tablas definidas en la base de datos.

short GetTableDefCount();

Valor devuelto

Número de objetos tabledef definidos en la base de datos.

Comentarios

GetTableDefCount es útil si necesita recorrer en bucle todos los objetos tabledef de la colección TableDefs de la base de datos. Para obtener información sobre una tabla determinada de la colección, vea GetTableDefInfo.

CDaoDatabase::GetTableDefInfo

Llame a esta función miembro para obtener varios tipos de información sobre una tabla definida en la base de datos.

void GetTableDefInfo(
    int nIndex,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetTableDefInfo(
    LPCTSTR lpszName,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parámetros

nIndex
Índice del objeto tabledef de la colección TableDefs de la base de datos para la búsqueda por índice.

tabledefinfo
Referencia a un objeto CDaoTableDefInfo que devuelve la información solicitada.

dwInfoOptions
Opciones que especifican qué información sobre la tabla se va a recuperar. Las opciones disponibles se enumeran aquí junto con lo que hacen que devuelva la función sobre la relación:

  • AFX_DAO_PRIMARY_INFO (Valor predeterminado), Nombre, Actualizable, Atributos

  • AFX_DAO_SECONDARY_INFO Información principal más: Fecha de creación, Fecha de última actualización, Nombre de tabla de origen, Connect

  • AFX_DAO_ALL_INFO Información principal y secundaria más: Regla de validación, Texto de validación, Recuento de registros

lpszName
Nombre del objeto tabledef para la búsqueda por nombre.

Comentarios

Se proporcionan dos versiones de la función para que pueda seleccionar una tabla por índice en la colección TableDefs de la base de datos o por el nombre de la tabla.

Para obtener una descripción de la información devuelta en tabledefinfo, vea la estructura CDaoTableDefInfo. Esta estructura tiene miembros que corresponden a los elementos de información enumerados anteriormente en la descripción de dwInfoOptions. Si solicita información en un nivel, también obtiene información de los niveles anteriores.

Nota:

La opción AFX_DAO_ALL_INFO proporciona información que puede ser lenta de obtener. En este caso, el recuento de los registros de la tabla puede llevar mucho tiempo si hay muchos.

CDaoDatabase::GetVersion

Llame a esta función miembro para determinar la versión del archivo de base de datos de Microsoft Jet.

CString GetVersion();

Valor devuelto

CString que indica la versión del archivo de base de datos asociado al objeto.

Comentarios

El valor devuelto representa el número de versión con el formato "major.minor"; por ejemplo, "3.0". El número de versión del producto (por ejemplo, 3.0) consta del número de versión (3), un punto y el número de versión (0). Las versiones hasta la fecha son 1.0, 1.1, 2.0 y 3.0.

Para obtener más información, consulte el tema "UserName Property" (Propiedad de UserName) en la Ayuda de DAO.

CDaoDatabase::IsOpen

Llame a esta función miembro para determinar si el objeto CDaoDatabase está abierto actualmente en una base de datos.

BOOL IsOpen() const;

Valor devuelto

Distinto de cero si el CDaoDatabase objeto está abierto actualmente; de lo contrario, es 0.

Comentarios

CDaoDatabase::m_pDAODatabase

Contiene un puntero a la interfaz OLE del objeto de base de datos DAO subyacente al objeto CDaoDatabase.

Comentarios

Use este puntero si necesita acceder directamente a la interfaz DAO.

Para obtener información sobre cómo llamar directamente a DAO, vea la Nota técnica 54.

CDaoDatabase::m_pWorkspace

Contiene un puntero al objeto CDaoWorkspace que contiene el objeto de base de datos.

Comentarios

Use este puntero si necesita acceder directamente al área de trabajo. Por ejemplo, para obtener punteros a otros objetos de base de datos de la colección Databases del área de trabajo.

CDaoDatabase::Open

Debe llamar a esta función miembro para inicializar un objeto CDaoDatabase recién construido que represente una base de datos existente.

virtual void Open(
    LPCTSTR lpszName,
    BOOL bExclusive = FALSE,
    BOOL bReadOnly = FALSE,
    LPCTSTR lpszConnect = _T(""));

Parámetros

lpszName
Expresión de cadena que es el nombre de un archivo de base de datos de Microsoft Jet existente (.MDB). Si el nombre de archivo tiene una extensión, es necesario. Si la red admite la convención de nomenclatura uniforme (UNC), también puede especificar una ruta de acceso de red, como "\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB.MDB". (Se requieren barras diagonales inversas dobles en los literales de cadena porque "\" es el carácter de escape de C++).

Se aplican algunas consideraciones al usar lpszName. Si:

  • Hace referencia a una base de datos que ya está abierta para el acceso exclusivo por parte de otro usuario, MFC inicia una excepción de tipo CDaoException. Intercepte esa excepción para comunicar al usuario que la base de datos no está disponible.

  • Es una cadena vacía ("") y lpszConnect es "ODBC;", se muestra un cuadro de diálogo que enumera todos los nombres de orígenes de datos ODBC registrados para que el usuario pueda seleccionar una base de datos. Debe evitar conexiones directas a orígenes de datos ODBC; en su lugar, use una tabla adjunta.

  • De lo contrario, no hace referencia a una base de datos existente o a un nombre de origen de datos ODBC válido, MFC produce una excepción de tipo CDaoException.

Nota:

Para obtener detalles sobre los códigos de error de DAO, vea el archivo DAOERR.H. Para obtener información relacionada, vea el tema sobre errores de acceso a datos interceptables de la Ayuda de DAO.

bExclusive
Valor booleano que es TRUE si se va a abrir la base de datos para acceso exclusivo (no compartido) y FALSE si se va a abrir la base de datos para acceso compartido. Si omite este argumento, la base de datos se abre para acceso compartido.

bReadOnly
Valor booleano que es TRUE si se va a abrir la base de datos para acceso de solo lectura y FALSE si se va a abrir para acceso de lectura y escritura. Si omite este argumento, la base de datos se abre para acceso de lectura y escritura. Todos los conjuntos de registros dependientes heredan este atributo.

lpszConnect
Expresión de cadena usada para abrir la base de datos. Esta cadena constituye los argumentos de conexión de ODBC. Debe proporcionar los argumentos exclusivos y de solo lectura para ofrecer una cadena de origen. Si la base de datos es una base de datos de Microsoft Jet (.MDB), esta cadena está vacía (""). La sintaxis del valor predeterminado ( _T("") proporciona portabilidad para Unicode, así como compilaciones ANSI de la aplicación.

Comentarios

Open asocia la base de datos con el objeto DAO subyacente. No se puede usar el objeto de base de datos para construir objetos recordset, tabledef o querydef hasta que se inicialice. Open anexa el objeto de base de datos a la colección Databases del área de trabajo asociada.

Use los parámetros como se indica a continuación:

  • Si va a abrir una base de datos de Microsoft Jet (.MDB), use el parámetro lpszName y pase una cadena vacía para el parámetro lpszConnect, o pase una cadena de contraseña con el formato ";PWD=password" si la base de datos está protegida con contraseña (solo bases de datos .MDB).

  • Si va a abrir un origen de datos ODBC, pase una cadena de conexión ODBC válida en lpszConnect y una cadena vacía en lpszName.

Para obtener información relacionada, vea el tema sobre el método OpenDatabase en la Ayuda de DAO.

Nota:

Para mejorar el rendimiento al acceder a bases de datos externas, incluidas las bases de datos ISAM y los orígenes de datos ODBC, se recomienda adjuntar tablas de bases de datos externas a una base de datos del motor de Microsoft Jet (. MDB) en lugar de conectarse directamente al origen de datos.

Es posible que una conexión intente agotar el tiempo de espera si, por ejemplo, el host de DBMS no está disponible. Si se produce un error en el intento de conexión, Open inicia una excepción de tipo CDaoException.

Los comentarios restantes solo se aplican a bases de datos ODBC:

Si la base de datos es una base de datos ODBC y los parámetros de Open la llamada no contienen suficiente información para establecer la conexión, el controlador ODBC abre un cuadro de diálogo para obtener la información necesaria del usuario. Cuando se llama a Open, la cadena de conexión, lpszConnect, se almacena de forma privada y está disponible mediante una llamada a la función miembro GetConnect.

Si quiere, puede abrir su propio cuadro de diálogo antes de llamar a Open para obtener información del usuario, como una contraseña, y luego agregar esa información a la cadena de conexión que se pasa a Open. O puede que quiera guardar la cadena de conexión que se pasa (quizás en el Registro de Windows) para poder reutilizarla la próxima vez que la aplicación llame a Open en un objeto CDaoDatabase.

También puede usar la cadena de conexión en varios niveles de autorización de inicio de sesión (cada uno para un objeto diferente CDaoDatabase) o para transmitir otra información específica de la base de datos.

CDaoDatabase::SetQueryTimeout

Llame a esta función miembro para invalidar el número predeterminado de segundos que se permiten antes de que se agote el tiempo de espera de las operaciones posteriores en la base de datos conectada.

void SetQueryTimeout(short nSeconds);

Parámetros

nSeconds
Número de segundos que se permiten antes de que se agote el tiempo de espera de un intento de consulta.

Comentarios

Una operación puede agotar el tiempo de espera debido a problemas de acceso a la red, un tiempo excesivo de procesamiento de las consultas, etc. Llame a SetQueryTimeout antes de abrir el conjunto de registros o antes de llamar a las funciones miembro AddNew, Update o Delete del conjunto de registros si quiere cambiar el valor de tiempo de espera de consulta. La configuración afecta a todas las llamadas Abiertas, AddNew, Update y Delete a cualquier conjunto de registros asociado a este objeto CDaoDatabase. Cambiar el valor de tiempo de espera de consulta de un conjunto de registros después de abrir no cambia el valor del conjunto de registros. Por ejemplo, las operaciones move posteriores no usan el nuevo valor.

El valor predeterminado de tiempo de espera para consultas es de 60 segundos. No todas las bases de datos admiten la posibilidad de establecer un valor de tiempo de espera de consulta. Si establece un valor de tiempo de espera de consulta de 0, no se produce ningún tiempo de espera; la comunicación con la base de datos puede dejar de responder. Este comportamiento puede ser útil durante el desarrollo.

Para obtener información relacionada, vea el tema sobre la propiedad QueryTimeout en la Ayuda de DAO.

Consulte también

CObject (clase)
Gráfico de jerarquías
CDaoWorkspace (clase)
CDaoRecordset (clase)
CDaoTableDef (clase)
CDaoQueryDef (clase)
CDatabase (clase)
CDaoException (clase)