Conjunto de registros: Cómo se seleccionan los registros (ODBC)
Nota:
El Asistente para consumidores ODBC MFC no está disponible en Visual Studio 2019 ni en versiones posteriores. Aun así, puede crear un consumidor manualmente.
Este tema es aplicable a las clases ODBC de MFC.
En este tema se explica:
Los conjuntos de registros seleccionan registros de un origen de datos a través de un controlador ODBC mediante el envío de instrucciones SQL al controlador. El código SQL enviado depende de cómo diseñe y abra la clase de conjunto de registros.
Opciones de selección de registros
En la siguiente tabla se muestran las opciones de selección de registros.
Cómo y cuándo puede alterar un conjunto de registros
Cuando se | Puede |
---|---|
Declara la clase de conjunto de registros con el Asistente para agregar clases | Especificar la tabla en la que hacer la selección. Especificar qué columnas se van a incluir. Vea Agregar un consumidor ODBC de MFC. |
Completa la implementación de la clase de conjunto de registros | Reemplazar funciones miembro, como OnSetOptions (avanzado), para establecer opciones específicas de la aplicación o cambiar valores predeterminados. Especificar los miembros de datos de parámetros si quiere un conjunto de registros parametrizado. |
Construye 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 filtra los registros. Consulte Conjunto de registros: Filtrar registros (ODBC) Especificar un criterio de ordenación para su uso en una cláusula ORDER BY que ordena los registros. Consulte Conjunto de registros: Ordenar registros (ODBC). Especificar valores de parámetros para cualquier parámetro que haya agregado a la clase. Consulte Conjunto de registros: Parametrizar un conjunto de registros (ODBC). |
|Ejecución de la consulta del conjunto de registros mediante una llamada a Open
|Especifique una cadena SQL personalizada para reemplazar la cadena SQL predeterminada establecida por el asistente. Vea CRecordset::Open en la Referencia de la biblioteca de clases y SQL: Personalización de la instrucción SQL del conjunto de registros (ODBC).
|Llamada a Requery
para consultar el conjunto de registros con los valores más recientes del origen de datos|Especifique nuevos parámetros, filtre u ordene. Consulte Conjunto de registros: Volver a consultar un conjunto de registros (ODBC).
Cómo un conjunto de registros construye su instrucción SQL
Cuando se llama a la función miembro Open de un objeto de conjunto de registros, Open
construye una instrucción SQL mediante algunos de los elementos siguientes o todos ellos:
El parámetro lpszSQL pasado a
Open
. Si no es NULL, este parámetro especifica una cadena SQL personalizada, o parte de una. El marco analiza la cadena. Si la cadena es una instrucción SELECT de SQL o una instrucción CALL de ODBC, el marco usa la cadena como instrucción SQL del conjunto de registros. Si la cadena no comienza con "SELECT" o "{CALL", el marco usa los datos proporcionados para construir una cláusula FROM de SQL.La cadena devuelta por GetDefaultSQL. De forma predeterminada, este es el nombre de la tabla que especificó para el conjunto de registros en el asistente, pero puede cambiar lo que devuelve la función. El marco llama a
GetDefaultSQL
y, si la cadena no comienza con "SELECT" o "{CALL", se da por supuesto que es un nombre de tabla, que se usa para construir una cadena SQL.Los miembros de datos de campo del conjunto de registros, que van a enlazarse a columnas específicas de la tabla. El marco enlaza las columnas de registro a las direcciones de estos miembros, que actúan como búferes. Además, el marco determina la correlación de los miembros de datos de campo con las columnas de tabla desde llamadas de función de RFX o RFX masivo 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 usa esta cadena para construir una cláusula WHERE de SQL.
El criterio de ordenación del conjunto de registros, si lo hay, contenido en el miembro de datos m_strSort. El marco usa esta cadena para construir una cláusula ORDER BY de SQL.
Sugerencia
Para usar la cláusula GROUP BY de SQL (y posiblemente la cláusula HAVING), anexe las cláusulas al final de la cadena de filtro.
Los valores de cualquiera de los miembros de datos de parámetros que especifique para la clase. Debe establecer los valores de parámetros antes de llamar a
Open
oRequery
. El marco enlaza los valores de parámetros a marcadores de posición "?" en la cadena SQL. En tiempo de compilación, especifique la cadena con marcadores de posición. En tiempo de ejecución, el marco rellena los detalles en función de los valores de parámetros que usted pase.
Open
construye una instrucción SELECT de SQL a partir de estos elementos. Vea Personalización de la selección para obtener más información sobre la manera en que el marco usa los elementos.
Después de construir 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), que lo envía a su vez al controlador ODBC para el DBMS (sistema de administración de bases de datos) específico. El controlador se comunica con el DBMS para llevar a cabo la selección en el origen de datos y obtiene el primer registro. El marco carga el registro en los miembros de datos de campo del conjunto de registros.
Puede usar una combinación de estas técnicas para abrir tablas y construir una consulta basada en una combinación de varias tablas. Si lleva a cabo una mayor personalización, puede llamar a consultas predefinidas (procedimientos almacenados), seleccionar columnas de la tabla que no se conocen en tiempo de diseño y enlazarlas a campos del conjunto de registros, así como realizar la mayoría de tareas de acceso a datos. Las tareas que no se pueden llevar a cabo mediante la personalización de conjuntos de registros pueden realizarse igualmente mediante una llamada a funciones de la API de ODBC o a través de la ejecución directa de instrucciones SQL con CDatabase::ExecuteSQL.
Personalización de la selección
Además de proporcionar un filtro, un criterio de ordenación o parámetros, puede 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 pase en lpsqSQL tendrá prioridad sobre lo que devuelva la función miembro GetDefaultSQL.
Para obtener más información, consulte
Open
SQL: Personalizar la instrucción SQL del conjunto de registros (ODBC), donde se describen los tipos de instrucciones SQL (o instrucciones parciales) que puede pasar a y lo que el marco hace con ellas.Nota:
Si la cadena personalizada que pasa no comienza con "SELECT" o "{CALL", MFC dará por supuesto que contiene un nombre de tabla. Esto también se aplica al siguiente elemento con viñetas.
Modificar la cadena en la que escribe el asistente en la función miembro
GetDefaultSQL
del conjunto de registros. Edite el código de la función para cambiar lo que devuelve. De forma predeterminada, el asistente escribe una funciónGetDefaultSQL
que devuelve un nombre de tabla.Puede hacer que
GetDefaultSQL
devuelva cualquiera de los elementos que pase en el parámetro lpszSQL aOpen
. Si no pasa una cadena SQL personalizada en lpszSQL, el marco usa la cadena queGetDefaultSQL
devuelve. Como mínimo,GetDefaultSQL
debe devolver un nombre de tabla, pero puede hacer que devuelva varios nombres de tabla, una instrucción SELECT completa, una instrucción CALL de ODBC, etc. Para obtener una lista de lo que puede pasar a lpszSQL (o de lo que puede hacer queGetDefaultSQL
devuelva), vea SQL: Personalizar la instrucción SQL del conjunto de registros (ODBC).Si va a realizar una combinación de dos o más tablas, reescriba
GetDefaultSQL
para personalizar la lista de tabla que se usa en la cláusula FROM de SQL. Para obtener más información, vea Conjunto de registros: Realizar una combinación (ODBC).Enlazar manualmente miembros de datos de campo adicionales, quizás en función de la información que obtendrá sobre el esquema del origen de datos en tiempo de ejecución. Agregue miembros de datos de campo a la clase de conjunto de registros, llamadas de función de RFX o RFX masivo para ellos a la función miembro DoFieldExchange o DoBulkFieldExchange, e inicializaciones de los miembros de datos en el constructor de clase. Para más información, consulte 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 valores predeterminados.
Si quiere basar el conjunto de registros en una instrucción SQL compleja, deberá usar una combinación de estas técnicas de personalización. Por ejemplo, es posible que quiera usar cláusulas SQL y palabras clave que los conjuntos de registros no admiten directamente, o quizás va a combinar varias tablas.
Consulte también
Conjunto de registros (ODBC)
Conjunto de registros: Actualizar los registros (ODBC)
Conceptos básicos de ODBC
SQL
Conjunto de registros: Bloquear registros (ODBC)