Conjunto de registros: Cómo se seleccionan los registros (ODBC)

Actualización: noviembre 2007

Este tema se aplica a las clases ODBC de MFC.

En este tema se explica:

  • El papel y las opciones del programador al seleccionar registros.

  • Cómo crea un conjunto de registros su instrucción SQL y selecciona los registros.

  • Qué se puede hacer para personalizar la selección.

Los conjuntos de registros seleccionan los registros de un origen de datos a través de un controlador ODBC, enviando instrucciones SQL al controlador. El código SQL enviado depende de cómo se diseñe y abra la clase de conjunto de registros.

Opciones disponibles al seleccionar los registros

La siguiente tabla muestra las opciones disponibles al seleccionar registros.

Cómo y cuándo es posible realizar modificaciones en un conjunto de registros

Al hacer lo siguiente

Se puede

Declarar la clase de conjunto de registros con el asistente Agregar clase

Especificar la tabla de la cual se seleccionan registros.

Especificar las columnas que se incluirán.

Vea Agregar un consumidor ODBC de MFC.

Completar la implementación de la clase de conjunto de registros

Reemplazar las funciones miembro como OnSetOptions (avanzada) para establecer opciones específicas de la aplicación o cambiar la configuración predeterminada. Especificar los miembros de datos de parámetro si se desea un conjunto de registros parametrizado.

Crear un objeto de conjunto de registros (antes de llamar a Open)

Especificar una condición de búsqueda (posiblemente compuesta) para su uso en una cláusula WHERE que filtre los registros. Vea Conjunto de registros: filtrar registros (ODBC)

Especificar un tipo de ordenación para su uso en una cláusula ORDER BY que ordene los registros. Vea Conjunto de registros: ordenar registros (ODBC).

Especificar los valores de parámetro para cualquier parámetro agregado a la clase. Vea Conjunto de registros: Parametrizar un conjunto de registros (ODBC).

Ejecutar la consulta del conjunto de registros llamando a Open

Especificar una cadena SQL personalizada que reemplace la cadena SQL predeterminada creada por el asistente. Vea CRecordset::Open en la Referencia de la biblioteca de clases y SQL: personalizar la instrucción SQL del conjunto de registros (ODBC).

Llamar a Requery para realizar una nueva consulta al conjunto de registros con los valores más recientes del origen de datos

Especificar nuevos parámetros, filtrar u ordenar. Vea Conjunto de registros: realizar una nueva consulta a un conjunto de registros (ODBC).

Cómo crea un conjunto de registros su instrucción SQL

Al llamar a la función miembro Open del objeto de conjunto de registros, Open crea una instrucción SQL usando uno o varios elementos de los siguientes:

  • El parámetro lpszSQL pasado a Open. Si es distinto de NULL, este parámetro especifica una cadena SQL personalizada o parte de una. El marco de trabajo analiza la cadena. Si la cadena es una instrucción SQL SELECT o una instrucción ODBC CALL, el marco de trabajo usa la cadena como instrucción SQL del conjunto de registros. Si la cadena no comienza por "SELECT" o "{CALL", el marco de trabajo usa los datos proporcionados para generar una cláusula SQL FROM.

  • La cadena devuelta por GetDefaultSQL. De forma predeterminada, éste es el nombre de la tabla especificada para el conjunto de registros en el asistente, pero se puede cambiar el valor devuelto por la función. El marco de trabajo llama a GetDefaultSQL; si la cadena no comienza con "SELECT" o "{CALL", se supone que es un nombre de tabla, que se utiliza para generar una cadena SQL.

  • Los miembros de datos de campo del conjunto de registros que se enlazarán con columnas específicas de la tabla. El marco de trabajo enlaza las columnas de registro con las direcciones de dichos miembros, usándolas como búferes. El marco de trabajo determina la correlación de miembros de datos de campo con las columnas de las llamadas de función RFX o RFX masivo existentes en la función miembro DoFieldExchange o DoBulkFieldExchange del conjunto de registros.

  • El filtro del conjunto de registros, si lo hay, contenido en el miembro de datos m_strFilter. El marco de trabajo usa esta cadena para crear una cláusula SQL WHERE.

  • El tipo de ordenación del conjunto de registros, si lo hay, contenido en el miembro de datos m_strSort. El marco de trabajo usa esta cadena para crear una cláusula SQL ORDER BY.

    Sugerencia:

    Para poder usar la cláusula SQL GROUP BY (y posiblemente la cláusula HAVING), anexe las cláusulas al final de la cadena de filtro.

  • Los valores de cualquier miembro de datos de parámetro que se especifique para la clase. Se establecen los valores de parámetro justo antes de llamar a Open o a Requery. El marco de trabajo enlaza los valores de parámetro con marcadores de posición "?" en la cadena SQL. En tiempo de compilación, se especifica la cadena mediante marcadores de posición. En tiempo de ejecución, el marco de trabajo completa los detalles basándose en los valores de parámetro pasados.

