CDaoRecordset (clase)

Representa un conjunto de registros seleccionados de un origen de datos.

Sintaxis

class CDaoRecordset : public CObject

Miembros

Constructores públicos

Nombre Descripción
CDaoRecordset::CDaoRecordset Construye un objeto CDaoRecordset.

Métodos públicos

Nombre Descripción
CDaoRecordset::AddNew Prepara la adición de un nuevo registro. Llame a Update para completar la adición.
CDaoRecordset::CanAppend Devuelve un valor distinto de cero si se pueden agregar nuevos registros al conjunto de registros a través de la función miembro AddNew.
CDaoRecordset::CanBookmark Devuelve un valor distinto de cero si el conjunto de registros admite marcadores.
CDaoRecordset::CancelUpdate Cancela las actualizaciones pendientes debido a una operación Edit o AddNew .
CDaoRecordset::CanRestart Devuelve un valor distinto de cero si se puede llamar a Requery para volver a ejecutar la consulta del conjunto de registros.
CDaoRecordset::CanScroll Devuelve un valor distinto de cero si puede desplazarse por los registros.
CDaoRecordset::CanTransact Devuelve un valor distinto de cero si el origen de datos admite transacciones.
CDaoRecordset::CanUpdate Devuelve un valor distinto de cero si se puede actualizar el conjunto de registros (se pueden agregar, actualizar o eliminar registros).
CDaoRecordset::Close Cierra el conjunto de registros.
CDaoRecordset::Delete Elimina el registro actual del conjunto de registros. Debe desplazarse explícitamente a otro registro tras la eliminación.
CDaoRecordset::DoFieldExchange Se llama a este método para intercambiar datos (en ambas direcciones) entre los miembros de datos de campo del conjunto de registros y el registro correspondiente en el origen de datos. Implementa el intercambio de campos de registro (DFX).
CDaoRecordset::Edit Prepara la implementación de cambios en el registro actual. Llame a Update para completar los cambios.
CDaoRecordset::FillCache Rellena todo o una parte de una caché local para un objeto de conjunto de registros que contiene datos de un origen de datos ODBC.
CDaoRecordset::Find Busca la primera, siguiente, anterior o última ubicación de una cadena determinada en un conjunto de registros de tipo dynaset que satisface los criterios especificados y hace que registre el registro actual.
CDaoRecordset::FindFirst Busca el primer registro en un conjunto de registros de tipo dynaset o de tipo instantánea que satisface los criterios especificados y hace que el registro sea el registro actual.
CDaoRecordset::FindLast Busca el último registro en un conjunto de registros de tipo dynaset o de tipo instantánea que satisface los criterios especificados y hace que registre el registro actual.
CDaoRecordset::FindNext Busca el siguiente registro en un conjunto de registros de tipo dynaset o de tipo instantánea que satisface los criterios especificados y hace que registre el registro actual.
CDaoRecordset::FindPrev Busca el registro previo en un conjunto de registros de tipo dynaset o de tipo instantánea que satisface los criterios especificados y hace que registre el registro actual.
CDaoRecordset::GetAbsolutePosition Devuelve el número de registro del registro actual de un objeto recordset.
CDaoRecordset::GetBookmark Devuelve un valor que representa el marcador en un registro.
CDaoRecordset::GetCacheSize Devuelve un valor que especifica el número de registros de un conjunto de registros de tipo dynaset que contiene datos que se almacenarán localmente en caché desde un origen de datos ODBC.
CDaoRecordset::GetCacheStart Devuelve un valor que especifica el marcador del primer registro del conjunto de registros que se va a almacenar en caché.
CDaoRecordset::GetCurrentIndex Devuelve un CString que contiene el nombre del índice usado más recientemente en un tipo de tabla CDaoRecordset indizado.
CDaoRecordset::GetDateCreated Devuelve la fecha y hora en que se creó la tabla base subyacente a un objeto CDaoRecordset.
CDaoRecordset::GetDateLastUpdated Devuelve la fecha y hora del cambio más reciente realizado en el diseño de una tabla base subyacente a un objeto CDaoRecordset.
CDaoRecordset::GetDefaultDBName Devuelve el nombre del origen de datos predeterminado.
CDaoRecordset::GetDefaultSQL Se llama a este método para obtener la cadena SQL predeterminada que se va a ejecutar.
CDaoRecordset::GetEditMode Devuelve un valor que indica el estado de edición del registro actual.
CDaoRecordset::GetFieldCount Devuelve un valor que representa el número de campos de un conjunto de registros.
CDaoRecordset::GetFieldInfo Devuelve tipos específicos de información sobre los campos del conjunto de registros.
CDaoRecordset::GetFieldValue Devuelve el valor de un campo de un conjunto de registros.
CDaoRecordset::GetIndexCount Recupera el número de índices de una tabla subyacente a un conjunto de registros.
CDaoRecordset::GetIndexInfo Devuelve varios tipos de información sobre un índice.
CDaoRecordset::GetLastModifiedBookmark Se usa para determinar el registro agregado o actualizado más recientemente.
CDaoRecordset::GetLockingMode Devuelve un valor que indica el tipo de bloqueo que está en vigor durante la edición.
CDaoRecordset::GetName Devuelve un CString que contiene el nombre del conjunto de registros.
CDaoRecordset::GetParamValue Recupera el valor actual del parámetro especificado almacenado en el objeto DAOParameter subyacente.
CDaoRecordset::GetPercentPosition Devuelve la posición del registro actual como porcentaje del número total de registros.
CDaoRecordset::GetRecordCount Devuelve el número de registros a los que se accede en un objeto recordset.
CDaoRecordset::GetSQL Obtiene la cadena SQL que se usa para seleccionar registros del conjunto de registros.
CDaoRecordset::GetType Se llama para determinar el tipo de un conjunto de registros: tipo de tabla, tipo dynaset o tipo de instantánea.
CDaoRecordset::GetValidationRule Devuelve un CString que contiene el valor que valida los datos a medida que se escriben en un campo.
CDaoRecordset::GetValidationText Recupera el texto que se muestra cuando no se cumple una regla de validación.
CDaoRecordset::IsBOF Devuelve un valor distinto de cero si el conjunto de registros se ha colocado antes del primer registro. No hay ningún registro actual.
CDaoRecordset::IsDeleted Devuelve un valor distinto de cero si el conjunto de registros se coloca en un registro eliminado.
CDaoRecordset::IsEOF Devuelve un valor distinto de cero si el conjunto de registros se ha colocado después del último registro. No hay ningún registro actual.
CDaoRecordset::IsFieldDirty Devuelve un valor distinto de cero si el campo especificado en el registro actual ha cambiado.
CDaoRecordset::IsFieldNull Devuelve un valor distinto de cero si el campo especificado en el registro actual es Null (sin ningún valor).
CDaoRecordset::IsFieldNullable Devuelve un valor distinto de cero si el campo especificado en el registro actual se puede establecer en NULL (no tiene ningún valor).
CDaoRecordset::IsOpen Devuelve un valor distinto de cero si se ha llamado anteriormente a Open.
CDaoRecordset::Move Coloca el conjunto de registros en un número especificado de registros a partir del registro actual, en cualquier dirección.
CDaoRecordset::MoveFirst Coloca el registro actual en el primer registro del conjunto de registros.
CDaoRecordset::MoveLast Coloca el registro actual en el último registro del conjunto de registros.
CDaoRecordset::MoveNext Coloca el registro actual en el siguiente registro del conjunto de registros.
CDaoRecordset::MovePrev Coloca el registro actual en el registro previo del conjunto de registros.
CDaoRecordset::Open Crea un nuevo conjunto de registros a partir de una tabla, dynaset o instantánea.
CDaoRecordset::Requery Ejecuta de nuevo la consulta del conjunto de registros para actualizar los registros seleccionados.
CDaoRecordset::Seek Busca el registro en un objeto recordset de tipo tabla indizado que satisface los criterios especificados para el índice actual y hace que ese registro sea el registro actual.
CDaoRecordset::SetAbsolutePosition Establece el número de registro del registro actual de un objeto recordset.
CDaoRecordset::SetBookmark Coloca el conjunto de registros en un registro que contiene el marcador especificado.
CDaoRecordset::SetCacheSize Establece un valor que especifica el número de registros de un conjunto de registros de tipo dynaset que contiene datos que se almacenarán localmente en caché desde un origen de datos ODBC.
CDaoRecordset::SetCacheStart Establece un valor que especifica el marcador del primer registro del conjunto de registros que se va a almacenar en caché.
CDaoRecordset::SetCurrentIndex Se llama para establecer un índice en un conjunto de registros de tipo tabla.
CDaoRecordset::SetFieldDirty Marca el campo especificado en el registro actual como cambiado.
CDaoRecordset::SetFieldNull Establece el valor del campo especificado en el registro actual en NULL (sin valor).
CDaoRecordset::SetFieldValue Establece el valor de un campo en un conjunto de registros.
CDaoRecordset::SetFieldValueNull Establece el valor de un campo en un conjunto de registros en Null. (sin valor).
CDaoRecordset::SetLockingMode Establece un valor que indica el tipo de bloqueo que se va a poner en vigor durante la edición.
CDaoRecordset::SetParamValue Establece el valor actual del parámetro especificado almacenado en el objeto DAOParameter subyacente
CDaoRecordset::SetParamValueNull Establece el valor actual del parámetro especificado en Null (sin valor).
CDaoRecordset::SetPercentPosition Establece la posición del registro actual en una ubicación correspondiente a un porcentaje del número total de registros de un conjunto de registros.
CDaoRecordset::Update Completa una operación AddNew o Edit guardando los datos nuevos o editados en el origen de datos.

Miembros de datos públicos

Nombre Descripción
CDaoRecordset::m_bCheckCacheForDirtyFields Contiene una marca que indica si los campos se marcan automáticamente como modificados.
CDaoRecordset::m_nFields Contiene el número de miembros de datos de campo de la clase del conjunto de registros y el número de columnas que el conjunto de registros ha seleccionado en el origen de datos.
CDaoRecordset::m_nParams Contiene el número de miembros de datos de parámetros en la clase de conjunto de registros: el número de parámetros pasados con la consulta del conjunto de registros
CDaoRecordset::m_pDAORecordset Puntero a la interfaz DAO subyacente al objeto recordset.
CDaoRecordset::m_pDatabase Base de datos de origen para este conjunto de resultados. Contiene un puntero a un objeto CDaoDatabase.
CDaoRecordset::m_strFilter Contiene una cadena que se usa para construir una instrucción WHERE de SQL.
CDaoRecordset::m_strSort Contiene una cadena que se usa para construir una instrucción ORDER BY de SQL.

Comentarios

Los objetos CDaoRecordset conocidos como «conjuntos de registros» están disponibles en las tres formas siguientes:

  • Los conjuntos de registros de tipo tabla representan una tabla base que puede usar para examinar, agregar, cambiar o eliminar registros de una sola tabla de base de datos.

  • Los conjuntos de registros de tipo Dynaset son el resultado de una consulta que puede tener registros actualizables. Estos conjuntos de registros son un conjunto de registros que puede usar para examinar, agregar, cambiar o eliminar registros de una tabla o tablas de base de datos subyacentes. Los conjuntos de registros de tipo Dynaset pueden contener campos de una o varias tablas de una base de datos.

  • Los conjuntos de registros de tipo instantánea son una copia estática de un conjunto de registros que puede usar para buscar datos o generar informes. Estos conjuntos de registros pueden contener campos de una o varias tablas de una base de datos, pero no se pueden actualizar.

Cada forma representa un conjunto de registros fijo en el momento en que se abre el conjunto de registros. Al desplazarse a un registro de un conjunto de registros de tipo tabla o a un conjunto de registros de tipo dynaset, refleja los cambios realizados en el registro una vez abierto el conjunto de registros, ya sea por otros usuarios o por otros conjuntos de registros de la aplicación. (No se puede actualizar un conjunto de registros de tipo instantánea). Puede usar CDaoRecordset directamente o derivar una clase de conjunto de registros específica de la aplicación de CDaoRecordset. Luego, puede:

  • Desplazarse por los registros.

  • Establezca un índice y busque rápidamente registros mediante Seek (solo conjuntos de registros de tipo tabla).

  • Busque registros basados en una comparación de cadenas: "<", "<=", "=", "=" o ">>" (conjuntos de registros de tipo dynaset y de tipo instantánea).

  • Actualice los registros y especifique un modo de bloqueo (excepto conjuntos de registros de tipo instantánea).

  • Filtrar el conjunto de registros para restringir qué registros se seleccionan de los que hay disponibles en el origen de datos

  • Ordenar el conjunto de registros.

  • Parametrizar el conjunto de registros para personalizar su selección con información no conocida hasta el tiempo de ejecución

La clase CDaoRecordset proporciona una interfaz similar a la de la clase CRecordset. La principal diferencia es que la clase CDaoRecordset accede a los datos a través de un objeto de acceso a datos (DAO) basado en OLE. La clase CRecordset accede a DBMS a través de conectividad abierta de bases de datos (ODBC) y un controlador ODBC para ese DBMS.

Nota:

Las clases de base de datos DAO son distintas de las clases de base de datos MFC, basadas en la conectividad abierta de base de datos (ODBC). Todos los nombres de las clases de base de datos DAO tienen el prefijo "CDao". Sigue pudiendo acceder a orígenes de datos ODBC con las clases DAO; las clases DAO suelen ofrecer capacidades superiores porque son específicas del motor de base de datos de Microsoft Jet.

Puede usar CDaoRecordset directamente o derivar una clase de CDaoRecordset. Para usar una clase recordset en cualquier caso, abra una base de datos y construya un objeto recordset y pase el constructor un puntero al objeto CDaoDatabase. También puede construir un objeto CDaoRecordset y permitir que MFC cree un objeto CDaoDatabase temporal automáticamente. A continuación, llame a la función miembro Open del conjunto de registros, especificando si el objeto es un conjunto de registros de tipo tabla, un conjunto de registros de tipo dynaset o un conjunto de registros de tipo instantánea. La llamada a Open selecciona datos de la base de datos y recupera el primer registro.

Use las funciones miembro y los miembros de datos del objeto para desplazarse por los registros y operar en ellos. Las operaciones disponibles dependen de si el objeto es un conjunto de registros de tipo tabla, un conjunto de registros de tipo dynaset o un conjunto de registros de tipo instantánea y si es actualizable o de solo lectura, depende de la funcionalidad del origen de datos o de conectividad abierta de bases de datos (ODBC). Para actualizar los registros que puedan haber cambiado o que se hayan agregado desde la llamada a Open, llame a la función miembro del objeto Requery. Llame a la función miembro del objeto Close y destruya el objeto cuando termine con ella.

CDaoRecordset usa el intercambio de campos de registros DAO (DFX) para admitir la lectura y actualización de campos de registro a través de miembros de C++ seguros para tipos de la clase derivada CDaoRecordset o CDaoRecordset. También puede implementar el enlace dinámico de columnas en una base de datos sin usar el mecanismo DFX mediante GetFieldValue y SetFieldValue.

Para obtener información relacionada, vea el tema "Objeto Recordset" en la Ayuda de DAO.

Jerarquía de herencia

CObject

CDaoRecordset

Requisitos

Encabezado: afxdao.h

CDaoRecordset::AddNew

Llame a esta función miembro para agregar un nuevo registro a un conjunto de registros de tipo tabla o dynaset.

virtual void AddNew();

Comentarios

Los campos del registro son NULL inicialmente. (En la terminología de la base de datos, Null significa "sin valor" y no es igual que NULL en C++). Para completar la operación, debe llamar a la función miembro Update . Update guarda los cambios en el origen de datos.

Precaución

Si edita un registro y, a continuación, desplácese a otro registro sin llamar a Update, los cambios se perderán sin previo aviso.

