TQuery

Es este el componente habitual para consulta de bases de datos, especialmente cuando se hayan en varias capas, y concretamente siempre que se pretenda utilizar el lenguaje SQL. Su funcionamiento es similar a TTable con algunas diferencias básicas, no hay selección de tablas pues lo que realmente utiliza es la propiedad SQL del tipo TString, y en la misma es donde se definen las tablas a utilizar y los mandatos correspondientes. Otra característica específica de este componente es la propiedad Params.

Hay distintas formas de ejecución. La más utilizada es aquella que devuelve datos (normalmente el resultado de un Select)

Su funcionamiento no es complejo. Voy a suponer una base de datos creada en Acces de Microsoft, y la denomino « Ventas ». Esta incluirá distintas tablas, vamos a pensar que una de ellas es « Productos » y otra, por ejemplo, « CantidadVentas »

Una sentencia típica podría ser de la forma:

Select CantidadVentas.Idproducto, CantidadVentas.Importe from CantidadVentas where Productos.IdProductos =: SProducto

¿Que estoy haciendo? Un « SQL dinámico », el valor del campo IDProductos lo desconozco, dependerá de la variable SProducto y para ejecutar la consulta tendre que incluir en el código la sentencia:

QueryX.ParamByName(‘IdProductos’).Value:= variable;

Y a continuación

QueryX.Active:=True; // o QueryX.Open
if QueryX.IsEmpty then showmessage (‘No hay datos’);
QueryX.Active:=False; // o QueryX.Close

Si hubiese declarado

Productos.IdProductos =: « Camisetas »

la instrucción primera (que generalmente está antecedida por un Query.Prepare) no tendría sentido, y tampoco estaríamos en forma dinámica.

Otra posibilidad es la mencionada de utilizar la opción Parameters donde tan sólo tendríamos que dar valores y a los datos, la propiedad Value de parámetro IdProductos, que sería el número 0, podríamos ponerla ‘Camisetas’, de Type String.

En los casos en que no se espera la devolución de datos, sino que lo que hacemos es ejecturar mandatos sin retorno, del tipo Create Table o similar, el funcionamiento no es previso preparar y abrir la consulta, sino utilizar la sentencia ExecSQL, es decir:

QueryX.ExecSQL;