Open crea una instrucción SQL SELECT a partir de estos elementos. Vea Personalizar la selección para conocer los detalles sobre cómo utiliza dichos elementos el marco de trabajo.

Después de crear la instrucción, Open envía el código SQL al Administrador de controladores ODBC (y a la biblioteca de cursores ODBC, si está en memoria), el cual lo envía al controlador ODBC del sistema de administración de bases de datos (DBMS) específico. El controlador se comunica con el DBMS para realizar la selección en el origen de datos y obtiene el primer registro. El marco de trabajo carga el registro en los miembros de datos de campo del conjunto de registros.

Se puede usar una combinación de estas técnicas para abrir tablas y para crear una consulta basada en una combinación de múltiples tablas. Mediante personalización adicional, se puede llamar a consultas predefinidas (procedimientos almacenados), seleccionar columnas de tabla desconocidas en tiempo de diseño y enlazarlas con campos de conjunto de registros, o realizar casi todas las demás tareas comunes de acceso a datos. Las tareas que no se pueden llevar a cabo personalizando los conjuntos de registros se pueden realizar a pesar de todo llamando a funciones de la API de ODBC o ejecutando directamente instrucciones SQL mediante CDatabase::ExecuteSQL.

Personalizar la selección

Además de proporcionar un filtro, un tipo de ordenación o parámetros, se pueden realizar las siguientes acciones para personalizar la selección del conjunto de registros:

  • Pasar una cadena SQL personalizada en lpszSQL al llamar a Open para el conjunto de registros. Cualquier dato que se pase en lpsqSQL tiene prioridad sobre lo devuelto por la función miembro GetDefaultSQL.

    Para obtener más información, vea SQL: Personalizar la instrucción SQL del conjunto de registros (ODBC), que describe los tipos de instrucciones SQL (o instrucciones parciales) que se pueden pasar a Open y lo que hace con ellas el marco de trabajo.

    Nota:

    Si la cadena personalizada que se pasa no comienza por "SELECT" o "{CALL", MFC supone que contiene un nombre de tabla. Esto también se aplica a lo expuesto en el siguiente elemento con viñeta.

  • Modificar la cadena que escribe el asistente en la función miembro GetDefaultSQL del conjunto de registros. Editar el código de la función para cambiar lo que devuelve. De forma predeterminada, el asistente escribe una función GetDefaultSQL que devuelve un solo nombre de tabla.

    Es posible hacer que GetDefaultSQL devuelva cualquiera de los elementos que se pueden pasar en el parámetro lpszSQL a Open. Si no se pasa ninguna cadena SQL personalizada de lpszSQL, el marco de trabajo usa la cadena devuelta por GetDefaultSQL. Como mínimo, GetDefaultSQL debe devolver un nombre de tabla. Pero se puede hacer que devuelva varios nombres de tabla, una instrucción SELECT completa, una instrucción ODBC CALL, etc. Para obtener una lista de los valores que se pueden pasar a lpszSQL (o hacer que GetDefaultSQL devuelva), vea SQL: Personalizar la instrucción SQL del conjunto de registros (ODBC).

    Si realiza una combinación de dos o más tablas, vuelva a escribir GetDefaultSQL para personalizar la lista de tablas usada en la cláusula SQL FROM. Para obtener más información, vea Conjunto de registros: Realizar una combinación (ODBC).

  • Enlazar manualmente miembros de datos de campo adicionales, basándose quizás en información sobre el esquema del origen de datos obtenida en tiempo de ejecución. Se pueden agregar miembros de datos de campo a la clase de conjunto de registros, así como las llamadas de función RFX o RFX masivo relacionadas a las funciones miembro DoFieldExchange o DoBulkFieldExchange, y código de inicialización de los miembros de datos de campo en el constructor de la clase. Para obtener más información, vea Conjunto de registros: Enlazar dinámicamente columnas de datos (ODBC).

  • Reemplazar funciones miembro de conjunto de registros, como OnSetOptions, para establecer opciones específicas de la aplicación o reemplazar los valores predeterminados.

Si desea basar el conjunto de registros en una instrucción SQL compleja, debe usar una combinación de estas técnicas de personalización. Por ejemplo, puede que desee utilizar cláusulas y palabras clave de SQL no admitidas directamente por los conjuntos de registros, o quizás prefiera combinar tablas múltiples.

Vea también

Conceptos

Conjunto de registros (ODBC)

Conjunto de registros: Actualizar los registros (ODBC)

Conceptos básicos de ODBC

SQL

Conjunto de registros: Bloquear registros (ODBC)