Si agrega un registro a un conjunto de registros de tipo dynaset llamando a AddNew, el registro es visible en el conjunto de registros y se incluye en la tabla subyacente donde se vuelve visible para los nuevos objetos CDaoRecordset.

La posición del nuevo registro depende del tipo de conjunto de registros:

  • En un conjunto de registros de tipo dynaset, donde no se garantiza que se inserte el nuevo registro. Este comportamiento cambió con Microsoft Jet 3.0 por motivos de rendimiento y simultaneidad. Si su objetivo es hacer que el registro recién agregado sea el registro actual, obtenga el marcador del último registro modificado y muévalo a ese marcador:
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • En un conjunto de registros de tipo tabla para el que se ha especificado un índice, los registros se devuelven en su lugar adecuado en el criterio de ordenación. Si no se ha especificado ningún índice, se devuelven nuevos registros al final del conjunto de registros.

El registro que estaba activo antes de usar AddNew sigue siendo actual. Si desea que el nuevo registro esté activo y el conjunto de registros admita marcadores, llame a SetBookmark al marcador identificado por el valor de la propiedad LastModified del objeto recordset DAO subyacente. Esto resulta útil para determinar el valor de los campos de contador (incremento automático) en un registro agregado. Para obtener más información, vea GetLastModifiedBookmark.

Si la base de datos admite transacciones, puede incluir la llamada a AddNew como parte de una transacción. Para obtener más información sobre las transacciones, vea la clase CDaoWorkspace. Tenga en cuenta que debe llamar a CDaoWorkspace::BeginTrans antes de llamar a AddNew.

No se puede llamar a AddNew en relación con un conjunto de registros a cuya función miembro Open no se ha llamado. Si se llama a AddNew en relación con un conjunto de registros al que no se puede anexar, se produce una excepción CDaoException. Para determinar si el conjunto de registros se puede actualizar, llame a CanAppend.

El marco marca los miembros de datos de campo modificados para asegurarse de que se escribirán en el registro en el origen de datos mediante el mecanismo de intercambio de campos de registros DAO (DFX). Cambiar el valor de un campo generalmente establece el campo desfasado automáticamente, por lo que rara vez tendrá que llamarse a SetFieldDirty usted mismo, pero a veces es posible que quiera asegurarse de que las columnas se actualizarán explícitamente o se insertarán independientemente del valor que se encuentra en el miembro de datos del campo. El mecanismo DFX también emplea el uso de PSEUDO NULL. Para obtener más información, vea CDaoFieldExchange::m_nOperation.

Si no se usa el mecanismo de almacenamiento en búfer doble, el cambio del valor del campo no establece automáticamente el campo como sucio. En este caso, será necesario establecer explícitamente el campo desfasado. La marca contenida en m_bCheckCacheForDirtyFields controla esta comprobación automática de campos.

Nota:

Si los registros están almacenados en búfer doble (es decir, la comprobación automática de campos está habilitada), la llamada a CancelUpdate restaurará las variables miembro a los valores que tenían antes de llamar a AddNew o Edit.

Para obtener información relacionada, vea los temas "AddNew Method", "CancelUpdate Method", "LastModified Property" y "EditMode Property" en la Ayuda de DAO.

CDaoRecordset::CanAppend

Llame a esta función miembro para determinar si el conjunto de registros abierto anteriormente permite agregar nuevos registros mediante una llamada a la función miembro AddNew .

BOOL CanAppend() const;

Valor devuelto

Distinto de cero si el conjunto de registros permite agregar nuevos registros; de lo contrario, 0. CanAppend devolverá 0 si abrió el conjunto de registros como de solo lectura.

Comentarios

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

CDaoRecordset::CanBookmark

Llame a esta función miembro para determinar si el conjunto de registros abierto anteriormente permite marcar individualmente los registros mediante marcadores.

BOOL CanBookmark();

Valor devuelto

Distinto de cero si el conjunto de registros admite marcadores, de lo contrario, 0.

Comentarios

Si usa conjuntos de registros basados completamente en tablas del motor de base de datos de Microsoft Jet, se pueden usar marcadores excepto en conjuntos de registros de tipo instantánea marcados como conjuntos de registros de desplazamiento de solo avance. Es posible que otros productos de base de datos (orígenes de datos ODBC externos) no admitan marcadores.

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

CDaoRecordset::CancelUpdate

La función miembro CancelUpdate cancela las actualizaciones pendientes debido a una operación Edit o AddNew.

virtual void CancelUpdate();

Comentarios

Por ejemplo, si una aplicación llama a la función miembro Edit o AddNew y no ha llamado a Update, CancelUpdate cancela los cambios realizados después de llamar a Edit o AddNew.

Nota:

Si los registros están almacenados en búfer doble (es decir, la comprobación automática de campos está habilitada), la llamada a CancelUpdate restaurará las variables miembro a los valores que tenían antes de llamar a AddNew o Edit.

Si no hay ninguna operación Edit o AddNew pendiente, CancelUpdate hace que MFC inicie una excepción. Llame a la función miembro GetEditMode para determinar si hay una operación pendiente que se puede cancelar.

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

CDaoRecordset::CanRestart

Llame a esta función miembro para determinar si el conjunto de registros permite reiniciar su consulta (para actualizar sus registros) llamando a la función miembro Requery.

BOOL CanRestart();

Valor devuelto

Distinto de cero si se puede llamar a Requery para volver a ejecutar la consulta del conjunto de registros; de lo contrario, es 0.

Comentarios

Los conjuntos de registros de tipo tabla no admiten Requery.

Si Requery no se admite, llame a Close y, a continuación, a Open para actualizar los datos. Puede llamar a Requery para actualizar la consulta de parámetros subyacentes de un objeto recordset después de cambiar los valores del parámetro.

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

CDaoRecordset::CanScroll

Llame a esta función miembro para determinar si el conjunto de registros permite el desplazamiento.

BOOL CanScroll() const;

Valor devuelto

Distinto de cero si puede desplazarse por los registros; de lo contrario, 0.

Comentarios

Si llama a Open con dbForwardOnly, el conjunto de registros solo puede desplazarse hacia delante.

Para obtener información relacionada, vea el tema "Posicionamiento del puntero de registro actual con DAO" en la Ayuda de DAO.

CDaoRecordset::CanTransact

Llame a esta función miembro para determinar si el conjunto de registros permite las transacciones.

BOOL CanTransact();

Valor devuelto

Distinto de cero si el origen de datos subyacente admite transacciones; de lo contrario, 0.

Comentarios

Para obtener más información, vea el tema sobre la propiedad Transactions en la Ayuda de DAO.

CDaoRecordset::CanUpdate

Llame a esta función miembro para determinar si se puede actualizar el conjunto de registros.

BOOL CanUpdate() const;

Valor devuelto

Distinto de cero si el conjunto de registros se puede actualizar (agregar, actualizar y eliminar registros), en caso contrario, 0.

Comentarios

Un conjunto de registros puede ser de solo lectura si el origen de datos subyacente es de solo lectura o si especificó dbReadOnly para nOptions cuando llamó a Open para el conjunto de registros.

Para obtener información relacionada, vea los temas "AddNew Method", "Edit Method", "Delete Method", "Update Method" y "Updatable Property" en la Ayuda de DAO.

CDaoRecordset::CDaoRecordset

Construye un objeto CDaoRecordset.

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

Parámetros

pDatabase
Contiene un puntero a un objeto CDaoDatabase o al valor NULL. Si no es NULL y no se ha llamado a la función miembro Open del objeto CDaoDatabase para conectarla al origen de datos, el conjunto de registros intenta abrirla automáticamente durante su propia llamada a Open. Si pasa NULL, se crea un objeto CDaoDatabase y se conecta para usted mediante la información del origen de datos que especificó si deriva la clase del conjunto de registros de CDaoRecordset.

Comentarios

Se puede usar CDaoRecordset directamente o derivar una clase específica de la aplicación de CDaoRecordset. Se puede usar ClassWizard para derivar las clases del conjunto de registros.

Nota:

Si deriva una clase CDaoRecordset, la clase derivada debe proporcionar su propio constructor. En el constructor de la clase derivada, llame al constructor CDaoRecordset::CDaoRecordset, pasándole los parámetros adecuados.

Pase NULL al constructor del conjunto de registros para que un objeto CDaoDatabase se construya y se conecte automáticamente. Se trata de un acceso directo útil que no requiere que construya y conecte un objeto CDaoDatabase antes de construir el conjunto de registros. Si el objeto CDaoDatabase no está abierto, también se creará un objeto CDaoWorkspace para usted que use el área de trabajo predeterminada. Para obtener más información, vea CDaoDatabase::CDaoDatabase.

CDaoRecordset::Close

Cerrar un objeto CDaoRecordset lo quita de la colección de conjuntos de registros abiertos de la base de datos asociada.

virtual void Close();

Comentarios

Dado que Close no destruye el objeto CDaoRecordset, puede volver a usar el objeto llamando a Open al mismo origen de datos o a otro origen de datos.

Todas las instrucciones AddNew o Edit pendientes se cancelan y todas las transacciones pendientes se revierten. Si desea conservar las adiciones o modificaciones pendientes, llame a Update antes de llamar a Close para cada conjunto de registros.

Puede volver a llamar a Open después de llamar a Close. Esto le permitirá usar el objeto de conjunto de registros. Una alternativa mejor es llamar a Requery, si es posible.

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

CDaoRecordset::Delete

Llame a esta función miembro para eliminar el registro actual en un objeto recordset de tipo dynaset abierto o de tipo tabla.

virtual void Delete();

Comentarios

Después de una eliminación correcta, los miembros de datos de campo del conjunto de registros se establecen en un valor Null, y debe llamar explícitamente a una de las funciones miembro de navegación del conjunto de registros ( Move, Seek, SetBookmark, etc.) para desactivar el registro eliminado. Al eliminar registros de un conjunto de registros, debe haber un registro actual en el conjunto de registros antes de llamar a Delete; de lo contrario, MFC produce una excepción.

Delete quita el registro actual y hace que sea inaccesible. Aunque no se puede editar o usar el registro eliminado, sigue siendo actual. Sin embargo, una vez que se mueve a otro registro, no puede volver a hacer que el registro eliminado vuelva a estar activo.

Precaución

El conjunto de registros debe ser actualizable y debe haber un registro válido actual en el conjunto de registros al llamar a Delete. Por ejemplo, si elimina un registro pero no se desplaza a un nuevo registro antes de llamar a Delete de nuevo, Delete inicia una excepción CDaoException.

Puede recuperar un registro si usa transacciones y llama a la función miembro CDaoWorkspace::Rollback. Si la tabla base es la tabla principal de una relación de eliminación en cascada, la eliminación del registro actual también puede eliminar uno o varios registros de una tabla externa. Para obtener más información, consulte la definición "eliminación en cascada" en la Ayuda de DAO.

A diferencia de AddNew y Edit, una llamada a Delete no va seguida de una llamada a Update.

Para obtener información relacionada, vea los temas "AddNew Method", "Edit Method", "Delete Method", "Update Method" y "Updatable Property" en la Ayuda de DAO.

CDaoRecordset::DoFieldExchange

El marco llama a esta función miembro para intercambiar automáticamente datos entre los miembros de datos de campo del objeto de conjunto de registros y las columnas correspondientes del registro actual en el origen de datos.

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

Parámetros

pFX
Contiene un puntero a un objeto CDaoFieldExchange. El marco ya habrá configurado este objeto para especificar un contexto para la operación de intercambio de campos.

Comentarios

También enlaza los miembros de datos de parámetros (si los hay) a marcadores de posición de parámetro en la cadena de instrucción SQL para la selección del conjunto de registros. El intercambio de datos de campo, denominado intercambio de campos de registros DAO (DFX), funciona en ambas direcciones: desde los miembros de datos de campo del objeto de conjunto de registros a los campos del registro en el origen de datos y desde el registro del origen de datos al objeto de conjunto de registros. Si enlaza columnas dinámicamente, no es necesario implementar DoFieldExchange.

Normalmente, la única acción que debe realizar para implementar DoFieldExchange para la clase de conjunto de registros derivada es crear la clase con ClassWizard y especificar los nombres y los tipos de datos de los miembros de datos de campo. También puede agregar código a lo que ClassWizard escribe para especificar miembros de datos de parámetros. Si todos los campos se van a enlazar dinámicamente, esta función estará inactiva a menos que especifique miembros de datos de parámetros.

Al declarar la clase de conjunto de registros derivada con ClassWizard, el asistente escribe una invalidación de DoFieldExchange automáticamente, que se parece al ejemplo siguiente:

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset::Edit

Llame a esta función miembro para permitir los cambios en el registro actual.

virtual void Edit();

Comentarios

Una vez que llame a la función miembro Edit, los cambios realizados en los campos del registro actual se copian en el búfer de copia. Después de realizar los cambios deseados en el registro, llame a Update para guardar los cambios. Edit guarda los valores de los miembros de datos del conjunto de registros. Si llama a Edit, realice cambios y vuelva a llamar a Edit. Los valores del registro se restauran a como estaban antes de la primera llamada a Edit.

Precaución

Si edita un registro y, a continuación, realiza cualquier operación que se mueva a otro registro sin llamar primero a Update, los cambios se perderán sin previo aviso. Además, si cierra el conjunto de registros o la base de datos primaria, el registro editado se descarta sin advertencia.

En algunos casos, posiblemente sea conveniente actualizar una columna haciendo que sea NULL (esto es, no contiene datos). Para ello, llame a SetFieldNull con un parámetro TRUE para marcar el campo como NULL; esto también hace que la columna se actualice. Si quiere que un campo se escriba en el origen de datos aunque su valor no haya cambiado, llame a SetFieldDirty con un parámetro TRUE. Esto funciona incluso cuando el campo tenía el valor NULL.

El marco marca los miembros de datos de campo modificados para asegurarse de que se escribirán en el registro en el origen de datos mediante el mecanismo de intercambio de campos de registros DAO (DFX). Cambiar el valor de un campo generalmente establece el campo desfasado automáticamente, por lo que rara vez tendrá que llamarse a SetFieldDirty usted mismo, pero a veces es posible que quiera asegurarse de que las columnas se actualizarán explícitamente o se insertarán independientemente del valor que se encuentra en el miembro de datos del campo. El mecanismo DFX también emplea el uso de PSEUDO NULL. Para obtener más información, vea CDaoFieldExchange::m_nOperation.

Si no se usa el mecanismo de almacenamiento en búfer doble, el cambio del valor del campo no establece automáticamente el campo como sucio. En este caso, será necesario establecer explícitamente el campo desfasado. La marca contenida en m_bCheckCacheForDirtyFields controla esta comprobación automática de campos.

Cuando el objeto recordset se bloquea pesimistamente en un entorno multiusuario, el registro permanece bloqueado desde el momento Edit hasta que se completa la actualización. Si el conjunto de registros está bloqueado optimistamente, el registro se bloquea y se compara con el registro editado previamente justo antes de actualizarlo en la base de datos. Si el registro ha cambiado desde que llamó a Edit, se produce un error en la operación Update y MFC produce una excepción. El modo de bloqueo se puede cambiar con SetLockingMode.

Nota:

El bloqueo optimista siempre se usa en formatos de base de datos externos, como ODBC e ISAM instalable.

El registro actual permanece activo después de llamar a Edit. Para llamar a Edit, debe haber un registro actual. Si no hay ningún registro actual o si el conjunto de registros no hace referencia a un objeto recordset de tipo tabla o de tipo dynaset abierto, se produce una excepción. La llamada a Edit hace que se produzca una excepción CDaoException en las siguientes condiciones:

  • No hay ningún registro actual.

  • La base de datos o el conjunto de registros es de solo lectura.

  • No hay campos en el registro actualizables.

  • Otro usuario abrió la base de datos o el conjunto de registros para su uso exclusivo.

  • Otro usuario ha bloqueado la página que contiene el registro.

