CDaoRecordset (clase)
Representa un conjunto de registros seleccionados de un origen de datos.
Nota:
El objeto de acceso a datos (DAO) se admite a través de Office 2013. DAO 3.6 es la versión final y está obsoleta.
Sintaxis
class 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 valor 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 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 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 de la clase recordset: 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ífico 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
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 la inserción del 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. 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. CDaoException
Se produce una excepción si se llama AddNew
a un conjunto de registros que no se puede anexar. 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). Al cambiar el valor de un campo, normalmente se establece el campo desfasado automáticamente, por lo que rara vez tendrá que llamar a SetFieldDirty usted mismo, pero es posible que a veces quiera asegurarse de que las columnas se actualizan o insertan explícitamente independientemente del valor que se encuentra en el miembro de datos de 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 desfasado. En este caso, es 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
devuelve 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 Edit
función miembro o AddNew
y no ha llamado Update
a , CancelUpdate
cancela los cambios realizados después Edit
de llamar a 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 Edit
operación 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 Cerrar y abra 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 CDaoDatabase
función miembro del Open
objeto para conectarla al origen de datos, el conjunto de registros intenta abrirlo automáticamente durante su propia llamada 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 CDaoDatabase
objeto antes de construir el conjunto de registros. Si el CDaoDatabase
objeto 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 Close
que no destruye el CDaoRecordset
objeto, puede reutilizar el objeto llamando 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 pase a otro registro, no podrá volver a activar el registro eliminado.
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 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 las 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 está 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). Al cambiar el valor de un campo, normalmente se establece el campo desfasado automáticamente, por lo que rara vez tendrá que llamar a SetFieldDirty usted mismo, pero es posible que a veces quiera asegurarse de que las columnas se actualizan o insertan explícitamente independientemente del valor que se encuentra en el miembro de datos de 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 desfasado. En este caso, es 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 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 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. Debe llamar a CDaoWorkspace::BeginTrans
antes de llamar Edit
a y después de que se haya abierto el conjunto de registros. Llamar CDaoWorkspace::CommitTrans
no es un sustituto de llamar Update
a para completar la Edit
operación. 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
, FindNext
y 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 tiene, más eficaz Find
será. 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á determinado 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 hecho. La primera búsqueda puede tardar más tiempo que las búsquedas posteriores.
Sin embargo, el uso de una de las operaciones De búsqueda no es lo mismo que llamar a MoveFirst
o MoveNext
, lo que 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 De búsqueda 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) cuando busque campos que contengan fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Jet; De lo contrario, es posible que no se encuentren 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á determinado 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.
Sin embargo, el uso de una de las operaciones De búsqueda no es lo mismo que llamar a MoveFirst
o MoveNext
, lo que 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 De búsqueda 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) cuando busque campos que contengan fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Jet; De lo contrario, es posible que no se encuentren 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á determinado 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.
Sin embargo, el uso de una de las operaciones De búsqueda no es lo mismo que llamar a MoveFirst
o MoveNext
, lo que 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 De búsqueda 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) cuando busque campos que contengan fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Jet; De lo contrario, es posible que no se encuentren 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á determinado 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.
Sin embargo, el uso de una de las operaciones De búsqueda no es lo mismo que llamar a MoveFirst
o MoveNext
, lo que 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 De búsqueda 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) cuando busque campos que contengan fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Jet; De lo contrario, es posible que no se encuentren 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 un 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 tenga 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 después de pasar a un registro diferente, llame SetBookmark
a con un parámetro correspondiente al valor de ese COleVariant
objeto.
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 caché es un espacio en la memoria local que contiene los datos recuperados más recientemente del servidor en caso de que los datos se vuelvan a solicitar 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, AtributosAFX_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 origenAFX_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 COleVariant
referencia de objeto como parámetro, en lugar de llamar a una versión que devuelve un COleVariant
objeto. 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
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, CamposAFX_DAO_SECONDARY_INFO
Información principal más: Principal, Única, Agrupada, Omitir valores null, Requerida, ExternaAFX_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 CDaoException
excepción .
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 Editar . 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
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 CDaoException
excepción .
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 se encuentran 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 hasta GetRecordCount
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 de un conjunto de registros de GetRecordCount
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 tabladbOpenDynaset
Conjunto de registros de tipo DynasetdbOpenSnapshot
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
Objeto CString
que contiene un valor que valida los datos de un registro a medida que se 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
Objeto 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 aMoveFirst
. Por lo tanto, llamar aOpen
en un conjunto vacío de registros hace queIsBOF
yIsEOF
devuelva un valor distinto de cero. (Consulte la tabla siguiente para conocer el comportamiento de una llamadaMoveFirst
oMoveLast
con errores).Todas las operaciones move que localizan correctamente un registro provocan que
IsBOF
yIsEOF
devuelvan 0.Una llamada
AddNew
seguida de una llamadaUpdate
que inserta correctamente un nuevo registro hará queIsBOF
devuelva 0, pero solo siIsEOF
ya no es cero. El estado deIsEOF
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
Delete
llamada, incluso si quita el único registro restante de un conjunto de registros, no cambiará el valor deIsBOF
oIsEOF
.
En esta tabla se muestra qué operaciones de movimiento se permiten con diferentes combinaciones de IsBOF
/ IsEOF
.
Estado | MoveFirst, MoveLast | MovePrev, Move < 0 |
Move 0 | MoveNext, Move > 0 |
---|---|---|---|---|
IsBOF =nonzero,IsEOF =0 |
Permitidas | Exception | Exception | Permitidas |
IsBOF =0,IsEOF =nonzero |
Permitido | Permitido | Exception | Exception |
Ambos valores distintos de cero | Exception | Exception | Exception | Exception |
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 encuentran un registro en el valor de IsBOF
y IsEOF
la configuración se muestra en la tabla siguiente.
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 IsDeleted
a . 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 IsDeleted
a .
Al eliminar un registro de un conjunto dinámico, se quita del conjunto de registros y no se puede desplazar hacia atrás a ese registro. Sin embargo, si otro usuario elimina un registro de un conjunto de registros dinámico o en otro conjunto de registros basado en la misma tabla, IsDeleted
devuelve TRUE cuando más adelante se desplaza 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 aMoveFirst
. Por lo tanto, llamar aOpen
en un conjunto vacío de registros hace queIsBOF
yIsEOF
devuelva un valor distinto de cero. (Consulte la tabla siguiente para conocer el comportamiento de una llamadaMoveFirst
con errores).Todas las operaciones move que localizan correctamente un registro provocan que
IsBOF
yIsEOF
devuelvan 0.Una llamada
AddNew
seguida de una llamadaUpdate
que inserta correctamente un nuevo registro hará queIsBOF
devuelva 0, pero solo siIsEOF
ya no es cero. El estado deIsEOF
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
Delete
llamada, incluso si quita el único registro restante de un conjunto de registros, no cambiará el valor deIsBOF
oIsEOF
.
En esta tabla se muestra qué operaciones de movimiento se permiten con diferentes combinaciones de IsBOF
/ IsEOF
.
Estado | MoveFirst, MoveLast | MovePrev, Move < 0 |
Move 0 | MoveNext, Move > 0 |
---|---|---|---|---|
IsBOF =nonzero,IsEOF =0 |
Permitidas | Exception | Exception | Permitidas |
IsBOF =0,IsEOF =nonzero |
Permitido | Permitido | Exception | Exception |
Ambos valores distintos de cero | Exception | Exception | Exception | Exception |
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 encuentran un registro en el valor de IsBOF
y IsEOF
la configuración se muestra en la tabla siguiente.
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 campo sucio se transfieren al registro del origen de datos cuando el registro actual se actualiza mediante una llamada a la Update
función miembro de (después de CDaoRecordset
una llamada a Edit
o AddNew
). Con este conocimiento, puede realizar más pasos, como quitar la marca del 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 es "nullable" (se puede establecer en un valor Null; C++ NULL no es el mismo que Null, que, en la terminología de la base de datos, 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 DoFieldExchange
función miembro.
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.
Normalmente no necesitará 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 según lo previsto.
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.
Al llamar 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
, MoveNext
o 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 MoveFirst
función miembro 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 IsBOF
a antes de intentar pasar al registro anterior. Una llamada a MovePrev
produce 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 IsBOF
a antes de intentar pasar al registro anterior. Una llamada a MovePrev
produce 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 MoveFirst
función miembro 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 siguientes valores:
dbOpenDynaset
Conjunto de registros de tipo dynaset con desplazamiento bidireccional. Este es el valor predeterminado.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
Genere 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. Cuando se usa esta opción, no se usa el CDaoDatabase
puntero usado para construir CDaoRecordset
; en su lugar, se usa la base de datos en la que reside tabledef.
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, el CDaoDatabase
puntero usado para construir CDaoRecordset
no se usa; 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
CDaoDatabase
objeto que no está abierto. El conjunto de registros abre un objetoCDaoDatabase
, 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 objetoCDaoDatabase
y lo mantiene abierto siempre que el conjunto de registros esté abierto. Cuando se llama aClose
en el conjunto de registros, el objetoCDaoDatabase
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 CDaoTableDef
objeto, las columnas resultantes están disponibles para enlazar a través DoFieldExchange
de y el mecanismo DFX o enlazar dinámicamente a través GetFieldValue
de .
Nota:
Solo se puede llamar a Open
mediante un objeto CDaoTableDef
para conjuntos de registros de tipo tabla.
Cuando se usa la tercera versión de Open
donde se pasa un CDaoQueryDef
objeto , esa consulta se ejecuta y las columnas resultantes están disponibles para enlazar a través DoFieldExchange
de y el mecanismo DFX o enlazar dinámicamente a través GetFieldValue
de .
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 se puede usar dbOpenTable
para el argumento de tipo; 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 dbSeeChanges
marca si desea interceptar los cambios realizados por otro usuario u otro programa en la máquina 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 Requery
a cuando 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:
Llamar a Requery
los cambios en 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:
en no se especifican 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.
Si no va a crear un conjunto de registros UNICODE, los COleVariant
objetos deben declararse explícitamente COMO ANSI. Esto se puede hacer mediante el formato COleVariant::COleVariant( lpszSrc , vtSrc ) de constructor con vtSrc establecido en (ANSI) o mediante la COleVariant
función SetString( lpszSrc , vtSrc ) con vtSrc establecido VT_BSTRT
VT_BSTRT
en .
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 cuando se usa 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 Seek
a 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 un 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 tenga 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.
Si no va a crear un conjunto de registros UNICODE, el COleVariant
objeto debe declararse explícitamente ANSI. Esto se puede hacer mediante el formato COleVariant::COleVariant( lpszSrc , vtSrc ) de constructor con vtSrc establecido en (ANSI) o mediante la COleVariant
función SetString( lpszSrc , vtSrc ) con vtSrc establecido VT_BSTRT
VT_BSTRT
en .
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 caché es un espacio en la memoria local que contiene los datos recuperados más recientemente del servidor en caso de que los datos se vuelvan a solicitar 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 SetCacheSize
parámetro lSize 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
.
Si no va a crear un conjunto de registros UNICODE, el COleVariant
objeto debe declararse explícitamente ANSI. Esto se puede hacer mediante el formato COleVariant::COleVariant( lpszSrc , vtSrc ) de constructor con vtSrc establecido en (ANSI) o mediante la COleVariant
función SetString( lpszSrc , vtSrc ) con vtSrc establecido VT_BSTRT
VT_BSTRT
en .
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 el 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. (C++ NULL no es igual que Null en la terminología de la base de datos, lo que significa "no tener ningún 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). Al cambiar el valor de un campo, normalmente se establece el campo desfasado automáticamente, por lo que rara vez tendrá que llamarse SetFieldDirty
, pero es posible que a veces quiera asegurarse de que las columnas se actualizan o insertan explícitamente independientemente del valor que se encuentra en el miembro de datos de 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 desfasado. En este caso, es necesario establecer explícitamente el campo como sucio. La marca contenida en m_bCheckCacheForDirtyFields controla esta comprobación automática de campos.
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á solo outputColumn
los campos en NULL; Los campos param no se ven 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 se pueden establecer todos los campos param en NULL, como se puede hacer con outputColumn
campos.
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. (C++ NULL no es igual que Null en la terminología de la base de datos, lo que significa "no tener ningún 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 desea designar específicamente un campo del registro actual como no tener un valor, llame SetFieldNull
a 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 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, cambiar el 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.
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á solo outputColumn
los campos en NULL; Los campos param no se ven 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.
Si no va a crear un conjunto de registros UNICODE, debe usar una forma de SetFieldValue
que no contenga un COleVariant
parámetro o el COleVariant
objeto debe declararse explícitamente ANSI. Esto se puede hacer mediante el formato COleVariant::COleVariant( lpszSrc , vtSrc ) de constructor con vtSrc establecido en (ANSI) o mediante la COleVariant
función SetString( lpszSrc , vtSrc ) con vtSrc establecido VT_BSTRT
VT_BSTRT
en .
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 Edit
función miembro. 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. Si no va a crear un conjunto de registros UNICODE, el COleVariant
objeto debe declararse explícitamente ANSI. Esto se puede hacer mediante el formato COleVariant::COleVariant( lpszSrc , vtSrc ) de constructor con vtSrc establecido en (ANSI) o mediante la COleVariant
función SetString( lpszSrc , vtSrc ) con vtSrc establecido VT_BSTRT
VT_BSTRT
en .
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 SetPercentPosition
a 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)