Compartir a través de


CRecordset::Open

Abra el conjunto de registros recuperando la tabla o realizando la consulta que el conjunto de registros representa.

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

Parámetros

  • nOpenType
    Acepte el valor predeterminado, AFX_DB_USE_DEFAULT_TYPE, o utilizar uno de los siguientes valores de enumeración OpenType:

    • Conjunto de registros deCRecordset::dynaset con desplazamiento bidireccional.La pertenencia y el orden de los registros se determina cuando se abre el conjunto de registros, pero los cambios realizados por otros usuarios a los valores de datos son visibles siguiendo una operación de búsqueda.Conjuntos de registros dinámicos también se conoce como conjuntos de registros conjunto de claves-controlados.

    • Conjunto de registros estático deCRecordset::snapshot con desplazamiento bidireccional.La pertenencia y el orden de los registros se determina cuando se abre el conjunto de registros; se determinan los valores de datos cuando se capturan los registros.Los cambios realizados por otros usuarios no son visibles hasta que el conjunto de registros se cierra y se vuelve a abrir.

    • Conjunto de registros deCRecordset::dynamic con desplazamiento bidireccional.Los cambios realizados por otros usuarios a la pertenencia, el orden, y los valores de datos son visibles siguiendo una operación de búsqueda.Observe que muchos controladores ODBC no admiten este tipo de conjunto de registros.

    • Conjunto de registros de solo lectura deCRecordset::forwardOnly A con el desplazamiento hacia delante.

      para CRecordset, el valor predeterminado es CRecordset::Instantánea.El mecanismo de valor predeterminado permite que los asistentes de Visual C++ interactuar con ODBC CRecordset y DAO CDaoRecordset, que tienen valores predeterminados diferentes.

    Para obtener más información sobre estos tipos de conjunto de registros, vea el artículo conjunto de registros (ODBC).Para obtener información relacionada, vea el artículo “bloque using y cursores Scrollable” en Windows SDK.

    Nota de precauciónPrecaución

    Si no se admite el tipo solicitado, el marco de trabajo produce una excepción.

  • lpszSQL
    Un puntero de cadena que contiene uno de los siguientes:

    • Un puntero NULL.

    • Nombre de una tabla.

    • Una instrucción SQL Select (opcionalmente con una cláusula SQL Dónde o de ORDER BY ).

    • una instrucción de Llamada que especifica el nombre de una consulta predefinida (procedimiento almacenado).Tenga cuidado de no inserta espacio en blanco entre la llave y la palabra clave de Llamada .

    Para obtener más información sobre esta cadena, vea la tabla y la descripción del rol de ClassWizard en notas.

    [!NOTA]

    El orden de las columnas del conjunto de resultados debe coincidir con el orden de RFX o llamadas de función RFX Masivo de reemplazo de la función de DoFieldExchange o de DoBulkFieldExchange .

  • dwOptions
    Una máscara de bits que puede especificar una combinación de los valores enumerados a continuación.Algunos de ellos son mutuamente excluyentes.el valor predeterminado es cualquier.

    • CRecordset::none opciones establecidas.Este valor de parámetro es mutuamente excluyentes con todos los demás valores.De forma predeterminada, el conjunto de registros se puede actualizar con Editar o Eliminar y permite el anexar de nuevos registros con AddNew.Updatability depende del origen de datos así como en la opción de nOpenType especifica.La optimización para las adiciones masivas no está disponible.La obtención masiva de filas no se implementará.Los registros eliminados no se omitirán durante la navegación por conjuntos de registros.Los marcadores no están disponibles.Se implementa la comprobación modificado automático del campo.

    • CRecordset::appendOnly no permite Editar o Eliminar en el conjunto de registros.Permite AddNew únicamente.Esta opción es mutuamente excluyentes con CRecordset:: readonly.

    • Abrir deCRecordset::readOnly el conjunto de registros como de sólo lectura.Esta opción es mutuamente excluyentes con CRecordset:: appendOnly.

    • Uso deCRecordset::optimizeBulkAdd una instrucción SQL detallados de optimizar agregar muchos registros al mismo tiempo.Solo se aplica si no está utilizando la función API SQLSetPos de ODBC para actualizar el conjunto de registros.la primera actualización determina qué campos son modificados marcado.Esta opción es mutuamente excluyentes con CRecordset::useMultiRowFetch.

    • La obtención de filas masiva de implementan deCRecordset::useMultiRowFetch para permitir que varias filas son recuperadas en una única operación de búsqueda.Esto 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 excluyentes con CRecordset:: optimizeBulkAdd.Observe que si especifica CRecordset::useMultiRowFetch, la opción CRecordset:: noDirtyFieldCheck se activada automáticamente (el búfer doble no estará disponible); en conjuntos de registros sólo hacia delante, la opción CRecordset:: useExtendedFetch se activada automáticamente.Para obtener más información sobre la obtención masiva de filas, vea el artículo conjunto de registros: Obtener registros de forma masiva (ODBC).

    • CRecordset::skipDeletedRecords omitir todos los registros eliminados al navegar de conjunto de registros.esto rendimiento lento en ciertas búsquedas relativas.Esta opción no es válida en conjuntos de registros sólo hacia delante.Si llama a Mover con el parámetro de nRows establecido en 0, y la opción establecida de CRecordset:: skipDeletedRecords , Mover validar.Observe que CRecordset:: skipDeletedRecords es similar al empaquetado de controlador, lo que significa que las filas eliminadas se quitarán del conjunto de registros.Sin embargo, si los registros de los paquetes de controlador, continuación omitir sólo los registros que se elimine; no omite los registros eliminados por otros usuarios mientras el conjunto de registros está abierto.CRecordset:: skipDeletedRecords omitir las filas eliminadas por otros usuarios.

    • El uso deCRecordset::useBookmarks pueden marca una dirección de la Internet en el conjunto de registros, si se admite.La recuperación de datos lento de marcadores pero mejora el rendimiento para la navegación de los datos.No válido en conjuntos de registros sólo hacia delante.Para obtener más información, vea el artículo conjunto de registros: marcadores y posiciones absolutas (ODBC).

    • CRecordset::noDirtyFieldCheck desactiva comprobar modificado automático de campo (búfer doble).Esto mejorará el rendimiento; sin embargo, debe marcar manualmente campos como modificado llamando al miembro de SetFieldDirty y de SetFieldNull funciona. Observe que el búfer doble en la clase CRecordset es similar al búfer doble en la clase CDaoRecordset.Sin embargo, en CRecordset, no puede habilitar el búfer doble en campos individuales; se habilita para todos los campos o la deshabilita para todos los campos.Observe que si especifica la opción CRecordset::useMultiRowFetch, después CRecordset:: noDirtyFieldCheck se gira automáticamente; sin embargo, SetFieldDirty y SetFieldNull no se pueden utilizar en los conjuntos de registros que implementan la obtención masiva de filas.

    • CRecordset::executeDirect no utiliza una instrucción SQL detallados.Para mejorar el rendimiento, especifique esta opción si la función miembro de Requery nunca se llama.

    • Implementar SQLExtendedFetch deCRecordset::useExtendedFetch en lugar de SQLFetch.Esto está diseñado para implementar la obtención de filas masiva en conjuntos de registros sólo hacia delante.Si especifica la opción CRecordset::useMultiRowFetch en un conjunto de registros sólo hacia delante, después CRecordset:: useExtendedFetch se gira automáticamente.

    • El usuario deCRecordset::userAllocMultiRowBuffers The asignará los búferes de almacenamiento de los datos.Utilice esta opción junto con CRecordset::useMultiRowFetch si desea asignar dispone de almacenamiento; si no, el marco automáticamente asignará el almacenamiento necesario.Para obtener más información, vea el artículo conjunto de registros: Obtener registros de forma masiva (ODBC).Observe que especifica CRecordset:: userAllocMultiRowBuffers sin especificar CRecordset::useMultiRowFetch dará lugar a un error de aserción.