Si el origen de datos admite transacciones, puede incluir la llamada a Edit como parte de una transacción. Tenga en cuenta que debe llamar a CDaoWorkspace::BeginTrans antes de llamar a Edit y después de que se haya abierto el conjunto de registros. Tenga en cuenta también que la llamada a CDaoWorkspace::CommitTrans no es un sustituto de llamar a Update para completar la operación Edit. Para obtener más información sobre las transacciones, vea la clase CDaoWorkspace.

Para obtener información relacionada, vea los temas "AddNew Method", "Edit Method", "Delete Method", "Update Method" y "Updatable Property" en la Ayuda de DAO.

CDaoRecordset::FillCache

Llame a esta función miembro para almacenar en caché un número especificado de registros del conjunto de registros.

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

Parámetros

pSize
Especifica el número de filas que se van a rellenar en la memoria caché. Si omite este parámetro, el valor viene determinado por el valor de la propiedad CacheSize del objeto DAO subyacente.

pBookmark
Un COleVariant que especifica un marcador. La memoria caché se rellena a partir del registro indicado por este marcador. Si omite este parámetro, la memoria caché se rellena a partir del registro indicado por la propiedad CacheStart del objeto DAO subyacente.

Comentarios

El almacenamiento en caché mejora el rendimiento de una aplicación que recupera o captura datos de un servidor remoto. Una memoria caché es espacio en la memoria local que contiene los datos capturados más recientemente del servidor en la suposición de que los datos probablemente se solicitarán de nuevo mientras se ejecuta la aplicación. Cuando se solicitan datos, el motor de base de datos de Microsoft Jet comprueba primero la memoria caché de los datos en lugar de capturarlos del servidor, lo que tarda más tiempo. El uso del almacenamiento en caché de datos en orígenes de datos que no son ODBC no tiene ningún efecto, ya que los datos no se guardan en la memoria caché.

En lugar de esperar a que la memoria caché se rellene con registros a medida que se capturan, puede rellenar explícitamente la memoria caché en cualquier momento llamando a la función miembro FillCache. Se trata de una manera más rápida de rellenar la memoria caché porque FillCache captura varios registros a la vez en lugar de uno a uno. Por ejemplo, mientras se muestra cada pantalla de registros, puede hacer que la llamada a FillCache de la aplicación capture la siguiente pantalla de registros.

Cualquier base de datos ODBC a la que se accede con objetos recordset puede tener una caché local. Para crear la memoria caché, abra un objeto recordset desde el origen de datos remoto y, a continuación, llame a las funciones miembro SetCacheSize y SetCacheStart del conjunto de registros. Si lSize y lBookmark crean un intervalo que está parcialmente o totalmente fuera del intervalo especificado por SetCacheSize y SetCacheStart, se omite la parte del conjunto de registros fuera de este intervalo y no se carga en la memoria caché. Si FillCache solicita más registros de los que permanecen en el origen de datos remoto, solo se capturan los registros restantes y no se produce ninguna excepción.

Los registros capturados de la memoria caché no reflejan los cambios realizados simultáneamente en los datos de origen por parte de otros usuarios.

FillCache captura solo los registros que aún no están almacenados en caché. Para forzar una actualización de todos los datos almacenados en caché, llame a la función miembro SetCacheSize con un parámetro lSize igual a 0, llame de nuevo a SetCacheSize con el parámetro lSize igual al tamaño de la memoria caché que solicitó originalmente y, a continuación, llame a FillCache.

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

CDaoRecordset::Find

Llame a esta función miembro para buscar una cadena determinada en un conjunto de registros de tipo dynaset o snapshot mediante un operador de comparación.

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

Parámetros

lFindType
Valor que indica el tipo de operación Buscar deseada. Los valores posibles son:

  • AFX_DAO_NEXT Busque la siguiente ubicación de una cadena coincidente.

  • AFX_DAO_PREV Buscar la ubicación anterior de una cadena coincidente.

  • AFX_DAO_FIRST Buscar la primera ubicación de una cadena coincidente.

  • AFX_DAO_LAST Buscar la última ubicación de una cadena coincidente.

lpszFilter
Expresión de cadena (como la cláusula WHERE en una instrucción SQL sin la palabra WHERE) usada para buscar el registro. Por ejemplo:

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

Puede encontrar la primera, siguiente, anterior o última instancia de la cadena. Find es una función virtual, por lo que puede invalidarlo y agregar su propia implementación. Las funciones miembro FindFirst, FindLast, FindNexty FindPrev llaman a la función miembro Find, por lo que puede usar Find para controlar el comportamiento de todas las operaciones de búsqueda.

Para buscar un registro en un conjunto de registros de tipo tabla, llame a la función miembro Seek.

Sugerencia

Cuanto menor sea el conjunto de registros que tenga, más eficaz será Find. En general, y especialmente con los datos ODBC, es mejor crear una nueva consulta que recupere solo los registros que desee.

Para obtener información relacionada, vea el tema "FindFirst, FindLast, FindNext, FindPrevious Methods" en la Ayuda de DAO.

CDaoRecordset::FindFirst

Llame a esta función miembro para buscar el primer registro que coincida con una condición especificada.

BOOL FindFirst(LPCTSTR lpszFilter);

Parámetros

lpszFilter
Expresión de cadena (como la cláusula WHERE en una instrucción SQL sin la palabra WHERE) usada para buscar el registro.

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

La función miembro FindFirst comienza su búsqueda desde el principio del conjunto de registros y busca hasta el final del conjunto de registros.

Si desea incluir todos los registros de la búsqueda (no solo los que cumplen una condición específica), use una de las operaciones Move para pasar de registro a registro. Para buscar un registro en un conjunto de registros de tipo tabla, llame a la función miembro Seek.

Si no se encuentra un registro que coincida con los criterios, el puntero de registro actual no está definido y FindFirst devuelve cero. Si el conjunto de registros contiene más de un registro que cumple los criterios, FindFirst busca la primera aparición, FindNext localiza la siguiente aparición, etc.

Precaución

Si edita el registro actual, asegúrese de guardar los cambios llamando a la función miembro Update antes de pasar a otro registro. Si se mueve a otro registro sin actualizar, los cambios se perderán sin previo aviso.

Las funciones miembro Find buscan desde la ubicación y en la dirección especificada en la tabla siguiente:

Buscar operaciones Comenzar Buscar dirección
FindFirst Principio del conjunto de registros Fin del conjunto de registros
FindLast Fin del conjunto de registros Principio del conjunto de registros
FindNext Registro actual Fin del conjunto de registros
FindPrevious Registro actual Principio del conjunto de registros

Nota:

Cuando se llama a FindLast, el motor de base de datos de Microsoft Jet rellena completamente el conjunto de registros antes de comenzar la búsqueda, si aún no se ha realizado. La primera búsqueda puede tardar más tiempo que las búsquedas posteriores.

El uso de una de las operaciones Find no es el mismo que llamar a MoveFirst o MoveNext, pero simplemente hace que el primer o siguiente registro actual sin especificar una condición. Puede seguir una operación Find con una operación Move.

Tenga en cuenta lo siguiente al usar las operaciones de búsqueda:

  • Si Find devuelve un valor distinto de cero, no se define el registro actual. En este caso, debe volver a colocar el puntero de registro actual en un registro válido.

  • No se puede usar una operación Find con un conjunto de registros de tipo de instantánea de desplazamiento de solo avance.

  • Debe usar el formato de fecha de EE. UU. (mes-día-año) al buscar campos que contengan fechas, incluso si no usa la versión de EE. UU. del motor de base de datos de Microsoft Jet; de lo contrario, es posible que no se encuentren los registros coincidentes.

  • Al trabajar con bases de datos ODBC y conjuntos dinámicos grandes, es posible que descubra que el uso de las operaciones find es lento, especialmente cuando se trabaja con conjuntos de registros grandes. Puede mejorar el rendimiento mediante consultas SQL con cláusulas ORDERBY o WHERE personalizadas, consultas de parámetros u objetos CDaoQuerydef que recuperan registros indexados específicos.

Para obtener información relacionada, vea el tema "FindFirst, FindLast, FindNext, FindPrevious Methods" en la Ayuda de DAO.

CDaoRecordset::FindLast

Llame a esta función miembro para buscar el último registro que coincida con una condición especificada.

BOOL FindLast(LPCTSTR lpszFilter);

Parámetros

lpszFilter
Expresión de cadena (como la cláusula WHERE en una instrucción SQL sin la palabra WHERE) usada para buscar el registro.

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

La función miembro FindLast comienza su búsqueda al final del conjunto de registros y busca hacia atrás hacia el principio del conjunto de registros.

Si desea incluir todos los registros de la búsqueda (no solo los que cumplen una condición específica), use una de las operaciones Move para pasar de registro a registro. Para buscar un registro en un conjunto de registros de tipo tabla, llame a la función miembro Seek.

Si no se encuentra un registro que coincida con los criterios, el puntero de registro actual no está definido y FindLast devuelve cero. Si el conjunto de registros contiene más de un registro que cumple los criterios, FindFirst localiza la primera aparición, FindNext localiza la siguiente aparición después de la primera aparición, etc.

Precaución

Si edita el registro actual, asegúrese de guardar los cambios llamando a la función miembro Update antes de pasar a otro registro. Si se mueve a otro registro sin actualizar, los cambios se perderán sin previo aviso.

El uso de una de las operaciones Find no es el mismo que llamar a MoveFirst o MoveNext, pero simplemente hace que el primer o siguiente registro actual sin especificar una condición. Puede seguir una operación Find con una operación Move.

Tenga en cuenta lo siguiente al usar las operaciones de búsqueda:

  • Si Find devuelve un valor distinto de cero, no se define el registro actual. En este caso, debe volver a colocar el puntero de registro actual en un registro válido.

  • No se puede usar una operación Find con un conjunto de registros de tipo de instantánea de desplazamiento de solo avance.

  • Debe usar el formato de fecha de EE. UU. (mes-día-año) al buscar campos que contengan fechas, incluso si no usa la versión de EE. UU. del motor de base de datos de Microsoft Jet; de lo contrario, es posible que no se encuentren los registros coincidentes.

  • Al trabajar con bases de datos ODBC y conjuntos dinámicos grandes, es posible que descubra que el uso de las operaciones find es lento, especialmente cuando se trabaja con conjuntos de registros grandes. Puede mejorar el rendimiento mediante consultas SQL con cláusulas ORDERBY o WHERE personalizadas, consultas de parámetros u objetos CDaoQuerydef que recuperan registros indexados específicos.

Para obtener información relacionada, vea el tema "FindFirst, FindLast, FindNext, FindPrevious Methods" en la Ayuda de DAO.

CDaoRecordset::FindNext

Llame a esta función miembro para buscar el siguiente registro que coincida con una condición especificada.

BOOL FindNext(LPCTSTR lpszFilter);

Parámetros

lpszFilter
Expresión de cadena (como la cláusula WHERE en una instrucción SQL sin la palabra WHERE) usada para buscar el registro.

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

La función miembro FindNext comienza su búsqueda en el registro actual y busca al final del conjunto de registros.

Si desea incluir todos los registros de la búsqueda (no solo los que cumplen una condición específica), use una de las operaciones Move para pasar de registro a registro. Para buscar un registro en un conjunto de registros de tipo tabla, llame a la función miembro Seek.

Si no se encuentra un registro que coincida con los criterios, el puntero de registro actual no está definido y FindNext devuelve cero. Si el conjunto de registros contiene más de un registro que cumple los criterios, FindFirst busca la primera aparición, FindNext localiza la siguiente aparición, etc.

Precaución

Si edita el registro actual, asegúrese de guardar los cambios llamando a la función miembro Update antes de pasar a otro registro. Si se mueve a otro registro sin actualizar, los cambios se perderán sin previo aviso.

El uso de una de las operaciones Find no es el mismo que llamar a MoveFirst o MoveNext, pero simplemente hace que el primer o siguiente registro actual sin especificar una condición. Puede seguir una operación Find con una operación Move.

Tenga en cuenta lo siguiente al usar las operaciones de búsqueda:

  • Si Find devuelve un valor distinto de cero, no se define el registro actual. En este caso, debe volver a colocar el puntero de registro actual en un registro válido.

  • No se puede usar una operación Find con un conjunto de registros de tipo de instantánea de desplazamiento de solo avance.

  • Debe usar el formato de fecha de EE. UU. (mes-día-año) al buscar campos que contengan fechas, incluso si no usa la versión de EE. UU. del motor de base de datos de Microsoft Jet; de lo contrario, es posible que no se encuentren los registros coincidentes.

  • Al trabajar con bases de datos ODBC y conjuntos dinámicos grandes, es posible que descubra que el uso de las operaciones find es lento, especialmente cuando se trabaja con conjuntos de registros grandes. Puede mejorar el rendimiento mediante consultas SQL con cláusulas ORDERBY o WHERE personalizadas, consultas de parámetros u objetos CDaoQuerydef que recuperan registros indexados específicos.

Para obtener información relacionada, vea el tema "FindFirst, FindLast, FindNext, FindPrevious Methods" en la Ayuda de DAO.

CDaoRecordset::FindPrev

Llame a esta función miembro para buscar el registro previo que coincida con una condición especificada.

BOOL FindPrev(LPCTSTR lpszFilter);

Parámetros

lpszFilter
Expresión de cadena (como la cláusula WHERE en una instrucción SQL sin la palabra WHERE) usada para buscar el registro.

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

La función miembro FindPrev comienza su búsqueda en el registro actual y busca hacia atrás hacia el principio del conjunto de registros.

Si desea incluir todos los registros de la búsqueda (no solo los que cumplen una condición específica), use una de las operaciones Move para pasar de registro a registro. Para buscar un registro en un conjunto de registros de tipo tabla, llame a la función miembro Seek.

Si no se encuentra un registro que coincida con los criterios, el puntero de registro actual no está definido y FindPrev devuelve cero. Si el conjunto de registros contiene más de un registro que cumple los criterios, FindFirst busca la primera aparición, FindNext localiza la siguiente aparición, etc.

Precaución

Si edita el registro actual, asegúrese de guardar los cambios llamando a la función miembro Update antes de pasar a otro registro. Si se mueve a otro registro sin actualizar, los cambios se perderán sin previo aviso.

El uso de una de las operaciones Find no es el mismo que llamar a MoveFirst o MoveNext, pero simplemente hace que el primer o siguiente registro actual sin especificar una condición. Puede seguir una operación Find con una operación Move.

Tenga en cuenta lo siguiente al usar las operaciones de búsqueda:

  • Si Find devuelve un valor distinto de cero, no se define el registro actual. En este caso, debe volver a colocar el puntero de registro actual en un registro válido.

  • No se puede usar una operación Find con un conjunto de registros de tipo de instantánea de desplazamiento de solo avance.

  • Debe usar el formato de fecha de EE. UU. (mes-día-año) al buscar campos que contengan fechas, incluso si no usa la versión de EE. UU. del motor de base de datos de Microsoft Jet; de lo contrario, es posible que no se encuentren los registros coincidentes.

  • Al trabajar con bases de datos ODBC y conjuntos dinámicos grandes, es posible que descubra que el uso de las operaciones find es lento, especialmente cuando se trabaja con conjuntos de registros grandes. Puede mejorar el rendimiento mediante consultas SQL con cláusulas ORDERBY o WHERE personalizadas, consultas de parámetros u objetos CDaoQuerydef que recuperan registros indexados específicos.

Para obtener información relacionada, vea el tema "FindFirst, FindLast, FindNext, FindPrevious Methods" en la Ayuda de DAO.

CDaoRecordset::GetAbsolutePosition

Devuelve el número de registro del registro actual de un objeto recordset.

long GetAbsolutePosition();

Valor devuelto

Entero comprendido entre 0 y el número de registros del conjunto de registros. Corresponde a la posición ordinal del registro actual en el conjunto de registros.

Comentarios

El valor de la propiedad AbsolutePosition del objeto DAO subyacente es de base cero; un valor de 0 hace referencia al primer registro del conjunto de registros. Puede determinar el número de registros rellenados en el conjunto de registros llamando a GetRecordCount. Llamar a GetRecordCount puede tardar algún tiempo porque debe tener acceso a todos los registros para determinar el recuento.

Si no hay ningún registro actual, como cuando no hay registros en el conjunto de registros, se devuelve - 1. Si se elimina el registro actual, no se define el valor de la propiedad AbsolutePosition y MFC produce una excepción si se hace referencia a él. En el caso de los conjuntos de registros de tipo dynaset, se agregan nuevos registros al final de la secuencia.

Nota:

Esta propiedad no está pensada para usarse como número de registro suplente. Los marcadores siguen siendo la forma recomendada de conservar y volver a una posición determinada y son la única manera de colocar el registro actual en todos los tipos de objetos de conjunto de registros. En concreto, la posición de un registro determinado cambia cuando se eliminan los registros anteriores. Tampoco hay ninguna garantía de que un registro determinado tendrá la misma posición absoluta si el conjunto de registros se vuelve a crear porque no se garantiza el orden de los registros individuales dentro de un conjunto de registros a menos que se cree con una instrucción SQL mediante una cláusula ORDERBY.

Nota:

Esta función miembro solo es válida para conjuntos de registros de tipo dynaset y de tipo instantánea.

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

CDaoRecordset::GetBookmark

Llame a esta función miembro para obtener el valor del marcador en un registro determinado.

COleVariant GetBookmark();

Valor devuelto

Devuelve un valor que representa el marcador en el registro actual.

Comentarios

Cuando se crea o abre un objeto recordset, cada uno de sus registros ya tiene un marcador único si los admite. Llame a CanBookmark para determinar si un conjunto de registros admite marcadores.

Puede guardar el marcador para el registro actual asignando el valor del marcador a un objeto COleVariant. Para volver rápidamente a ese registro en cualquier momento después de pasar a un registro diferente, llame a SetBookmark con un parámetro correspondiente al valor de ese objeto COleVariant.

Nota:

La llamada a Requery cambia los marcadores DAO.

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

CDaoRecordset::GetCacheSize

Llame a esta función miembro para obtener el número de índices de una tabla.

long GetCacheSize();

Valor devuelto

Un valor que especifica el número de registros de un conjunto de registros de tipo dynaset que contiene datos que se almacenarán localmente en caché desde un origen de datos ODBC.

Comentarios

El almacenamiento en caché de datos mejora el rendimiento de una aplicación que recupera datos de un servidor remoto a través de objetos recordset de tipo dynaset. Una memoria caché es un espacio en la memoria local que contiene los datos recuperados más recientemente del servidor en caso de que se vuelvan a solicitar los datos mientras se ejecuta la aplicación. Cuando se solicitan datos, el motor de base de datos de Microsoft Jet comprueba primero la memoria caché de los datos solicitados en lugar de recuperarlos del servidor, lo que tarda más tiempo. Los datos que no proceden de un origen de datos ODBC no se guardan en la memoria caché.

Cualquier origen de datos ODBC, como una tabla adjunta, puede tener una caché local.

Para obtener información relacionada, consulte el tema "CacheSize, CacheStart Properties" (Propiedades de CacheStart) en la Ayuda de DAO.

CDaoRecordset::GetCacheStart

Llame a esta función miembro para obtener el valor de marcador del primer registro del conjunto de registros que se va a almacenar en caché.

COleVariant GetCacheStart();

Valor devuelto

Un COleVariant que especifica el marcador del primer registro del conjunto de registros que se va a almacenar en caché.

Comentarios

El motor de base de datos de Microsoft Jet solicita registros dentro del intervalo de caché de la memoria caché y solicita registros fuera del intervalo de caché del servidor.

Nota:

Los registros recuperados de la memoria caché no reflejan los cambios realizados simultáneamente en los datos de origen por parte de otros usuarios.

Para obtener información relacionada, consulte el tema "CacheSize, CacheStart Properties" (Propiedades de CacheStart) en la Ayuda de DAO.

CDaoRecordset::GetCurrentIndex

Llame a esta función miembro para determinar el índice que se está usando actualmente en un objeto CDaoRecordset de tipo de tabla indizada.

CString GetCurrentIndex();

Valor devuelto

Un CString que contiene el nombre del índice actualmente en uso con un conjunto de registros de tipo tabla. Devuelve una cadena vacía si no se ha establecido ningún índice.

Comentarios

Este índice es la base para ordenar los registros en un conjunto de registros de tipo tabla y la función miembro Seek usa para buscar registros.

Un objeto CDaoRecordset puede tener más de un índice, pero solo puede usar un índice a la vez (aunque un objeto CDaoTableDef puede tener varios índices definidos en él).

Para obtener información relacionada, vea el tema "Index Object" y la definición "current index" en la Ayuda de DAO.

CDaoRecordset::GetDateCreated

Llame a esta función miembro para recuperar la fecha y hora en que se creó una tabla base.

COleDateTime GetDateCreated();

Valor devuelto

Objeto COleDateTime que contiene la fecha y hora en que se creó la tabla base.

Comentarios

La configuración de fecha y hora se deriva del equipo en el que se creó la tabla base.

Para obtener información relacionada, vea el tema "DateCreated, LastUpdated Properties" en la Ayuda de DAO.

CDaoRecordset::GetDateLastUpdated

Llame a esta función miembro para recuperar la fecha y hora en que se actualizó por última vez el esquema.

COleDateTime GetDateLastUpdated();

Valor devuelto

Objeto COleDateTime que contiene la fecha y hora en que se actualizó por última vez la estructura de la tabla base (esquema).

Comentarios

La configuración de fecha y hora se deriva del equipo en el que se actualizó por última vez la estructura de la tabla base (esquema).

Para obtener información relacionada, vea el tema "DateCreated, LastUpdated Properties" en la Ayuda de DAO.

CDaoRecordset::GetDefaultDBName

Llame a esta función miembro para determinar el nombre de la base de datos de este conjunto de registros.

virtual CString GetDefaultDBName();

Valor devuelto

Un CString que contiene la ruta de acceso y el nombre de la base de datos de la que se deriva este conjunto de registros.

Comentarios

Si se crea un conjunto de registros sin un puntero a una base de datos CDaoDatabase, el conjunto de registros usa esta ruta de acceso para abrir la base de datos predeterminada. De forma predeterminada, esta función devuelve una cadena vacía. Cuando ClassWizard deriva un nuevo conjunto de registros de CDaoRecordset, creará esta función automáticamente.

En el ejemplo siguiente se muestra el uso de la barra diagonal inversa doble (\\) en la cadena, tal como es necesario para que la cadena se interprete correctamente.

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset::GetDefaultSQL

El marco llama a esta función miembro para obtener la instrucción SQL predeterminada en la que se basa el conjunto de registros.

virtual CString GetDefaultSQL();

Valor devuelto

Un valor de tipo CString que contiene la instrucción SQL predeterminada.

Comentarios

Puede ser un nombre de tabla o una instrucción SELECT SQL.

La instrucción SQL predeterminada se define indirectamente mediante la declaración de la clase recordset con ClassWizard y ClassWizard realiza esta tarea por usted.

Si pasa una cadena SQL nula a Open, se llama a esta función para determinar el nombre de la tabla o SQL para el conjunto de registros.

CDaoRecordset::GetEditMode

Llame a esta función miembro para determinar el estado de edición, que es uno de los siguientes valores:

short GetEditMode();

Valor devuelto

Devuelve un valor que indica el estado de edición del registro actual.

Comentarios

Valor Descripción
dbEditNone No hay ninguna operación de edición en curso.
dbEditInProgress Edit se ha llamado a .
dbEditAdd AddNew se ha llamado a .

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

CDaoRecordset::GetFieldCount

Llame a esta función miembro para recuperar el número de campos (columnas) definidos en el conjunto de registros.

short GetFieldCount();

Valor devuelto

El número de campos del conjunto de registros.

Comentarios

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

CDaoRecordset::GetFieldInfo

Llame a esta función miembro para obtener información sobre los campos de un conjunto de registros.

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parámetros

nIndex
Índice de base cero del campo predefinido en la colección Fields del conjunto de registros, para la búsqueda por índice.

fieldinfo
Una referencia a una estructura CDaoFieldInfo.

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: Para obtener el mejor rendimiento, recupere solo el nivel de información que necesita:

  • AFX_DAO_PRIMARY_INFO (Valor predeterminado) Nombre, Tipo, Tamaño, Atributos

  • AFX_DAO_SECONDARY_INFO Información principal más: Posición ordinal, Requerida, Permitir longitud cero, Orden de intercalación, Nombre externo, Campo de origen, Tabla de origen

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

lpszName
Nombre del campo.

Comentarios

Una versión de la función permite buscar un campo por índice. La otra versión permite buscar un campo por nombre.

Para obtener una descripción de la información devuelta, vea la estructura CDaoFieldInfo. 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.

Para obtener más información, vea el tema sobre la propiedad Attributes en la Ayuda de DAO.

CDaoRecordset::GetFieldValue

Llame a esta función miembro para recuperar datos de un conjunto de registros.

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

Parámetros

lpszName
Puntero a una cadena que contiene el nombre de un campo.

varValue
Referencia a un objeto COleVariant que almacenará el valor de un campo.

nIndex
Índice de base cero del campo de la colección Fields del conjunto de registros para la búsqueda por índice.

Valor devuelto

Las dos versiones de GetFieldValue que devuelven un valor devuelven un objeto COleVariant que contiene el valor de un campo.

Comentarios

Puede buscar un campo por nombre o por posición ordinal.

Nota:

Es más eficaz llamar a una de las versiones de esta función miembro que toma una referencia de objeto COleVariant como parámetro, en lugar de llamar a una versión que devuelve un objeto COleVariant. Las últimas versiones de esta función se mantienen por motivos de compatibilidad con versiones anteriores.

Use GetFieldValue y SetFieldValue para enlazar dinámicamente campos en tiempo de ejecución en lugar de enlazar columnas estáticamente mediante el mecanismo DoFieldExchange.

GetFieldValue y DoFieldExchange el mecanismo se pueden combinar para mejorar el rendimiento. Por ejemplo, use GetFieldValue para recuperar un valor que solo necesita a petición y asignar esa llamada a un botón "Más información" en la interfaz.

Para obtener información relacionada, vea los temas "Field Object" y "Value Property" en la Ayuda de DAO.

CDaoRecordset::GetIndexCount

Llame a esta función miembro para determinar el número de índices disponibles en el conjunto de registros de tipo tabla.

short GetIndexCount();

Valor devuelto

Número de índices del conjunto de registros de tipo tabla.

Comentarios

GetIndexCount es útil para recorrer en bucle todos los índices del conjunto de registros. Para ello, use GetIndexCount junto con GetIndexInfo. Si llama a esta función miembro en conjuntos de registros de tipo dynaset o snapshot-type, MFC produce una excepción.

Para obtener más información, vea el tema sobre la propiedad Attributes en la Ayuda de DAO.

CDaoRecordset::GetIndexInfo

Llame a esta función miembro para obtener varios tipos de información sobre un índice definido en la tabla base subyacente a un conjunto de registros.

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parámetros

nIndex
Índice de base cero de la colección Indexes de la tabla, para la búsqueda por posición numérica.

indexinfo
Referencia a una estructura CDaoIndexInfo.

dwInfoOptions
Opciones que especifican qué información sobre el índice se va a recuperar. Las opciones disponibles se enumeran aquí junto con lo que hacen que devuelva la función: Para obtener el mejor rendimiento, recupere solo el nivel de información que necesita:

  • AFX_DAO_PRIMARY_INFO Nombre (predeterminado), Información de campo, Campos

  • AFX_DAO_SECONDARY_INFO Información principal más: Principal, Única, Agrupada, Omitir valores null, Requerida, Externa

  • AFX_DAO_ALL_INFO Información principal y secundaria más: Recuento de valores únicos

lpszName
Puntero al nombre del objeto de índice, para la búsqueda por nombre.

Comentarios

Una versión de la función permite buscar un índice por su posición en la colección. La otra versión permite buscar un índice por nombre.

Para obtener una descripción de la información devuelta, vea la estructura CDaoIndexInfo. 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.

Para obtener más información, vea el tema sobre la propiedad Attributes en la Ayuda de DAO.

CDaoRecordset::GetLastModifiedBookmark

Llame a esta función miembro para recuperar el marcador del registro agregado o actualizado más recientemente.

COleVariant GetLastModifiedBookmark();

Valor devuelto

Un COleVariant que contiene un marcador que indica el registro agregado o cambiado más recientemente.

Comentarios

Cuando se crea o abre un objeto recordset, cada uno de sus registros ya tiene un marcador único si los admite. Llame a GetBookmark para determinar si el conjunto de registros admite marcadores. Si el conjunto de registros no admite marcadores, se produce una excepción CDaoException.

Al agregar un registro, aparece al final del conjunto de registros y no es el registro actual. Para que el nuevo registro sea actual, llame a GetLastModifiedBookmark y, a continuación, llame a SetBookmark para volver al registro recién agregado.

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

CDaoRecordset::GetLockingMode

Llame a esta función miembro para determinar el tipo de bloqueo en vigor para el conjunto de registros.

BOOL GetLockingMode();

Valor devuelto

Distinto de cero si el tipo de bloqueo es pesimista; de lo contrario, 0 para el bloqueo de registros optimista.

Comentarios

Cuando el bloqueo pesimista está en vigor, la página de datos que contiene el registro que está editando se bloquea en cuanto se llama a la función miembro Edit. La página se desbloquea cuando se llama a la función miembro Update o Close o a cualquiera de las operaciones Move o Find.

Cuando el bloqueo optimista está en vigor, la página de datos que contiene el registro solo se bloquea mientras el registro se actualiza con la función miembro Update.

Al trabajar con orígenes de datos ODBC, el modo de bloqueo siempre es optimista.

Para obtener información relacionada, vea los temas "LockEdits Property" y "Locking Behavior in Multiuser Applications" (Comportamiento de bloqueo en aplicaciones multiusuario) en la Ayuda de DAO.

CDaoRecordset::GetName

Llame a esta función miembro para recuperar el nombre del conjunto de registros.

CString GetName();

Valor devuelto

Un CString que contiene el nombre del conjunto de registros.

Comentarios

El nombre del conjunto de registros 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.

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

CDaoRecordset::GetParamValue

Llame a esta función miembro para recuperar el valor actual del parámetro especificado almacenado en el objeto DAOParameter subyacente.

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

Parámetros

nIndex
Posición numérica del parámetro en el objeto DAOParameter subyacente.

lpszName
El nombre del parámetro cuyos valores quiere.

Valor devuelto

Objeto de la clase COleVariant que contiene el valor del parámetro.

Comentarios

Puede acceder al parámetro por nombre o por su posición numérica en la colección.

Para obtener información relacionada, vea el tema "Objeto Parameter" en la Ayuda de DAO.

CDaoRecordset::GetPercentPosition

Al trabajar con un conjunto de registros de tipo dynaset o snapshot-type, si llama a GetPercentPosition antes de rellenar completamente el conjunto de registros, la cantidad de movimiento es relativa al número de registros a los que se accede como se indica mediante una llamada a GetRecordCount.

float GetPercentPosition();

Valor devuelto

Número comprendido entre 0 y 100 que indica la ubicación aproximada del registro actual en el objeto recordset basándose en un porcentaje de los registros del conjunto de registros.

Comentarios

Puede pasar al último registro llamando a MoveLast para completar el rellenado de todos los conjuntos de registros, pero esto puede tardar mucho tiempo.

Puede llamar a GetPercentPosition en los tres tipos de objetos de conjunto de registros, incluidas las tablas sin índices. Sin embargo, no se puede llamar a GetPercentPosition en instantáneas de desplazamiento de solo avance o en un conjunto de registros abierto desde una consulta de paso a través en una base de datos externa. Si no hay ningún registro actual o se ha eliminado el registro actual, se produce una excepción CDaoException.

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

CDaoRecordset::GetRecordCount

Llame a esta función miembro para averiguar cuántos registros de un conjunto de registros se ha accedido.

long GetRecordCount();

Valor devuelto

Devuelve el número de registros a los que se accede en un objeto recordset.

Comentarios

GetRecordCount no indica cuántos registros están contenidos en un conjunto de registros de tipo dynaset o de tipo instantánea hasta que se haya accedido a todos los registros. Esta llamada de función miembro puede tardar un tiempo considerable en completarse.

Una vez que se haya accedido al último registro, el valor devuelto indica el número total de registros no eliminados en el conjunto de registros. Para forzar que se acceda al último registro, llame a la función miembro MoveLast o FindLast para el conjunto de registros. También puede usar un recuento de SQL para determinar el número aproximado de registros que devolverá la consulta.

A medida que la aplicación elimina los registros de un conjunto de registros de tipo dynaset, el valor devuelto de GetRecordCount disminuye. Sin embargo, los registros eliminados por otros usuarios no se reflejan por GetRecordCount hasta que el registro actual se coloca en un registro eliminado. Si ejecuta una transacción que afecta al recuento de registros y, posteriormente, revierte la transacción, GetRecordCount no reflejará el número real de registros restantes.

El valor de GetRecordCount de un conjunto de registros de tipo instantánea no se ve afectado por los cambios en las tablas subyacentes.

El valor de GetRecordCount de un conjunto de registros de tipo tabla refleja el número aproximado de registros de la tabla y se ve afectado inmediatamente a medida que se agregan y eliminan los registros de tabla.

Un conjunto de registros sin registros devuelve un valor de 0. Cuando se trabaja con tablas adjuntas o bases de datos ODBC, GetRecordCount siempre devuelve -1. Al llamar a la función miembro Requery en un conjunto de registros, se restablece el valor de GetRecordCount igual que si se reejecutó la consulta.

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

CDaoRecordset::GetSQL

Llame a esta función miembro para obtener la instrucción SQL que se usó para seleccionar los registros del conjunto de registros cuando se abrió.

CString GetSQL() const;

Valor devuelto

Un CString que contiene la instrucción SQL.

Comentarios

Por lo general, se trata de una instrucción SELECT de SQL.

La cadena devuelta por GetSQL suele ser diferente de cualquier cadena que se haya pasado al conjunto de registros del parámetro lpszSQL a la función miembro Open. Esto se debe a que el conjunto de registros construye una instrucción SQL completa basada en lo que pasó a Open, lo que especificó con ClassWizard y lo que puede haber especificado en los miembros de datos m_strFilter y m_strSort.

Nota:

Llame a esta función miembro solo después de llamar a Open.

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

CDaoRecordset::GetType

Llame a esta función miembro después de abrir el conjunto de registros para determinar el tipo del objeto recordset.

short GetType();

Valor devuelto

Uno de los valores siguientes que indica el tipo de un conjunto de registros:

  • dbOpenTable Conjunto de registros de tipo tabla

  • dbOpenDynaset Conjunto de registros de tipo Dynaset

  • dbOpenSnapshot Conjunto de registros de tipo instantánea

Comentarios

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

CDaoRecordset::GetValidationRule

Llame a esta función miembro para determinar la regla usada para validar los datos.

CString GetValidationRule();

Valor devuelto

Un CString que contiene un valor que valida los datos de un campo cuando cambia o se agrega a una tabla.

Comentarios

Esta regla se basa en texto y se aplica cada vez que se cambia la tabla subyacente. Si los datos no son legales, MFC produce una excepción. El mensaje de error devuelto es el texto de la propiedad ValidationText del objeto de campo subyacente, si se especifica, o el texto de la expresión especificada por la propiedad ValidationRule del objeto de campo subyacente. Puede llamar a GetValidationText para obtener el texto del mensaje de error.

Por ejemplo, un campo de un registro que requiere el día del mes podría tener una regla de validación como "DAY BETWEEN 1 AND 31".

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

CDaoRecordset::GetValidationText

Llame a esta función miembro para recuperar el texto de la propiedad ValidationText del objeto de campo subyacente.

CString GetValidationText();

Valor devuelto

Un CString que contiene el texto del mensaje que se muestra si el valor de un campo no satisface la regla de validación del objeto de campo subyacente.

Comentarios

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

CDaoRecordset::IsBOF

Llame a esta función miembro antes de desplazarse de un registro a otro para saber si ha ido antes del primer registro del conjunto de registros.

BOOL IsBOF() const;

Valor devuelto

Un valor distinto de cero si el conjunto de registros no contiene registros o si el usuario se ha desplazado de vuelta antes del primer registro; de lo contrario, 0.

Comentarios

También se puede llamar a IsBOF junto con IsEOF para determinar si el conjunto de registros contiene registros o si está vacío. Inmediatamente después de llamar a Open, si el conjunto de registros no contiene registros, IsBOF devuelve un valor distinto de cero. Cuando se abre un conjunto de registros que tiene al menos un registro, el primer registro es el registro actual y IsBOF devuelve 0.

Si el primer registro es el registro actual y llama a MovePrev, IsBOF devolverá posteriormente un valor distinto de cero. Si IsBOF devuelve un valor distinto de cero y se llama a MovePrev, se produce una excepción. Si IsBOF devuelve un valor distinto de cero, el registro actual no está definido, y cualquier acción que requiera un registro actual producirá una excepción.

Efecto de métodos específicos en las configuraciones IsBOF y IsEOF:

  • La llamada a Open* internamente hace que el primer registro del conjunto de registros sea el registro actual llamando a MoveFirst. Por lo tanto, llamar a Open en un conjunto vacío de registros hace que IsBOF y IsEOF devuelva un valor distinto de cero. (Consulte la tabla siguiente para conocer el comportamiento de una llamada MoveFirst o MoveLast con errores).

  • Todas las operaciones move que localizan correctamente un registro provocan que IsBOF y IsEOF devuelvan 0.

  • Una llamada AddNew seguida de una llamada Update que inserta correctamente un nuevo registro hará que IsBOF devuelva 0, pero solo si IsEOF ya no es cero. El estado de IsEOF siempre permanecerá sin cambios. Tal y como se define en el motor de base de datos de Microsoft Jet, el puntero de registro actual de un conjunto de registros vacío se encuentra al final de un archivo, por lo que cualquier registro nuevo se inserta después del registro actual.

  • Cualquier llamada a Delete, incluso si quita el único registro restante de un conjunto de registros, no cambiará el valor de IsBOF o IsEOF.

En esta tabla se muestra qué operaciones de movimiento se permiten con diferentes combinaciones de IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=nonzero,

IsEOF=0
Permitidas Excepción Excepción Permitidas
IsBOF=0,

IsEOF=nonzero
Permitido Permitido Excepción Excepción
Ambos valores distintos de cero Excepción Excepción Excepción Excepción
Ambos 0 Permitido Permitida Permitida Permitido

Permitir una operación Move no significa que la operación busque correctamente un registro. Simplemente indica que se permite un intento de realizar la operación Move especificada y no generará una excepción. El valor de las funciones miembro IsBOF y IsEOF puede cambiar como resultado del movimiento intentado.

El efecto de las operaciones Move que no localizan un registro en el valor de la configuración IsBOF y IsEOF se muestra en la siguiente tabla.

Operations IsBOF IsEOF
MoveFirst, MoveLast Distinto a cero Distinto a cero
Move 0 Sin cambios Sin cambios
MovePrev, Move< 0 Distinto a cero Sin cambios
MoveNext, Move> 0 Sin cambios Distinto a cero

Para obtener información relacionada, vea el tema sobre las propiedades BOF, EOF en la Ayuda de DAO.

CDaoRecordset::IsDeleted

Llame a esta función miembro para determinar si se ha eliminado el registro actual.

BOOL IsDeleted() const;

Valor devuelto

Un valor distinto de cero si el conjunto de registros se coloca en un registro eliminado; de lo contrario, 0.

Comentarios

Si se desplaza a un registro y IsDeleted devuelve TRUE (un valor distinto de cero), deberá desplazarse a otro registro para poder realizar cualquier otra operación de conjunto de registros.

Nota:

No es necesario comprobar el estado eliminado de los registros en un conjunto de registros de tipo de tabla o instantánea. Dado que los registros no se pueden eliminar de una instantánea, no es necesario llamar a IsDeleted. En el caso de los conjuntos de registros de tipo tabla, los registros eliminados se quitan realmente del conjunto de registros. Una vez eliminado un registro, ya sea por usted, otro usuario o en otro conjunto de registros, no puede desplazarse hacia atrás a ese registro. Por lo tanto, no es necesario llamar a IsDeleted.

Cuando se elimina un registro de un conjunto dinámico, se quita del conjunto de registros y no se puede desplazar de nuevo a ese registro. Sin embargo, si otro usuario elimina un registro de un conjunto de registros o en otro conjunto de registros basado en la misma tabla, IsDeleted devolverá TRUE cuando se desplace más adelante a ese registro.

Para obtener información relacionada, vea los temas "Delete Method", "LastModified Property" y "EditMode Property" en la Ayuda de DAO.

CDaoRecordset::IsEOF

Llame a esta función miembro a medida que se desplaza de un registro a otro para saber si ha ido más allá del último registro del conjunto de registros.

BOOL IsEOF() const;

Valor devuelto

Un valor distinto de cero si el conjunto de registros no contiene registros o si el usuario se ha desplazado más allá del último registro; de lo contrario, 0.

Comentarios

También se puede llamar a IsEOF para determinar si el conjunto de registros contiene registros o si está vacío. Inmediatamente después de llamar a Open, si el conjunto de registros no contiene registros, IsEOF devuelve un valor distinto de cero. Cuando se abre un conjunto de registros que tiene al menos un registro, el primer registro es el registro actual y IsEOF devuelve 0.

Si el último registro es el registro actual cuando se llama a MoveNext, IsEOF devolverá posteriormente un valor distinto de cero. Si IsEOF devuelve un valor distinto de cero y se llama a MoveNext, se produce una excepción. Si IsEOF devuelve un valor distinto de cero, el registro actual no está definido, y cualquier acción que requiera un registro actual producirá una excepción.

Efecto de métodos específicos en las configuraciones IsBOF y IsEOF:

  • La llamada a Open internamente hace que el primer registro del conjunto de registros sea el registro actual llamando a MoveFirst. Por lo tanto, llamar a Open en un conjunto vacío de registros hace que IsBOF y IsEOF devuelva un valor distinto de cero. (Consulte la tabla siguiente para conocer el comportamiento de una llamada MoveFirst con errores).

  • Todas las operaciones move que localizan correctamente un registro provocan que IsBOF y IsEOF devuelvan 0.

  • Una llamada AddNew seguida de una llamada Update que inserta correctamente un nuevo registro hará que IsBOF devuelva 0, pero solo si IsEOF ya no es cero. El estado de IsEOF siempre permanecerá sin cambios. Tal y como se define en el motor de base de datos de Microsoft Jet, el puntero de registro actual de un conjunto de registros vacío se encuentra al final de un archivo, por lo que cualquier registro nuevo se inserta después del registro actual.

  • Cualquier llamada a Delete, incluso si quita el único registro restante de un conjunto de registros, no cambiará el valor de IsBOF o IsEOF.

En esta tabla se muestra qué operaciones de movimiento se permiten con diferentes combinaciones de IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Move < 0
Move 0 MoveNext,

Move > 0
IsBOF=nonzero,

IsEOF=0
Permitidas Excepción Excepción Permitidas
IsBOF=0,

IsEOF=nonzero
Permitido Permitido Excepción Excepción
Ambos valores distintos de cero Excepción Excepción Excepción Excepción
Ambos 0 Permitido Permitida Permitida Permitido

Permitir una operación Move no significa que la operación busque correctamente un registro. Simplemente indica que se permite un intento de realizar la operación Move especificada y no generará una excepción. El valor de las funciones miembro IsBOF y IsEOF puede cambiar como resultado de Move intentado.

El efecto de las operaciones Move que no localizan un registro en el valor de la configuración IsBOF y IsEOF se muestra en la siguiente tabla.

Operations IsBOF IsEOF
MoveFirst, MoveLast Distinto a cero Distinto a cero
Move 0 Sin cambios Sin cambios
MovePrev, Move< 0 Distinto a cero Sin cambios
MoveNext, Move> 0 Sin cambios Distinto a cero

Para obtener información relacionada, vea el tema sobre las propiedades BOF, EOF en la Ayuda de DAO.

CDaoRecordset::IsFieldDirty

Llame a esta función miembro para determinar si el miembro de datos de campo especificado de un conjunto dinámico se ha marcado como "dirty" (modificado).

BOOL IsFieldDirty(void* pv);

Parámetros

pv
Puntero al miembro de datos de campo cuyo estado desea comprobar, o NULL para determinar si alguno de los campos tiene modificaciones.

Valor devuelto

Un valor distinto de cero si el miembro de datos de campo especificado se marca como dirty; de lo contrario, 0.

Comentarios

Los datos de todos los miembros de datos de campos con modificaciones se transferirán al registro en el origen de datos cuando el registro actual se actualice mediante una llamada a la función miembro Update de CDaoRecordset (después de una llamada a Edit o a AddNew). Con este conocimiento, puede realizar más pasos, como desmarcar el miembro de datos de campo para marcar la columna, por lo que no se escribirá en el origen de datos.

IsFieldDirty se implementa a través de DoFieldExchange.

CDaoRecordset::IsFieldNull

Llame a esta función miembro para determinar si el miembro de datos de campo especificado de un conjunto de registros se ha marcado como NULL

BOOL IsFieldNull(void* pv);

Parámetros

pv
Puntero al miembro de datos de campo cuyo estado desea comprobar, o NULL para determinar si alguno de los campos son NULL.

Valor devuelto

Un valor distinto de cero si el miembro de datos de campo especificado se marca como NULL; de lo contrario, 0.

Comentarios

(En la terminología de la base de datos, Null significa "sin valor" y no es igual que NULL en C++). Si un miembro de datos de campo se marca como Null, se interpreta como una columna del registro actual para el que no hay ningún valor.

Nota:

En determinadas situaciones, el uso de IsFieldNull puede ser ineficaz, como se muestra en el ejemplo de código siguiente:

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

Nota:

Si usa el enlace de registros dinámicos, sin derivar de CDaoRecordset, asegúrese de usar VT_NULL como se muestra en el ejemplo.

CDaoRecordset::IsFieldNullable

Llame a esta función miembro para determinar si el miembro de datos de campo especificado "acepta valores NULL" (es decir, se puede establecer en un valor NULL; en C++, NULL no es lo mismo que NULL en la terminología de bases de datos, que significa "sin valor").

BOOL IsFieldNullable(void* pv);

Parámetros

pv
Puntero al miembro de datos de campo cuyo estado desea comprobar, o NULL para determinar si alguno de los campos son NULL.

Valor devuelto

Distinto de cero si el miembro de datos de campo especificado se puede hacer Null; de lo contrario, 0.

Comentarios

Un campo que no puede ser NULL debe tener un valor. Si intenta establecer un campo de este tipo en NULL al agregar o actualizar un registro, el origen de datos rechaza la adición o actualización y Update producirá una excepción. La excepción se produce cuando se llama a Update, no cuando se llama a SetFieldNull.

CDaoRecordset::IsOpen

Llame a esta función miembro para determinar si el conjunto de registros está abierto.

BOOL IsOpen() const;

Valor devuelto

Un valor distinto de cero si se ha llamado previamente a la función miembro Open o Requery del objeto de conjunto de registros y el conjunto de registros no se ha cerrado; de lo contrario, 0.

Comentarios

CDaoRecordset::m_bCheckCacheForDirtyFields

Contiene una marca que indica si los campos almacenados en caché se marcan automáticamente como modificados (modificados) y Null.

Comentarios

El valor predeterminado de la marca es TRUE. La configuración de este miembro de datos controla todo el mecanismo de almacenamiento en búfer doble. Si establece la marca en TRUE, puede desactivar el almacenamiento en caché por campo mediante el mecanismo DFX. Si establece la marca en FALSE, debe llamar a SetFieldDirty y SetFieldNull.

Establezca este miembro de datos antes de llamar a Open. Este mecanismo es principalmente para facilitar el uso. El rendimiento puede ser más lento debido al almacenamiento en búfer doble de campos a medida que se realizan cambios.

CDaoRecordset::m_nFields

Contiene el número de miembros de datos de campo de la clase del conjunto de registros y el número de columnas que el conjunto de registros ha seleccionado en el origen de datos.

Comentarios

El constructor de la clase recordset debe inicializarse m_nFields con el número correcto de campos enlazados estáticamente. ClassWizard escribe esta inicialización cuando se usa para declarar la clase de conjunto de registros. También se puede escribir manualmente.

El marco usa este número para administrar la interacción entre los miembros de datos de campo y las columnas correspondientes del registro actual en el origen de datos.

Nota:

Este número debe corresponder al número de columnas de salida registradas en DoFieldExchange después de una llamada a SetFieldType con el parámetro CDaoFieldExchange::outputColumn.

Puede enlazar columnas dinámicamente mediante CDaoRecordset::GetFieldValue y CDaoRecordset::SetFieldValue. Si lo hace, no es necesario incrementar el recuento en m_nFields para reflejar el número de llamadas de función DFX en la función miembro DoFieldExchange.

CDaoRecordset::m_nParams

Contiene el número de miembros de datos de parámetros en la clase de conjunto de registros: el número de parámetros pasados con la consulta del conjunto de registros.

Comentarios

Si la clase de conjunto de registros tiene miembros de datos de parámetros, el constructor de la clase debe inicializar m_nParams con el número correcto. El valor predeterminado de m_nParams es 0. Si agrega miembros de datos de parámetros, que debe hacer manualmente, también debe agregar manualmente una inicialización en el constructor de clase para reflejar el número de parámetros (que deben ser al menos tan grandes como el número de marcadores de posición en la cadena de m_strFilter o m_strSort).

El marco usa este número cuando parametriza la consulta del conjunto de registros.

Nota:

Este número debe corresponder al número de "parámetros" registrados en DoFieldExchange después de una llamada a SetFieldType con el parámetro CFieldExchange::param.

Para obtener información relacionada, vea el tema "Objeto Parameter" en la Ayuda de DAO.

CDaoRecordset::m_pDAORecordset

Contiene un puntero a la interfaz OLE del objeto recordset DAO subyacente al objeto CDaoRecordset.

Comentarios

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

Para obtener información relacionada, vea el tema "Objeto Recordset" en la Ayuda de DAO.

CDaoRecordset::m_pDatabase

Contiene un puntero al objeto CDaoDatabase a través del cual el conjunto de registros está conectado a un origen de datos.

Comentarios

Esta variable se establece de dos formas. Normalmente, se pasa un puntero a un objeto CDaoDatabase ya abierto al construir el objeto de conjunto de registros. Si se pasa NULL en su lugar, CDaoRecordset crea un objeto CDaoDatabase automáticamente y lo abre. En cualquier caso, CDaoRecordset almacena el puntero en esta variable.

Por lo general, no es necesario usar directamente el puntero almacenado en m_pDatabase. Sin embargo, si escribe sus propias extensiones en CDaoRecordset, puede que tenga que usarlo. Por ejemplo, es posible que necesite el puntero si inicia sus propias excepciones CDaoException.

Para obtener información relacionada, vea el tema "Objeto Database" en la Ayuda de DAO.

CDaoRecordset::m_strFilter

Contiene una cadena que se usa para construir la cláusula WHERE de una instrucción SQL.

Comentarios

No incluye la palabra reservada WHERE para filtrar el conjunto de registros. El uso de este miembro de datos no es aplicable a los conjuntos de registros de tipo tabla. El uso de m_strFilter no tiene ningún efecto al abrir un conjunto de registros mediante un puntero CDaoQueryDef.

Use el formato de fecha de EE. UU. (mes-día-año) cuando filtre los campos que contienen fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Jet; De lo contrario, es posible que los datos no se filtren como espera.

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

CDaoRecordset::m_strSort

Contiene una cadena que contiene la cláusula ORDERBY de una instrucción SQL sin las palabras reservadas ORDERBY.

Comentarios

Puede ordenar en objetos de conjunto de registros de tipo dynaset e instantánea.

No se pueden ordenar objetos de conjunto de registros de tipo tabla. Para determinar el criterio de ordenación de un conjunto de registros de tipo tabla, llame a SetCurrentIndex.

El uso de m_strSort no tiene ningún efecto al abrir un conjunto de registros mediante un puntero CDaoQueryDef.

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

CDaoRecordset::Move

Llame a esta función miembro para colocar los registros lRows del conjunto de registros del registro actual.

virtual void Move(long lRows);

Parámetros

lRows
Número de registros que se van a mover hacia delante o hacia atrás. Los valores positivos mueven hacia delante, hacia el final del conjunto de registros Los valores negativos se mueven hacia atrás, hacia el principio.

Comentarios

Puede avanzar o retroceder. Move( 1 ) es equivalente a MoveNext y Move( -1 ) equivalente a MovePrev.

Precaución

Al llamar a cualquiera de las funciones Move, se produce una excepción si el conjunto de registros no tiene registros. En general, llame a IsBOF y IsEOF antes de una operación Move para determinar si el conjunto de registros tiene registros. Después de llamar a Open o Requery, llame a IsBOF o IsEOF.

Nota:

Si se ha desplazado más allá del principio o final del conjunto de registros (IsBOF o IsEOF devuelve un valor distinto de cero), una llamada a Move produce un CDaoException.

Nota:

Si llama a cualquiera de las funciones Move mientras el registro actual se actualiza o se agrega, las actualizaciones se pierden sin previo aviso.

Cuando se llama a Move en una instantánea de desplazamiento de solo avance, el parámetro lRows debe ser un entero positivo y no se permiten marcadores, por lo que solo puede avanzar.

Para convertir el primer registro, último, siguiente o anterior en un conjunto de registros, llame a la función miembro MoveFirst, MoveLast, MoveNexto MovePrev.

Para obtener información relacionada, vea los temas "Move Method" y "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" en la Ayuda de DAO.

CDaoRecordset::MoveFirst

Llame a esta función miembro para convertir el primer registro en el conjunto de registros (si existe) el registro actual.

void MoveFirst();

Comentarios

No es necesario llamar a MoveFirst inmediatamente después de abrir el conjunto de registros. En ese momento, el primer registro (si existe) es automáticamente el registro actual.

Precaución

Al llamar a cualquiera de las funciones Move, se produce una excepción si el conjunto de registros no tiene registros. En general, llame a IsBOF y IsEOF antes de una operación Move para determinar si el conjunto de registros tiene registros. Después de llamar a Open o Requery, llame a IsBOF o IsEOF.

Nota:

Si llama a cualquiera de las funciones Move mientras el registro actual se actualiza o se agrega, las actualizaciones se pierden sin previo aviso.

Use las funciones Move para pasar de registro a registro sin aplicar una condición. Use las operaciones Find para buscar registros en un objeto recordset de tipo dynaset o snapshot-type que cumplan una condición determinada. Para buscar un registro en un objeto recordset de tipo tabla, llame a Seek.

Si el conjunto de registros hace referencia a un conjunto de registros de tipo tabla, el movimiento sigue el índice actual de la tabla. Puede establecer el índice actual mediante la propiedad Index del objeto DAO subyacente. Si no establece el índice actual, el orden de los registros devueltos no está definido.

Si llama a MoveLast en un objeto de conjunto de registros basado en una consulta SQL o una definición de consulta, la consulta se ve obligada a completarse y el objeto del conjunto de registros se rellena por completo.

No se puede llamar a la función miembro MoveFirst o MovePrev con una instantánea de desplazamiento de solo avance.

Para mover la posición del registro actual en un objeto recordset un número específico de registros hacia delante o hacia atrás, llame a Move.

Para obtener información relacionada, vea los temas "Move Method" y "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" en la Ayuda de DAO.

CDaoRecordset::MoveLast

Llame a esta función miembro para convertir el último registro (si existe) en el conjunto de registros del registro actual.

void MoveLast();

Comentarios

Precaución

Al llamar a cualquiera de las funciones Move, se produce una excepción si el conjunto de registros no tiene registros. En general, llame a IsBOF y IsEOF antes de una operación Move para determinar si el conjunto de registros tiene registros. Después de llamar a Open o Requery, llame a IsBOF o IsEOF.

Nota:

Si llama a cualquiera de las funciones Move mientras el registro actual se actualiza o se agrega, las actualizaciones se pierden sin previo aviso.

Use las funciones Move para pasar de registro a registro sin aplicar una condición. Use las operaciones Find para buscar registros en un objeto recordset de tipo dynaset o snapshot-type que cumplan una condición determinada. Para buscar un registro en un objeto recordset de tipo tabla, llame a Seek.

Si el conjunto de registros hace referencia a un conjunto de registros de tipo tabla, el movimiento sigue el índice actual de la tabla. Puede establecer el índice actual mediante la propiedad Index del objeto DAO subyacente. Si no establece el índice actual, el orden de los registros devueltos no está definido.

Si llama a MoveLast en un objeto de conjunto de registros basado en una consulta SQL o una definición de consulta, la consulta se ve obligada a completarse y el objeto del conjunto de registros se rellena por completo.

Para mover la posición del registro actual en un objeto recordset un número específico de registros hacia delante o hacia atrás, llame a Move.

Para obtener información relacionada, vea los temas "Move Method" y "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" en la Ayuda de DAO.

CDaoRecordset::MoveNext

Llame a esta función miembro para que el siguiente registro del conjunto de registros sea el registro actual.

void MoveNext();

Comentarios

Se recomienda llamar a IsBOF antes de intentar pasar al registro anterior. Una llamada a MovePrev producirá un CDaoException si IsBOF devuelve un valor distinto de cero, lo que indica que ya se ha desplazado antes del primer registro o que el conjunto de registros no seleccionó ningún registro.

Precaución

Al llamar a cualquiera de las funciones Move, se produce una excepción si el conjunto de registros no tiene registros. En general, llame a IsBOF y IsEOF antes de una operación Move para determinar si el conjunto de registros tiene registros. Después de llamar a Open o Requery, llame a IsBOF o IsEOF.

Nota:

Si llama a cualquiera de las funciones Move mientras el registro actual se actualiza o se agrega, las actualizaciones se pierden sin previo aviso.

Use las funciones Move para pasar de registro a registro sin aplicar una condición. Use las operaciones Find para buscar registros en un objeto recordset de tipo dynaset o snapshot-type que cumplan una condición determinada. Para buscar un registro en un objeto recordset de tipo tabla, llame a Seek.

Si el conjunto de registros hace referencia a un conjunto de registros de tipo tabla, el movimiento sigue el índice actual de la tabla. Puede establecer el índice actual mediante la propiedad Index del objeto DAO subyacente. Si no establece el índice actual, el orden de los registros devueltos no está definido.

Para mover la posición del registro actual en un objeto recordset un número específico de registros hacia delante o hacia atrás, llame a Move.

Para obtener información relacionada, vea los temas "Move Method" y "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" en la Ayuda de DAO.

CDaoRecordset::MovePrev

Llame a esta función miembro para que el siguiente registro del conjunto de registros sea el registro actual.

void MovePrev();

Comentarios

Se recomienda llamar a IsBOF antes de intentar pasar al registro anterior. Una llamada a MovePrev producirá un CDaoException si IsBOF devuelve un valor distinto de cero, lo que indica que ya se ha desplazado antes del primer registro o que el conjunto de registros no seleccionó ningún registro.

Precaución

Al llamar a cualquiera de las funciones Move, se produce una excepción si el conjunto de registros no tiene registros. En general, llame a IsBOF y IsEOF antes de una operación Move para determinar si el conjunto de registros tiene registros. Después de llamar a Open o Requery, llame a IsBOF o IsEOF.

Nota:

Si llama a cualquiera de las funciones Move mientras el registro actual se actualiza o se agrega, las actualizaciones se pierden sin previo aviso.

Use las funciones Move para pasar de registro a registro sin aplicar una condición. Use las operaciones Find para buscar registros en un objeto recordset de tipo dynaset o snapshot-type que cumplan una condición determinada. Para buscar un registro en un objeto recordset de tipo tabla, llame a Seek.

Si el conjunto de registros hace referencia a un conjunto de registros de tipo tabla, el movimiento sigue el índice actual de la tabla. Puede establecer el índice actual mediante la propiedad Index del objeto DAO subyacente. Si no establece el índice actual, el orden de los registros devueltos no está definido.

No se puede llamar a la función miembro MoveFirst o MovePrev con una instantánea de desplazamiento de solo avance.

Para mover la posición del registro actual en un objeto recordset un número específico de registros hacia delante o hacia atrás, llame a Move.

Para obtener información relacionada, vea los temas "Move Method" y "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" en la Ayuda de DAO.

CDaoRecordset::Open

Debe llamar a esta función miembro para recuperar los registros del conjunto de registros.

virtual void Open(
    int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    int nOptions = 0);

virtual void Open(
    CDaoTableDef* pTableDef,
    int nOpenType = dbOpenTable,
    int nOptions = 0);

virtual void Open(
    CDaoQueryDef* pQueryDef,
    int nOpenType = dbOpenDynaset,
    int nOptions = 0);

Parámetros

nOpenType
Uno de los valores siguientes:

  • dbOpenDynaset Conjunto de registros de tipo dynaset con desplazamiento bidireccional. Esta es la configuración predeterminada.

  • dbOpenTable Un conjunto de registros de tipo tabla con desplazamiento bidireccional.

  • dbOpenSnapshot Conjunto de registros de tipo instantánea con desplazamiento bidireccional.

lpszSQL
Puntero de cadena que contiene uno de los elementos siguientes:

  • Puntero NULL.

  • Nombre de una o varias definiciones de tabla o querydefs (separadas por comas).

  • Una instrucción SELECT de SQL (opcionalmente con una cláusula WHERE u ORDERBY de SQL).

  • Una consulta de paso a través.

nOptions
Una o varias de las opciones que se enumeran a continuación. El valor predeterminado es 0. Los valores posibles son los siguientes:

  • dbAppendOnly Solo puede anexar nuevos registros (solo conjunto de registros de tipo dynaset). Esta opción significa literalmente que los registros solo se pueden anexar. Las clases de base de datos ODBC de MFC tienen una opción de solo anexión que permite recuperar y anexar registros.

  • dbForwardOnly El conjunto de registros es una instantánea de desplazamiento de solo avance.

  • dbSeeChanges Genera una excepción si otro usuario está cambiando los datos que está editando.

  • dbDenyWrite Otros usuarios no pueden modificar ni agregar registros.

  • dbDenyRead Otros usuarios no pueden ver registros (solo conjunto de registros de tipo tabla).

  • dbReadOnly Solo puede ver los registros; otros usuarios pueden modificarlos.

  • dbInconsistent Se permiten actualizaciones incoherentes (solo conjunto de registros de tipo dynaset).

  • dbConsistent Se permiten actualizaciones incoherentes (solo conjunto de registros de tipo dynaset).

Nota:

Las constantes dbConsistent y dbInconsistent se excluyen mutuamente. Puede usar uno o el otro, pero no ambos en una instancia determinada de Open.

