Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problemas con TQUERY (https://www.clubdelphi.com/foros/showthread.php?t=35819)

ercrizeporta 21-09-2006 17:05:56

problemas con TQUERY
 
hola, estoy un poco pegado en el uso de los TQUERY, y tenía unas cuantas dudas en cuanto a su funcionamiento, ahi van mis preguntas:

1º al definir un tipo TQUERY debo definirle tambien un tdatasource??

2º la consulta sobre lo que kiero visualizar en este tquery donde y como la realizo??en el apartado sql??si es así, puedo usar ahi variables que haya creado en algún form de mi proyecto??

MUCHAS GRACIAS!!!

Caral 21-09-2006 17:20:05

Hola
1 el query ejecuta la sentencia sql, el datasorce enlaza con el componente.
2 la consulta se puede realizar en un reporte, un dbgrid, dbedit, ect., se pueden usar variables de locales o generales, desconozco si se pueden usar variables de otro form que no sea el de uso, en tal caso creo no seria necesario, tal vez creando un tipo y usarlo en tu programa completo.
Saludos

roman 21-09-2006 17:39:09

Por lo general, sólo necesitas el DataSource si quieres presentar los registros que devuelva el Query en controles de edición de datos (TDBEdit, TDBGrid, etc.) o para establecer una relación maestro-detalle con algún otro dataset.

La sentencia SQL, en efecto, la colocas en la propiedad SQL del Query. Esta propiedad es de tipo TStrings, o sea que puedes poner la sentencia en varias líneas.

En cuanto al uso de variables, primero que nada tienes que entender que el código delphi y el código sql son mundos aparte. El código sql lo interpreta el servidor de datos, el cuál es ajeno a tu aplicación. Tú simplemente usas delphi para mandarle sentencias a dicho servidor, pero éste no reconocerá ningún símbolo (variables, constantes, etc.) que uses en tu programa.

Lo anterior no significa que no puedas pasar valores de variables en delphi a las sentencias sql, pero observa la diferencia entre la variable X y el valor de X.

Digamos que tienes una sentencia del tipo:

Código SQL [-]
select * from usuarios where id = 84

pero quieres poder especificar ese id según el valor de alguna variable en tu aplicación, digamos UsuarioId.

No puedes escribir la sentencia

Código SQL [-]
select * from usuarios where id = UsuarioId

porque el servidor de datos no reconocerá el término UsuarioId. En cambio, si escribes algo como:

Código Delphi [-]
Query1.SQL.Add('select * from usuarios where id = ' + IntToStr(UsuarioId));

delphi evaluará el valor de la variable UsuarioId (digamos que es 84), lo convertirá a una cadena (función IntToStr) y el resultado, '84', lo concatenará a la cadena 'select * from usuarios where id = '. De esta forma, el parámetro que finalmente se pasa al método Add es

Código Delphi [-]
'select * from usuarios where id = ' + '84'

esto es,

Código Delphi [-]
'select * from usuarios where id = 84'

que ya es entendible perfectamente para el servidor de datos.

Ahora bien, lo más recomendable para el paso de valores es el uso de parámetros. Los parámetros en un Query son indicadores especiales en el cuerpo de la sentencia que se llenan posteriormente pero antes de la ejecución de la consulta.

Siguiendo el ejemplo anterior, puedes escribir la sentencia:

Código SQL [-]
select * from usuarios where id = :usuario_id

en el SQL del Query. Los dos puntos que preceden al término usuario_id, indican a la componente Query, que se trata de una parámetro cuyo valor debe proporcionarse antes de la ejecución. De no hecerlo así, la componente indicaria un error.

Para llenar el parámetro usas el método ParamByName:

Código Delphi [-]
Query1.ParamByName('usuario_id').AsInteger := UsuarioId;

Con esto, la componente busca en la sentencia sql un parámetro llamado usuario_id y lo sustituye por el valor que se le asigne en ParamByName; en este caso, el valor de la variable UsuarioId.

El uso de parámetros te da un código mucho más limpio que la concatenación de valores al momento de formar la sentencia sql.

// Saludos


La franja horaria es GMT +2. Ahora son las 09:27:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi