El componente TADOQuery proporciona Delphi los desarrolladores la capacidad de recuperar datos de una o varias tablas de un Base de datos ADO usando SQL.
Estas declaraciones SQL pueden ser declaraciones DDL (lenguaje de definición de datos) como CREATE TABLE, ALTER INDICE, etc., o pueden ser sentencias DML (lenguaje de manipulación de datos), como SELECT, UPDATE y ELIMINAR. La declaración más común, sin embargo, es la declaración SELECT, que produce una vista similar a la disponible utilizando un componente Table.
Nota: aunque es posible ejecutar comandos utilizando el componente ADOQuery, el ADOCommandcomponente es más apropiado para este propósito. Se utiliza con mayor frecuencia para ejecutar comandos DDL o para ejecutar un procedimiento almacenado (aunque debe usar el comandoTADOStoredProc para tales tareas) que no devuelve un conjunto de resultados.
El SQL utilizado en un componente ADOQuery debe ser aceptable para el controlador ADO en uso. En otras palabras, debe estar familiarizado con las diferencias de escritura de SQL entre, por ejemplo, MS Access y MS SQL.
Al igual que cuando se trabaja con el componente ADOTable, se accede a los datos en una base de datos utilizando una conexión de almacén de datos establecida por el componente ADOQuery utilizando suCadena de conexión propiedad oa través de un componente ADOConnection separado especificado en el Conexiónpropiedad.
Para hacer un formulario Delphi capaz de recuperar los datos de una base de datos de Access con el componente ADOQuery, simplemente suelte todos los componentes relacionados de acceso a datos y conscientes de datos en él y haga un enlace como se describe en los capítulos anteriores de este curso. Los componentes de acceso a datos: DataSource, ADOConnection junto con ADOQuery (en lugar de ADOTable) y un componente compatible con datos como DBGrid es todo lo que necesitamos.
Como ya se explicó, al usar el Inspector de objetos, establezca el enlace entre esos componentes de la siguiente manera:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// construye el ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = False
Hacer una consulta SQL
El componente TADOQuery no tiene un Nombre de la tablapropiedad como lo hace TADOTable. TADOQuery tiene una propiedad (TStrings) llamada SQL que se usa para almacenar la instrucción SQL. Puede establecer el valor de la propiedad SQL con el Inspector de objetos en tiempo de diseño o mediante código en tiempo de ejecución.
En tiempo de diseño, invoque el editor de propiedades para la propiedad SQL haciendo clic en el botón de puntos suspensivos en el Inspector de objetos. Escriba la siguiente instrucción SQL: "SELECT * FROM Authors".
La declaración SQL se puede ejecutar de una de dos maneras, dependiendo del tipo de declaración. Las declaraciones del lenguaje de definición de datos generalmente se ejecutan con ExecSQL método. Por ejemplo, para eliminar un registro específico de una tabla específica, podría escribir una instrucción DELETE DDL y ejecutar la consulta con el método ExecSQL.
Las sentencias SQL (ordinarias) se ejecutan configurando el TADOQuery. Activo propiedad a Cierto o llamando alAbierto método (esencialmente el mismo). Este enfoque es similar a recuperar datos de una tabla con el componente TADOTable.
En tiempo de ejecución, la instrucción SQL en la propiedad SQL se puede usar como cualquier objeto StringList:
con ADOQuery1 comienza Cerrar;
SQL.Clear;
SQL.Add: = 'SELECT * FROM Authors' SQL.Add: = 'ORDER BY authorname DESC' Abrir;
final;
El código anterior, en tiempo de ejecución, cierra el conjunto de datos, vacía la cadena SQL en la propiedad SQL, asigna un nuevo comando SQL y activa el conjunto de datos llamando al método Open.
Tenga en cuenta que obviamente no tiene sentido crear una lista persistente de objetos de campo para un componente ADOQuery. La próxima vez que llame al método Open, el SQL puede ser tan diferente que puede cambiar todo el conjunto de nombres (y tipos) archivados. Por supuesto, este no es el caso si estamos usando ADOQuery para obtener las filas de una sola tabla con el conjunto constante de campos, y el conjunto resultante depende de la parte WHERE de la instrucción SQL.
Consultas dinámicas
Una de las grandes propiedades de los componentes de TADOQuery es el Params propiedad. Una consulta parametrizada es aquella que permite la selección flexible de fila / columna utilizando un parámetro en la cláusula WHERE de una instrucción SQL. La propiedad Params permite parámetros reemplazables en la instrucción SQL predefinida. Un parámetro es un marcador de posición para un valor en la cláusula WHERE, definida justo antes de abrir la consulta. Para especificar un parámetro en una consulta, use dos puntos (:) antes del nombre de un parámetro.
En tiempo de diseño, use el Inspector de objetos para establecer la propiedad SQL de la siguiente manera:
ADOQuery1.SQL: = 'SELECCIONAR * DESDE aplicaciones DONDE tipo =: apptype'
Cuando cierre la ventana del editor SQL, abra la ventana Parámetros haciendo clic en el botón de puntos suspensivos en el Inspector de objetos.
El parámetro en la instrucción SQL anterior se llamaapptype. Podemos establecer los valores de los parámetros en la colección Params en tiempo de diseño a través del cuadro de diálogo Parámetros, pero la mayoría de las veces cambiaremos los parámetros en tiempo de ejecución. El cuadro de diálogo Parámetros se puede utilizar para especificar los tipos de datos y los valores predeterminados de los parámetros utilizados en una consulta.
En tiempo de ejecución, los parámetros se pueden cambiar y la consulta se puede volver a ejecutar para actualizar los datos. Para ejecutar una consulta parametrizada, es necesario proporcionar un valor para cada parámetro antes de la ejecución de la consulta. Para modificar el valor del parámetro, utilizamos la propiedad Params o el método ParamByName. Por ejemplo, dada la instrucción SQL como la anterior, en tiempo de ejecución podríamos usar el siguiente código:
con ADOQuery1 comience
Cerca;
SQL.Clear;
SQL.Add ('SELECCIONAR * DESDE aplicaciones DONDE tipo =: tipo de aplicación');
ParamByName ('apptype'). Valor: = 'multimedia';
Abierto;
final;
Al igual que cuando se trabaja con el componente ADOTable, ADOQuery devuelve un conjunto o registros de una tabla (o dos o más). La navegación a través de un conjunto de datos se realiza con el mismo conjunto de métodos que se describe en el capítulo "Detrás de datos en conjuntos de datos".
Navegando y editando la consulta
En general, el componente ADOQuery no debe usarse cuando se realiza la edición. Las consultas basadas en SQL se utilizan principalmente con fines informativos. Si su consulta devuelve un conjunto de resultados, a veces es posible editar el conjunto de datos devuelto. El conjunto de resultados debe contener registros de una sola tabla y no debe usar ninguna función agregada de SQL. La edición de un conjunto de datos devuelto por ADOQuery es lo mismo que editar el conjunto de datos de ADOTAble.
Ejemplo
Para ver alguna acción de ADOQuery, codificaremos un pequeño ejemplo. Hagamos una consulta que se pueda usar para buscar las filas de varias tablas en una base de datos. Para mostrar la lista de todas las tablas en una base de datos, podemos usar el GetTableNamesmétodo de la ADOConnection componente. GetTableNames en el evento OnCreate del formulario llena el cuadro combinado con los nombres de las tablas y el botón se utiliza para cerrar la consulta y volver a crearla para recuperar los registros de una tabla seleccionada. Los controladores de eventos () deberían verse así:
procedimiento TForm1.FormCreate (remitente: TObject);
empezar
ADOConnection1.GetTableNames (ComboBox1.Items);
final;
procedimiento TForm1.Button1Click (remitente: TObject);
var tblname: cadena;
empezar
if ComboBox1.ItemIndex entonces Exit;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
con ADOQuery1 comience
Cerca;
SQL.Text: = 'SELECCIONAR * DESDE' + tblname;
Abierto;
final;
final;
Tenga en cuenta que todo esto se puede hacer mediante el uso de ADOTable y su propiedad TableName.