pTableDef
Un puntero a un objeto CDaoTableDef. Esta versión solo es válida para conjuntos de registros de tipo tabla. Al usar esta opción, no se usa el puntero CDaoDatabase utilizado para construir CDaoRecordset; en su lugar, se usa la base de datos en la que reside la definición de tabla.

pQueryDef
Puntero a un objeto CDaoQueryDef. Esta versión solo es válida para conjuntos de registros de tipo dynaset y de tipo instantánea. Al usar esta opción, no se usa el puntero CDaoDatabase utilizado para construir CDaoRecordset; en su lugar, se usa la base de datos en la que reside la definición de consulta.

Comentarios

Antes de llamar a Open, se debe crear el objeto de conjunto de registros. Esto se puede hacer de varias maneras:

  • Al construir el objeto recordset, pase un puntero a un objeto CDaoDatabase que ya está abierto.

  • Al construir el objeto recordset, pase un puntero a un objeto CDaoDatabase que no está abierto. El conjunto de registros abre un objeto CDaoDatabase, pero no lo cerrará cuando se cierre el objeto recordset.

  • Al construir el objeto recordset, pase un puntero NULL. El objeto recordset llama a GetDefaultDBName para obtener el nombre de Microsoft Access . Archivo MDB que se va a abrir. A continuación, el conjunto de registros abre un objeto CDaoDatabase y lo mantiene abierto siempre que el conjunto de registros esté abierto. Cuando se llama a Close en el conjunto de registros, el objeto CDaoDatabase también se cierra.

    Nota:

    Cuando el conjunto de registros abre el objeto CDaoDatabase, abre el origen de datos con acceso noclusivo.

Para la versión de Open que usa el parámetro lpszSQL, una vez abierto el conjunto de registros, puede recuperar registros de una de varias maneras. La primera opción es tener funciones DFX en su DoFieldExchange. La segunda opción consiste en usar el enlace dinámico mediante una llamada a la función miembro GetFieldValue. Estas opciones se pueden implementar por separado o en combinación. Si se combinan, tendrá que pasar la instrucción SQL usted mismo en la llamada a Open.

Cuando se usa la segunda versión de Open donde se pasa un objeto CDaoTableDef, las columnas resultantes estarán disponibles para enlazar a través de DoFieldExchange y el mecanismo DFX o enlazar dinámicamente a través de GetFieldValue.

Nota:

Solo se puede llamar a Open mediante un objeto CDaoTableDef para conjuntos de registros de tipo tabla.

Cuando se usa la segunda versión de Open donde se pasa un objeto CDaoQueryDef, las columnas resultantes estarán disponibles para enlazar a través de DoFieldExchange y el mecanismo DFX o enlazar dinámicamente a través de GetFieldValue.

Nota:

Solo se puede llamar a Open mediante un objeto CDaoQueryDef para conjuntos de registros de tipo dynaset y tipo de instantánea.

Para la primera versión de Open que usa el parámetro lpszSQL, los registros se seleccionan en función de los criterios que se muestran en la tabla siguiente.

Valor del parámetro lpszSQL Los registros seleccionados están determinados por Ejemplo
NULL La cadena devuelta por GetDefaultSQL.
Lista separada por comas de uno o varios nombres de definición de tabla o de definición de consulta. Todas las columnas representadas en DoFieldExchange. "Customer"
SELECT column-list FROM table-list Columnas especificadas de las definiciones de tabla y/o querydef especificadas. "SELECT CustId, CustName

FROM Customer"

El procedimiento habitual es pasar NULL a Open; en ese caso, Open llama a GetDefaultSQL, una función miembro reemplazable que ClassWizard genera al crear una clase derivada CDaoRecordset. Este valor proporciona los nombres tabledef o querydef especificados en ClassWizard. Se puede especificar otra información en el parámetro lpszSQL.

Independientemente del valor que se pase, Open construye una cadena SQL final para la consulta (la cadena puede tener cláusulas SQL WHERE y ORDERBY anexadas a la cadena de lpszSQL que pasó) y, a continuación, ejecuta la consulta. Para examinar la cadena construida hay que llamar a GetSQL después de llamar a Open.

Los miembros de datos de campo de la clase de conjunto de registros están enlazados a las columnas de los datos seleccionados. Si se devuelve algún registro, el primer registro se convierte en el registro actual.

Si se desea establecer opciones para el conjunto de registros, como un filtro o una ordenación, establezca m_strSort o m_strFilter después de construir el objeto de conjunto de registros, pero antes de llamar a Open. Si desea actualizar los registros del conjunto de registros una vez que este se ha abierto, llame a Requery.

Si llama a Open en un conjunto de registros de tipo dynaset o snapshot-type, o si el origen de datos hace referencia a una instrucción SQL o a una definición de tabla que representa una tabla adjunta, no puede usar dbOpenTable para el argumento type; si lo hace, MFC produce una excepción. Para determinar si un objeto tabledef representa una tabla adjunta, cree un objeto CDaoTableDef y llame a su función miembro GetConnect.

Use la marca dbSeeChanges si desea interceptar los cambios realizados por otro usuario u otro programa en el equipo al editar o eliminar el mismo registro. Por ejemplo, si dos usuarios empiezan a editar el mismo registro, el primer usuario para llamar a la función miembro Update se realiza correctamente. Cuando el segundo usuario llama a Update, se produce una excepción CDaoException. Del mismo modo, si el segundo usuario intenta llamar a Delete para eliminar el registro y ya lo ha cambiado el primer usuario, se produce una excepción CDaoException.

Normalmente, si el usuario obtiene este CDaoException durante la actualización, el código debe actualizar el contenido de los campos y recuperar los valores recién modificados. Si la excepción se produce en el proceso de eliminación, el código podría mostrar los nuevos datos de registro al usuario y un mensaje que indica que los datos han cambiado recientemente. En este momento, el código puede solicitar una confirmación de que el usuario todavía desea eliminar el registro.

Sugerencia

Use la opción de desplazamiento de solo avance (dbForwardOnly) para mejorar el rendimiento cuando la aplicación realiza un único paso a través de un conjunto de registros abierto desde un origen de datos ODBC.

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

CDaoRecordset::Requery

Llame a esta función miembro para volver a generar (actualizar) un conjunto de registros.

virtual void Requery();

Comentarios

Si se devuelve algún registro, el primer registro se convierte en el registro actual.

Para que el conjunto de registros refleje las adiciones y eliminaciones que usted u otros usuarios hayan realizado en el origen de datos, el conjunto de registros se debe recompilar mediante una llamada a Requery. Si el conjunto de registros es un conjunto de registros dinámicos, refleja automáticamente las actualizaciones (pero no las adiciones) que usted u otros usuarios hayan realizado en sus registros existentes. Si el conjunto de registros es una instantánea, se debe llamar a Requery para reflejar las modificaciones realizadas por otros usuarios, así como las adiciones y eliminaciones.

Para un conjunto dinámico o una instantánea, llame a Requery cada vez que desee recompilar el conjunto de registros mediante valores de parámetro. Establezca el nuevo filtro o ordenación estableciendo m_strFilter y m_strSort antes de llamar a Requery. Establezca nuevos parámetros asignando nuevos valores a los miembros de datos de parámetros antes de llamar a Requery.

Si se produce un error en el intento de recompilación del conjunto de registros, se cierra el conjunto de registros. Antes de llamar a Requery, puede determinar si se puede volver a consultar el conjunto de registros llamando a la función miembro CanRestart. CanRestart no garantiza que Requery se realice correctamente.

Precaución

Llame a Requery solo después de haber llamado a Open.

Nota:

La llamada a Requery cambia los marcadores DAO.

No se puede llamar a Requery en un conjunto de registros de tipo dynaset o snapshot-type si la llamada a CanRestart devuelve 0, ni se puede usar en un conjunto de registros de tipo tabla.

Si IsBOF y IsEOF devuelven un valor distinto de cero después de llamar a Requery, la consulta no devolvió ningún registro y el conjunto de registros no contendrá datos.

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

CDaoRecordset::Seek

Llame a esta función miembro para buscar el registro en un objeto recordset de tipo tabla indizado que cumpla los criterios especificados para el índice actual y convertir ese registro en el registro actual.

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

Parámetros

lpszComparison
Una de las siguientes expresiones de cadena: "<", "<=", "=", ">=", o ">".

pKey1
Puntero a un COleVariant cuyo valor corresponde al primer campo del índice. Necesario.

pKey2
Un Puntero a un COleVariant cuyo valor corresponde al segundo campo del índice, si existe. El valor predeterminado es NULL.

pKey3
Un Puntero a un COleVariant cuyo valor corresponde al tercer campo del índice, si existe. El valor predeterminado es NULL.

pKeyArray
Un puntero a una matriz de variantes. El tamaño de la matriz corresponde al número de campos del índice.

nKeys
Entero correspondiente al tamaño de la matriz, que es el número de campos del índice.

Nota:

No especifique caracteres comodín en las claves. Los caracteres comodín harán que Seek no devuelva ningún registro coincidente.

Valor devuelto

Distinto de cero si se encuentran registros coincidentes; de lo contrario, es 0.

Comentarios

Use la segunda versión (matriz) de Seek para controlar índices de cuatro campos o más.

Seek habilita la búsqueda de índices de alto rendimiento en conjuntos de registros de tipo tabla. Debe establecer el índice actual llamando a SetCurrentIndex antes de llamar a Seek. Si el índice identifica un campo o campos de clave no únicos, Seek busca el primer registro que cumpla los criterios. Si no establece un índice, se produce una excepción.

Tenga en cuenta que si no va a crear un conjunto de registros UNICODE, los objetos COleVariant deben declararse explícitamente ANSI. Esto se puede hacer mediante el formulario COleVariant::COleVariant(lpszSrc,vtSrc) de constructor con vtSrc establecido en VT_BSTRT (ANSI) o mediante la función COleVariantSetString(lpszSrc,vtSrc,vtSrc) con vtSrc establecido en VT_BSTRT.

Cuando se llama a Seek, se pasan uno o varios valores de clave y un operador de comparación ("<", "<=", "=", ">=" o ">"). Seek busca en los campos de clave especificados y busca el primer registro que satisface los criterios especificados por lpszComparison y pKey1. Una vez encontrado, Seek devuelve un valor distinto de cero y hace que ese registro sea actual. Si Seek no encuentra una coincidencia, Seek devuelve cero y el registro actual no está definido. Al usar DAO directamente, debe comprobar explícitamente la propiedad NoMatch.

Si lpszComparison es "=", ">=" o ">", Seek comienza al principio del índice. Si lpszComparison es "<" o "<=", Seek comienza al final del índice y busca hacia atrás a menos que haya entradas de índice duplicadas al final. En este caso, Seek comienza en una entrada arbitraria entre las entradas de índice duplicadas al final del índice.

No es necesario que haya un registro actual al usar Seek.

Para buscar un registro en un conjunto de registros de tipo dynaset o de tipo instantánea que cumpla una condición específica, use las operaciones Find. Para incluir todos los registros, no solo aquellos que cumplen una condición específica, use las operaciones Move para pasar de registro a registro.

No se puede llamar a Seek en una tabla adjunta de ningún tipo porque las tablas adjuntas deben abrirse como conjuntos de registros de tipo dynaset o de tipo instantánea. Sin embargo, si llama a CDaoDatabase::Open para abrir directamente una base de datos ISAM instalable, puede llamar a Seek en tablas de esa base de datos, aunque el rendimiento puede ser lento.

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

CDaoRecordset::SetAbsolutePosition

Establece el número de registro relativo del registro actual de un objeto recordset.

void SetAbsolutePosition(long lPosition);

Parámetros

lPosition
Corresponde a la posición ordinal del registro actual en el conjunto de registros.

Comentarios

La llamada a SetAbsolutePosition permite colocar el puntero de registro actual en un registro específico en función de su posición ordinal en un conjunto de registros de tipo dynaset o de tipo instantánea. También puede determinar el número de registro actual llamando a GetAbsolutePosition.

Nota:

Esta función miembro solo es válida para conjuntos de registros de tipo dynaset y de tipo instantánea.

El valor de la propiedad AbsolutePosition del objeto DAO subyacente es de base cero; un valor de 0 hace referencia al primer registro del conjunto de registros. Establecer un valor mayor que el número de registros rellenados hace que MFC produzca una excepción. Puede determinar el número de registros rellenados en el conjunto de registros llamando a la función miembro GetRecordCount.

Si se elimina el registro actual, no se define el valor de la propiedad AbsolutePosition y MFC produce una excepción si se hace referencia a él. Se agregan nuevos registros al final de la secuencia.

Nota:

Esta propiedad no está pensada para usarse como número de registro suplente. Los marcadores siguen siendo la forma recomendada de conservar y volver a una posición determinada y son la única manera de colocar el registro actual en todos los tipos de objetos de conjunto de registros que admiten marcadores. En concreto, la posición de un registro determinado cambia cuando se eliminan los registros anteriores. Tampoco hay ninguna garantía de que un registro determinado tendrá la misma posición absoluta si el conjunto de registros se vuelve a crear porque no se garantiza el orden de los registros individuales dentro de un conjunto de registros a menos que se cree con una instrucción SQL mediante una cláusula ORDERBY.

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

CDaoRecordset::SetBookmark

Llame a esta función miembro para colocar el conjunto de registros en el registro que contiene el marcador especificado.

void SetBookmark(COleVariant varBookmark);

Parámetros

varBookmark
Un objeto COleVariant que contiene el valor del marcador para un registro específico.

Comentarios

Cuando se crea o abre un objeto recordset, cada uno de sus registros ya tiene un marcador único. Puede recuperar el marcador del registro actual llamando GetBookmark y guardando el valor en un objeto COleVariant. Más adelante puede volver a ese registro llamando a SetBookmark mediante el valor de marcador guardado.

Nota:

La llamada a Requery cambia los marcadores DAO.

Tenga en cuenta que si no va a crear un conjunto de registros UNICODE, el objeto COleVariant debe declararse explícitamente ANSI. Esto se puede hacer mediante el formulario COleVariant::COleVariant(lpszSrc,vtSrc) de constructor con vtSrc establecido en VT_BSTRT (ANSI) o mediante la función COleVariantSetString(lpszSrc,vtSrc,vtSrc) con vtSrc establecido en VT_BSTRT.

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

CDaoRecordset::SetCacheSize

Llame a esta función miembro para establecer el número de registros que se van a almacenar en caché.

void SetCacheSize(long lSize);

Parámetros

lSize
Especifica el número de registros. Un valor típico es 100. Un valor de 0 desactiva el almacenamiento en caché. La configuración debe estar entre 5 y 1200 registros. La memoria caché puede usar una cantidad considerable de memoria.

Comentarios

Una memoria caché es un espacio en la memoria local que contiene los datos recuperados más recientemente del servidor en caso de que se vuelvan a solicitar los datos mientras se ejecuta la aplicación. El almacenamiento en caché de datos mejora el rendimiento de una aplicación que recupera datos de un servidor remoto a través de objetos recordset de tipo dynaset. Cuando se solicitan datos, el motor de base de datos de Microsoft Jet comprueba primero la memoria caché de los datos solicitados en lugar de recuperarlos del servidor, lo que tarda más tiempo. Los datos que no proceden de un origen de datos ODBC no se guardan en la memoria caché.

Cualquier origen de datos ODBC, como una tabla adjunta, puede tener una caché local. Para crear la memoria caché, abra un objeto recordset desde el origen de datos remoto, llame a las funciones miembro SetCacheSize y SetCacheStart, a continuación, llame a la función miembro FillCache o recorra los registros mediante una de las operaciones Move. El parámetro lSize de la función miembro SetCacheSize puede basarse en el número de registros con los que la aplicación puede trabajar al mismo tiempo. Por ejemplo, si usa un conjunto de registros como origen de los datos que se van a mostrar en pantalla, puede pasar el parámetro SetCacheSizelSize como 20 para mostrar 20 registros a la vez.

