Distinto de cero si se abrió correctamente el objeto CRecordset ; caso contrario 0 si CDatabase::Open (si llama) devuelve 0.
Parámetros
nOpenType
Acepte el valor predeterminado, AFX_DB_USE_DEFAULT_TYPE, o utilice uno de los siguientes valores de la enumeraciónOpenType:
CRecordset::dy&nasetnbsp; Un conjunto de registros con desplazamiento bidireccional. La composición y ordenación de los registros se determinan cuando se abre el juego de registros, pero los cambios realizados por otros usuarios con los valores de datos son visibles después de una operación de obtención. Conjuntos de registros dinámicos son también conocidos como cursores controlados por conjuntos de registros.
CRecordset::s&napshotnbsp; Un conjunto de registros estático con desplazamiento bidireccional. La composición y ordenación de los registros se determinan cuando se abre el juego de registros; se determinan los valores de datos cuando se recuperan los registros. Los cambios realizados por otros usuarios no son visibles hasta que el conjunto de registros se cierra y luego reabrió.
CRecordset::dy&namicnbsp; Un conjunto de registros con desplazamiento bidireccional. Los cambios realizados por otros usuarios con los valores de pertenencia, pedidos y datos son visibles después de una operación de obtención. Tenga en cuenta que muchos de los controladores ODBC no admiten este tipo de juego de registros.
CRecordset::forwardO&nlynbsp; Un conjunto de registros de sólo lectura con desplazamiento sólo hacia delante.
Para CRecordset, el valor predeterminado es CRecordset::snapshot. El mecanismo de valor predeterminado permite a los asistentes de Visual C++ para interactuar con ODBC CRecordset y DAO CDaoRecordset, que tienen distintos valores predeterminados.
Para obtener más información sobre estos tipos de juego de registros, vea el artículo Conjunto de registros (ODBC) en la Guía del programador de Visual C++. Para obtener información relacionada, consulte el artículo "Usando bloques y desplazable cursores" en la referencia del programador del SDK de ODBC.
Precaució&nnbsp; Si el tipo solicitado no es compatible, el marco produce una excepción.
lpszSQL
Un puntero de cadena que contiene uno de los siguientes:
Un puntero nulo.
El nombre de una tabla.
Una instrucción SQL, Seleccione (opcionalmente con una cláusula SQL donde o ORDER BY ).
Una instrucción CALL especificando el nombre de una consulta predefinida (procedimiento almacenado). Tenga cuidado de que no insertar espacios en blanco entre la llave y la palabra clave CALL.
Para obtener más información acerca de esta cadena, consulte la tabla y la discusión del papel de ClassWizard bajo observaciones.
&Notanbsp; El orden de las columnas en el conjunto de resultado debe coincidir con el orden de los RFX o anulación llamadas de función RFX masivo en la función DoFieldExchange o DoBulkFieldExchange.
dwOptions
Una máscara de bits que puede especificar una combinación de los valores enumerados a continuación. Algunos de estos son mutuamente excluyentes. El valor predeterminado es ninguno.
CRecordset::nonenbsp; &Ningún conjunto de opciones. El valor de este parámetro es mutuamente excluyen con todos los demás valores. De forma predeterminada, el conjunto de registros puede actualizarse con Editar o Eliminar y permite anexar nuevos registros con AddNew. Clasificaciones depende sobre el origen de datos, así como en la opción nOpenType que especifica. Optimización para adiciones masiva no está disponible. Obtención de filas masiva no se ejecutará. No se omitirá los registros eliminados durante la navegación de juego de registros. Los marcadores no están disponibles. Comprobación de campo sucio automático se aplica.
CRecordset::appendOnlynbsp; &No permite Editar o Eliminar en el juego de registros. Permitir sólo AddNew . Esta opción es mutuamente excluyen con CRecordset::readOnly.
CRecordset::readO&nlynbsp; Abrir el recordset como de sólo lectura. Esta opción es mutuamente excluyen con CRecordset::appendOnly.
CRecordset::optimizeBulkAdd Utilizar una instrucción SQL preparada para optimizar agregando muchos registros al mismo tiempo. Se aplica sólo si no está utilizando la función API de ODBC SQLSetPos para actualizar el conjunto de registros. La primera actualización determina qué campos marcados sucios. Esta opción es mutuamente excluyen con CRecordset::useMultiRowFetch.
CRecordset::useMultiRowFetch Implementar la obtención masiva de filas para permitir varias filas se recupera de una operación de búsqueda única. Esta es una característica avanzada diseñada para mejorar el rendimiento; Sin embargo, el intercambio masivo de campos de registros no es compatible con ClassWizard. Esta opción es mutuamente excluyen con CRecordset::optimizeBulkAdd. Tenga en cuenta que si especifica CRecordset::useMultiRowFetch, entonces la opción CRecordset::noDirtyFieldCheck se activará automáticamente (doble búfer no estará disponible); en conjuntos de registros sólo hacia delante, la opción CRecordset::useExtendedFetch se activará automáticamente. Para obtener más información sobre la obtención masiva de filas, vea el artículo conjunto de registros: obtener registros en masiva (ODBC) en la Guía del programador de Visual C++.
CRecordset::skipDeletedRecords Omitir registros eliminados todos al navegar por el conjunto de registros. Esto reducirá la velocidad de rendimiento en ciertas recuperaciones relativas. Esta opción no es válida en conjuntos de registros sólo hacia delante. Tenga en cuenta que CRecordset::skipDeletedRecords es similar al controlador de embalaje, lo que significa que se eliminan filas eliminadas del juego de registros. Sin embargo, si el controlador de paquetes de registros, luego omitirá sólo aquellos registros que eliminar; no omitirá registros eliminados por otros usuarios, mientras que el conjunto de registros está abierto. CRecordset::skipDeletedRecords omitirá registros eliminados por otros usuarios.
CRecordset::useBookmarksnbsp; Puede utilizar marcadores en el objeto recordset, si se admite. Marcadores de lenta recuperación de datos sino mejorar el rendimiento de exploración de datos. &No válido para juegos de registros sólo hacia delante. Para obtener más información, consulte el artículo Recordset: marcadores y posiciones absolutas (ODBC) en la Guía del programador de Visual C++.
CRecordset::noDirtyFieldChecknbsp; Desactivar la opción automático campo sucio comprobación (doble búfer). Esto mejorará el rendimiento; Sin embargo, debe marcar manualmente campos como sucia por llamar a la SetFieldDirty y SetField&Null miembros de funciones.Tenga en cuenta esa doble búfer en clase que CRecordset es similar al búfer doble en clase CDaoRecordset. Sin embargo, en CRecordset, no puede habilitar búfer doble en campos individuales; Puedes activar para todos los campos o desactivar para todos los campos. Para obtener más información acerca de doble búfer, vea el artículo DAO intercambio de campos de registros DAO: registros de almacenamiento en búfer doble en la Guía del programador de Visual C++. Tenga en cuenta que si especifica la opción CRecordset::useMultiRowFetch, entonces CRecordset::noDirtyFieldCheck se activará automáticamente; Sin embargo, SetFieldDirty y SetFieldNull no se puede utilizar en los conjuntos de registros que implementan la obtención masiva de filas.
CRecordset::executeDirectnbsp; &No utilice una instrucción SQL preparada. Para mejorar el rendimiento, especificar esta opción si nunca se llamará a la función miembro Requery.
CRecordset::useExte&ndedFetchnbsp; Implementar SQLExtendedFetch en lugar de SQLFetch. Esto está diseñado para implementar la obtención masiva de filas de conjuntos de registros sólo hacia delante. Si se especifica la opción CRecordset::useMultiRowFetch en un conjunto de registros sólo hacia delante, entonces CRecordset::useExtendedFetch se activará automáticamente.
CRecordset::userAllocMultiRowBuffers El usuario asignará búferes de almacenamiento de los datos. Utilice esta opción junto con CRecordset::useMultiRowFetch si desea asignar su propio almacenamiento de información; de lo contrario, el marco asignará automáticamente el almacenamiento necesario. Para obtener más información, consulte el artículo registros: obtener registros en masiva (ODBC) en la Guía del programador de Visual C++. Tenga en cuenta que la especificación CRecordset::userAllocMultiRowBuffers sin especificar CRecordset::useMultiRowFetch dará como resultado una aserción fallida.
Observaciones
Debe llamar a esta función miembro para ejecutar la consulta definida por el conjunto de registros. Antes de llamar a Open, debe crear el objeto recordset.
Conexión del conjunto de registros en el origen de datos depende de cómo se construye el objeto recordset antes de llamar a Open. Si se pasa un objeto CDatabase al constructor de conjunto de registros que no se ha conectado a la fuente de datos, esta función miembro utiliza GetDefaultConnect para intentar abrir el objeto de base de datos. Si se pasa NULL al constructor de conjunto de registros, el constructor crea un objeto CDatabase para usted y abierto intenta conectar el objeto de base de datos. Para obtener más detalles sobre el cierre de registros y la conexión en estas circunstancias diferentes, vea Cerrar.
&Notanbsp; Acceso a un origen de datos mediante un objeto CRecordset siempre es compartida. A diferencia de la clase CDaoRecordset , no puede utilizar un objeto CRecordset para abrir un origen de datos con acceso exclusivo.
Cuando usted llama abierta, una consulta, normalmente una instrucción SQL, Seleccione , selecciona registros basándose en criterios que se muestra en la siguiente tabla.
Valor del parámetro lpszSQL
Registros seleccionados están determinados por
Ejemplo
NULL
La cadena devuelta por GetDefaultSQL.
Nombre de la tabla SQL
Todas las columnas de la tabla lista en DoFieldExchange o DoBulkFieldExchange.
"Cliente"
Nombre de consulta predefinida (procedimiento almacenado)
Las columnas de que la consulta se define para volver.
"{call OverDueAccts}"
Seleccione lista de columnas FROM tabla lista
Las columnas especificadas en las tablas especificadas.
"Seleccionar CustId, Nombre_cliente del cliente"
! Adverte&ncianbsp; Tenga cuidado de no insertar espacios en blanco adicionales en la cadena SQL. Por ejemplo, si inserta un espacio en blanco entre la llave y la palabra clave CALL , MFC malinterpretan la cadena SQL como un nombre de tabla y incorporar en una instrucción SELECT , que dará lugar a una excepción que se produce. Del mismo modo, si su consulta predefinida utiliza un parámetro de salida, no insertar espacios en blanco entre la llave y el '?' símbolo. Por último, no debe insertar espacios en blanco antes de la llave en una instrucción CALL o antes de la palabra clave de Seleccionar en un articulo de Seleccionar.
El procedimiento habitual es pasar NULL al abierto; en este caso, llama abiertaGetDefaultSQL. Si está utilizando una clase derivada de CRecordset , GetDefualtSQL da los nombres de tabla especificado en ClassWizard. En su lugar puede especificar otro tipo de información en el parámetro lpszSQL.
Lo que pasa, construye una final cadena SQL para la consulta (la cadena puede tener cláusulas SQL donde y ORDER BY agrega a la cadena de lpszSQL pasó) y, a continuación, ejecuta la consulta abierta . Puede examinar la cadena construida mediante una llamada a GetSQL después de llamar a Open. Para obtener información adicional acerca de cómo el conjunto de registros crea una instrucción SQL y selecciona los registros, consulte el artículo conjunto de registros: cómo se seleccionan los registros (ODBC) en la Guía del programador de Visual C++.
Los miembros de datos de campo de la clase recordset están enlazados con las columnas de los datos seleccionados. Si se devuelven todos los registros, el primer registro se convierte en el registro actual.
Si desea establecer opciones para el conjunto de registros, como un filtro o tipo, especifique estas después de construir el objeto recordset pero antes de llamar a Open. Si desea actualizar los registros del conjunto de registros después de que el conjunto de registros ya está abierto, llamar a Requery.
Ejemplos de código siguientes muestran distintas formas de la convocatoria abierta.
/ / rs es un CRecordset o
/ / Derivada de CRecordset objeto
/ / Rs abiertos mediante la instrucción de SQL predeterminado,
/ / implementar marcadores y desactivar
/ / comprobación automática sucio campo
RS.Abierto (CRecordset::snapshot, &NULL,
nbsp; CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
/ / Pasar una instrucción SELECT completa
/ / y abierto como un dinámico
RS.(CRecordset::dynaset, abrir
_T ("select L_Name de cliente"));
/ / Aceptar los valores predeterminados
RS.(Abierto)