Valor devuelto

Distinto de cero si el objeto de CRecordset se ha abierto correctamente; si no 0 si CDatabase:: Abrir (si se llama) devuelve 0.

Comentarios

Debe llamar a esta función miembro para ejecutar la consulta definido por el conjunto de registros.Antes de llamar a Abrir, debe crear el objeto de conjunto de registros.

La conexión de este conjunto de registros al origen de datos depende de cómo se crea el conjunto de registros antes de llamar a Abrir.Si pasa un objeto de CDatabase al constructor de conjunto de registros que no ha estado conectada al origen de datos, esta función miembro utiliza GetDefaultConnect para intentar abrir el objeto de base de datos.Si pasa NULL al constructor de conjunto de registros, el constructor crea un objeto de CDatabase para usted, y los intentos de Abrir de conectar el objeto de base de datos.Para obtener detalles en cerrar el conjunto de registros y la conexión bajo estas circunstancias diferentes, vea Cerrar.

[!NOTA]

Acceso a un origen de datos mediante un objeto de CRecordset se comparte siempre.A diferencia de la clase de CDaoRecordset , no puede utilizar un objeto de CRecordset para abrir un origen de datos con acceso exclusivo.

Cuando se llama a Abrir, una consulta, normalmente una instrucción SQL Select , selecciona registros basándose en los criterios mostrados en la tabla siguiente.