Para obtener información relacionada, consulte el tema "CacheSize, CacheStart Properties" (Propiedades de CacheStart) en la Ayuda de DAO.

CDaoRecordset::SetCacheStart

Llame a esta función miembro para especificar el marcador del primer registro del conjunto de registros que se va a almacenar en caché.

void SetCacheStart(COleVariant varBookmark);

Parámetros

varBookmark
Un COleVariant que especifica el marcador del primer registro del conjunto de registros que se va a almacenar en caché.

Comentarios

Puede usar el valor de marcador de cualquier registro para el parámetro varBookmark de la función miembro SetCacheStart. Haga que el registro que desee iniciar la memoria caché con el registro actual, establezca un marcador para ese registro mediante SetBookmark y pase el valor del marcador como parámetro para la función miembro SetCacheStart.

El motor de base de datos de Microsoft Jet solicita registros dentro del intervalo de caché de la memoria caché y solicita registros fuera del intervalo de caché del servidor.

Los registros recuperados de la memoria caché no reflejan los cambios realizados simultáneamente en los datos de origen por parte de otros usuarios.

Para forzar una actualización de todos los datos almacenados en caché, pase el parámetro lSize de SetCacheSize como 0, llame a SetCacheSize de nuevo con el tamaño de la memoria caché que solicitó originalmente y, a continuación, llame a la función miembro FillCache.

Tenga en cuenta que si no va a crear un conjunto de registros UNICODE, el objeto COleVariant debe declararse explícitamente ANSI. Esto se puede hacer mediante el formulario COleVariant::COleVariant(lpszSrc,vtSrc) de constructor con vtSrc establecido en VT_BSTRT (ANSI) o mediante la función COleVariantSetString(lpszSrc,vtSrc,vtSrc) con vtSrc establecido en VT_BSTRT.

Para obtener información relacionada, consulte el tema CacheSize, CacheStart Properties (Propiedades de CacheStart) en la Ayuda de DAO.

CDaoRecordset::SetCurrentIndex

Llame a esta función miembro para establecer un índice en un conjunto de registros de tipo tabla.

void SetCurrentIndex(LPCTSTR lpszIndex);

Parámetros

lpszIndex
Puntero que contiene el nombre del índice que se va a establecer.

Comentarios

Los registros de las tablas base no se almacenan en ningún orden determinado. Establecer un índice cambia el orden de los registros devueltos desde la base de datos, pero no afecta al orden en que se almacenan los registros. El índice especificado ya debe estar definido. Si intenta usar un objeto de índice que no existe o si el índice no se establece al llamar a Seek, MFC produce una excepción.

Para crear un nuevo índice para la tabla, llame a CDaoTableDef::CreateIndex y anexe el nuevo índice a la colección Indexes de la definición de tabla subyacente llamando a CDaoTableDef::Append y vuelva a abrir el conjunto de registros.

Los registros devueltos desde un conjunto de registros de tipo tabla solo se pueden ordenar por los índices definidos para la definición de tabla subyacente. Para ordenar registros en algún otro orden, puede abrir un conjunto de registros de tipo dynaset o de tipo instantánea mediante una cláusula ORDERBY de SQL almacenada en CDaoRecordset::m_strSort.

Para obtener información relacionada, vea el tema "Index Object" y la definición "current index" en la Ayuda de DAO.

CDaoRecordset::SetFieldDirty

Llame a esta función miembro para marcar un miembro de datos de campo del conjunto de registros como modificado o sin cambios.

void SetFieldDirty(
    void* pv,
    BOOL bDirty = TRUE);

Parámetros

pv
Contiene la dirección de un miembro de datos de campo en el conjunto de registros o NULL. Si es NULL, se marcan todos los miembros de datos de campo del conjunto de registros. (en C++, NULL no es lo mismo que NULL en la terminología de bases de datos, que significa "sin valor").

bDirty
TRUE si el miembro de datos del campo se va a marcar como dirty (con modificaciones). De lo contrario, FALSE si el miembro de datos de campo se va a marcar como "sin modificaciones".

Comentarios

Marcar los campos como sin cambios garantiza que el campo no se actualice.

El marco marca los miembros de datos de campo modificados para asegurarse de que se escribirán en el registro en el origen de datos mediante el mecanismo de intercambio de campos de registros DAO (DFX). Cuando se cambia el valor de un campo, dicho campo se suele establecer como con modificaciones de manera automática, por lo que el usuario rara vez tendrá que llamar a SetFieldDirty por sí mismo, si bien es posible que quiera asegurarse de que las columnas se van a actualizar expresamente o se van a insertar independientemente del valor contenido en el miembro de datos del campo. El mecanismo DFX también emplea el uso de PSEUDO NULL. Para obtener más información, vea CDaoFieldExchange::m_nOperation.

Si no se usa el mecanismo de almacenamiento en búfer doble, el cambio del valor del campo no establece automáticamente el campo como sucio. En este caso, será necesario establecer explícitamente el campo como sin modificaciones. La marca contenida en m_bCheckCacheForDirtyFields controla esta comprobación automática de campos.

Nota:

Llame a esta función miembro solo después de llamar a Edit o AddNew.

El uso de NULL para el primer argumento de la función aplicará la función a todos los campos outputColumn, no a los campos param en CDaoFieldExchange. Por ejemplo, la llamada

SetFieldDirty(NULL);

establecerá únicamente los campos outputColumn en NULL; los campos param no se verán afectados.

Para trabajar en un param, debe proporcionar la dirección real del param individual en el que desea trabajar, como:

SetFieldDirty(&m_strParam);

Esto significa que no puede establecer todos los campos de param en NULL, como puede hacer con campos outputColumn.

SetFieldDirty se implementa a través de DoFieldExchange.

CDaoRecordset::SetFieldNull

Llame a esta función miembro para marcar un miembro de datos de campo del conjunto de registros como NULL (específicamente sin ningún valor) o como no NULL.

void SetFieldNull(
    void* pv,
    BOOL bNull = TRUE);

Parámetros

pv
Contiene la dirección de un miembro de datos de campo en el conjunto de registros o NULL. Si es NULL, se marcan todos los miembros de datos de campo del conjunto de registros. (en C++, NULL no es lo mismo que NULL en la terminología de bases de datos, que significa "sin valor").

bNull
Un valor distinto de cero si el miembro de datos de campo se marca como que no tiene ningún valor (NULL). De lo contrario, 0 si el miembro de datos de campo se va a marcar como no NULL.

Comentarios

SetFieldNull se usa para los campos enlazados en el mecanismo DoFieldExchange.

Cuando se agrega un registro nuevo a un conjunto de registros, todos los miembros de datos de campo se establecen inicialmente en un valor NULL y se marcan como "con modificaciones". Cuando se recupera un registro de un origen de datos, sus columnas ya tienen valores o bien son NULL. Si no es adecuado convertir un campo en Null, se produce una excepción CDaoException.

Si usa el mecanismo de almacenamiento en búfer doble, por ejemplo, si quiere designar específicamente un campo del registro actual como no tener un valor, llame a SetFieldNull con bNull establecido en TRUE para marcarlo como NULL. Si un campo se marcó previamente como NULL y ahora le quiere asignar un valor, establezca simplemente su nuevo valor. No es necesario quitar la marca NULL con SetFieldNull. Para saber si un campo puede ser NULL, llame a IsFieldNullable.

Si no usa el mecanismo de almacenamiento en búfer doble, el cambio del valor del campo no establece automáticamente el campo como dirty y non-Null. Debe establecer específicamente los campos dirty y non-Null. La marca contenida en m_bCheckCacheForDirtyFields controla esta comprobación automática de campos.

El mecanismo DFX emplea el uso de PSEUDONULL. Para obtener más información, vea CDaoFieldExchange::m_nOperation.

Nota:

Llame a esta función miembro solo después de llamar a Edit o AddNew.

El uso de NULL para el primer argumento de la función aplicará la función solo a los campos outputColumn, no a los campos param en CDaoFieldExchange. Por ejemplo, la llamada

SetFieldNull(NULL);

establecerá únicamente los campos outputColumn en NULL; los campos param no se verán afectados.

CDaoRecordset::SetFieldValue

Llame a esta función miembro para establecer el valor de un campo, ya sea por posición ordinal o cambiando el valor de la cadena.

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

Parámetros

lpszName
Puntero a una cadena que contiene el nombre de un campo.

varValue
Referencia a un objeto COleVariant que contiene el valor del contenido del campo.

nIndex
Entero que representa la posición ordinal del campo en la colección Fields del conjunto de registros (basado en cero).

lpszValue
Puntero a una cadena que contiene el valor del contenido del campo.

Comentarios

Use SetFieldValue y GetFieldValue para enlazar dinámicamente campos en tiempo de ejecución en lugar de enlazar columnas estáticamente mediante el mecanismo DoFieldExchange.

Tenga en cuenta que si no va a crear un conjunto de registros UNICODE, debe usar una forma de SetFieldValue que no contenga un parámetro COleVariant o el objeto COleVariant debe declararse explícitamente ANSI. Esto se puede hacer mediante el formulario COleVariant::COleVariant(lpszSrc,vtSrc) de constructor con vtSrc establecido en VT_BSTRT (ANSI) o mediante la función COleVariantSetString(lpszSrc,vtSrc,vtSrc) con vtSrc establecido en VT_BSTRT.

Para obtener información relacionada, vea los temas "Field Object" y "Value Property" en la Ayuda de DAO.

CDaoRecordset::SetFieldValueNull

Llame a esta función miembro para establecer el campo en un valor Null.

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

Parámetros

nIndex
Índice del campo del conjunto de registros, para la búsqueda por índice de base cero.

lpszName
Nombre del campo del conjunto de registros, para la búsqueda por nombre.

Comentarios

C++ NULL no es igual que NULL, que, en la terminología de la base de datos, significa "sin valor".

Para obtener información relacionada, vea los temas "Field Object" y "Value Property" en la Ayuda de DAO.

CDaoRecordset::SetLockingMode

Llame a esta función miembro para establecer el tipo de bloqueo del conjunto de registros.

void SetLockingMode(BOOL bPessimistic);

Parámetros

bPessimistic
Marca que indica el tipo de bloqueo.

Comentarios

Cuando el bloqueo pesimista está en vigor, la página 2k que contiene el registro que está editando se bloquea en cuanto se llama a la función miembro Edit. La página se desbloquea cuando se llama a la función miembro Update oClose o a cualquiera de las operaciones Move o Find.

Cuando el bloqueo optimista está en vigor, la página 2K que contiene el registro solo se bloquea mientras el registro se actualiza con la función miembro Update.

Si una página está bloqueada, ningún otro usuario puede editar registros en la misma página. Si llama a SetLockingMode y pasa un valor distinto de cero y otro usuario ya tiene la página bloqueada, se produce una excepción al llamar a Edit. Otros usuarios pueden leer datos de páginas bloqueadas.

Si llama a SetLockingMode con un valor cero y una llamada Update posterior mientras otro usuario bloquea la página, se produce una excepción. Para ver los cambios realizados en el registro por otro usuario (y perder los cambios), llame a la función miembro SetBookmark con el valor de marcador del registro actual.

Al trabajar con orígenes de datos ODBC, el modo de bloqueo siempre es optimista.

CDaoRecordset::SetParamValue

Llame a esta función miembro para establecer el valor de un parámetro en el conjunto de registros en tiempo de ejecución.

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

Parámetros

nIndex
Posición numérica del parámetro en la colección Parameters de la definición de consulta.

var
Valor que se va a establecer; vea Comentarios.

lpszName
Nombre del parámetro para el que desea establecer el valor.

Comentarios

El parámetro ya debe haberse establecido como parte de la cadena SQL del conjunto de registros. Puede acceder al parámetro por nombre o por su posición de índice en la colección.

Especifique el valor que se va a establecer como un objeto COleVariant. Para obtener información sobre cómo establecer el valor deseado y escribir en el COleVariant objeto, vea la clase COleVariant. Tenga en cuenta que si no va a crear un conjunto de registros UNICODE, el objeto COleVariant debe declararse explícitamente ANSI. Esto se puede hacer mediante el formulario COleVariant::COleVariant(lpszSrc,vtSrc) de constructor con vtSrc establecido en VT_BSTRT (ANSI) o mediante la función COleVariantSetString(lpszSrc,vtSrc,vtSrc) con vtSrc establecido en VT_BSTRT.

CDaoRecordset::SetParamValueNull

Llame a esta función miembro para establecer el parámetro en un valor NULL.

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

Parámetros

nIndex
Índice del campo del conjunto de registros, para la búsqueda por índice de base cero.

lpszName
Nombre del campo del conjunto de registros, para la búsqueda por nombre.

Comentarios

C++ NULL no es igual que NULL, que, en la terminología de la base de datos, significa "sin valor".

CDaoRecordset::SetPercentPosition

Llame a esta función miembro para establecer un valor que cambie la ubicación aproximada del registro actual en el objeto recordset en función de un porcentaje de los registros del conjunto de registros.

void SetPercentPosition(float fPosition);

Parámetros

fPosition
Número comprendido entre 0 y 100.

Comentarios

Cuando se trabaja con un conjunto de registros de tipo dynaset o de tipo instantánea, primero rellene el conjunto de registros pasando al último registro antes de llamar a SetPercentPosition. Si llama a SetPercentPosition antes de rellenar completamente el conjunto de registros, la cantidad de movimiento es relativa al número de registros a los que se tiene acceso, como se indica en el valor de GetRecordCount. Puede ir al último registro llamando a MoveLast.

Una vez que se llama a SetPercentPosition, el registro en la posición aproximada correspondiente a ese valor se convierte en actual.

Nota:

No se recomienda llamar a SetPercentPosition para mover el registro actual a un registro específico de un conjunto de registros. Llame a la función miembro SetBookmark en su lugar.

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

CDaoRecordset::Update

Llame a esta función miembro después de una llamada a la función miembro AddNew o Edit.

virtual void Update();

Comentarios

Esta llamada es necesaria para completar la operación AddNew o Edit.

Tanto AddNew como Edit preparan un búfer de edición en el que se colocan los datos agregados o editados para guardarlos en el origen de datos. Update guarda los datos. Solo se actualizan los campos marcados o detectados como modificados.

Si el origen de datos admite transacciones, puede incluir la llamada a Update (y su correspondiente llamada a AddNew o a Edit) como parte de una transacción.

Precaución

Si se llama a Update sin llamar primero a AddNew o a Edit, Update produce una excepción CDaoException. Si se llama a AddNew o a Edit, se debe llamar a Update antes de llamar a MoveNext o antes de cerrar el conjunto de registros o la conexión del origen de datos. De lo contrario, los cambios se pierden sin previo aviso.

Cuando el objeto recordset se bloquea pesimistamente en un entorno multiusuario, el registro permanece bloqueado desde el momento Edit hasta que se completa la actualización. Si el conjunto de registros está bloqueado optimistamente, el registro se bloquea y se compara con el registro editado previamente justo antes de actualizarlo en la base de datos. Si el registro ha cambiado desde que llamó a Edit, se produce un error en la operación Update y MFC produce una excepción. El modo de bloqueo se puede cambiar con SetLockingMode.

Nota:

El bloqueo optimista siempre se usa en formatos de base de datos externos, como ODBC e ISAM instalable.

Para obtener información relacionada, vea los temas "AddNew Method", "CancelUpdate Method", "Delete Method", "LastModified Property", "Update Method" y "EditMode Property" en la Ayuda de DAO.

Consulte también

CObject (clase)
Gráfico de jerarquías
CDaoTableDef (clase)
CDaoWorkspace (clase)
CDaoDatabase (clase)
CDaoQueryDef (clase)