Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   parametros en sql (https://www.clubdelphi.com/foros/showthread.php?t=36966)

nikotina 30-10-2006 12:13:36

parametros en sql
 
hola a todos. mi consulta es como debo hacer para filtrar una tabla por un valor de campo determinado usando sql, es decir, tengo una tabla "ENCABEZADO_PEDIDO" mostrada en un dbgrid, y otra "CUERPO_PEDIDO". por otro lado tengo un SELECT * FROM CUERPO_PEDIDO WHERE NRO_PEDIDO = VAR (es una variable). el tema es el siguiente: cuando recorro la tabla encabezado_pedido guardo en una variable "var" el numero de pedido, aqui viene mi pregunta:

como debo hacer para que filtre la tabla cuerpo_pedido segun el numero de pedido guardado en "var" y me muestre el filtrado en otro dbgrid?.

todo este procedimiento lo debe hacer en cada evento OnDblClik del primer dbgrid.

espero haber sido claro.

saludos a todos.

Caral 30-10-2006 16:51:48

Hola
Con una variable seria asi:
Código Delphi [-]
Var
 A: String;
begin
 A:= 'Hola';
 Query1.sql.text:= 'SELECT * FROM CUERPO_PEDIDO WHERE NRO_PEDIDO = '+A+'';
 Query1.Open;
El problema con la variables es que mantiene el valor, esto quiere decir que cada vez que se marque se ira sumando el valor.
Particularmente me gusta mas que el usuario de el valor colocandolo el en un edit asi:
Código Delphi [-]
begin
 Query1.sql.text:= 'SELECT * FROM CUERPO_PEDIDO WHERE NRO_PEDIDO = '+Edit1.Text+'';
 Query1.Open;
De esta manera el valor lo cambiara el usuario y no tendras que usar variables.
Por supuesto el query estara enlazado al dbgrid por el datasource, en donde vas a mostrar la informacion.
Saludos

aledieb 30-10-2006 17:06:34

También podes usar:

Código Delphi [-]
// SQL A USAR = SELECT * FROM CUERPO_PEDIDO WHERE NRO_PEDIDO = :VAR
query1.parambyname('VAR').astipocorrecto:=valoraasignar;
query1.open;

donde astipocorrecto puede ser asinteger, asstring, etc.
y valoraasignar es lo que queres usar para filtrar la consulta.

jachguate 30-10-2006 18:36:05

Hola.

Creo que lo que queres es mantener "sincronizado" el padre con los hijos, de manera que si el usuario elige el pedido 10, se vean solamente las líneas que componen ese pedido.

¿estoy en lo correcto? (asumiré que si. :D)

Eso en delphi se llama "Master-Detail" y está soportado en todos los datasets que conozco. Si trabajas con queryes, basta que en el query incluyas el o los parámetros necesarios para "conectar" al encabezado con sus detalles.

Supongamos que hay un campo id_pedido que es la llave entre ambos.

Podes dejar que delphi se encargue de mantener la sincronía entre estos con un query parametrizado:

Código SQL [-]
select * from detalle_pedido where id_pedido = :id_pedido

Luego, la propiedad DataSource del query la estableces a un datasource cuyo dataset sea el encabezado.

Ahora, cada vez que se mueva el registro en el encabezado, se cargarán automáticamente los detalles de dicho pedido, siempre que el query del detalle esté abierto.

El secreto es que el query del detalle tenga como parámetros los nombres de los campos que hacen la relación en la tabla maestra.

Hasta luego.

;)

nikotina 31-10-2006 11:09:17

gracias caral, aledieb y jachguate
 
gracias caral, aledieb y jachguate. recien me estoy iniciando en este lenguaje que me parece extraordinario, y con la ayuda de los foreros es mucho mejor. voy a implementar lo que me han enseñado y espero aprender mucho mas asi poder ayudar a otros.


saludos socios.


La franja horaria es GMT +2. Ahora son las 07:42: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