Valor del parámetro lpszSQL

Los registros seleccionados se determinan por

Ejemplo

NULL

la cadena devuelta por GetDefaultSQL.

 

nombre de la tabla SQL

todas las columnas de la tabla-lista en DoFieldExchange o DoBulkFieldExchange.

"Customer"

Nombre predefinido de consulta (procedimiento almacenado)

Las columnas de la consulta se definen volver.

"{call OverDueAccts}"

tabla-lista de desde de la lista de columnas deSelect

las columnas especificadas de las tablas especificadas.

"SELECT CustId, CustName FROM

Customer"

Nota de precauciónPrecaución

Tenga cuidado de no inserta espacio en blanco adicional en la cadena SQL.Por ejemplo, si inserta espacio en blanco entre la llave y la palabra clave de Llamada , MFC interpretará incorrectamente la cadena SQL como nombre de tabla y la incorporará en una instrucción de Select , que producirá una excepción que produce., Si la consulta predefinida utiliza un parámetro de salida, no inserte igualmente el espacio en blanco entre la llave y “?” símbolo.Finalmente, no debe insertar espacio en blanco antes de la llave en una instrucción de Llamada o antes de la palabra clave de Select en una instrucción de Select .

El procedimiento habitual es pasar NULL a Abrir; en este caso, llamadas GetDefaultSQLde Abrir .Si está utilizando una clase derivada de CRecordset , GetDefualtSQL proporciona el nombre de tabla especificado en ClassWizard.Puede especificar otra información del parámetro de lpszSQL .

Todo lo que se pasa, las construcciones de Abrir una cadena de SQL final para la consulta (string puede tener cláusulas SQL Dónde y de ORDER BY anexadas a la cadena de lpszSQL que se pasó) y después ejecuta la consulta.Puede examinar la cadena construida llamando a GetSQL después de llamar a Abrir.Para obtener detalles adicionales sobre cómo el conjunto de registros crea una instrucción SQL y selecciona los registros, vea el artículo conjunto de registros: Cómo se seleccionan los registros (ODBC).

Enlazados a los miembros de datos de campo de la clase de conjunto de registros a las columnas de datos seleccionado.Si se devuelven algunos, el primer registro es el registro actual.

Si desea establecer opciones para el conjunto de registros, como un filtro o una ordenación, especifique estos después de crear el objeto de conjunto de registros y antes de que se llama a Abrir.Si desea actualizar los registros del conjunto de registros después del conjunto de registros esté abierto, llame a Requery.

Para obtener más información, incluidos ejemplos adicionales, vea los artículos conjunto de registros (ODBC), conjunto de registros: Cómo se seleccionan los registros (ODBC), y conjunto de registros: La creación y cerrar conjuntos de registros (ODBC).

Excepciones

Este método puede producir excepciones de CDBException* escrito y de CMemoryException*.

Ejemplo

Las distintas formas de presentación los siguientes ejemplos de código de llamada de Abrir .

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

Requisitos

encabezado: afxdb.h

Vea también

Referencia

Clase CRecordset

Gráfico de jerarquía

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery