Programación General > Power Builder
Filtrar datawindows desde otro
(1/1)
angelito1121:
Disculpen, otra vez soy yo con otro problema, me han dejado que haga 2 datawindows con esta BD
//img264.imageshack.us/img264/360/dibujo2is.jpg
y me han pedido que haga un datawindows filtrado, en el primero tengo que ingresar el codigo del cliente en un single line edit y debe mostrarme todos los datos con el cod_cli ingresado
el segundo datawindows debe mostrarme los detalles del pedido segun el resultado del primer datawindows, lo he codificado y me queda así:
//declaración de variables
string filtro, filtro2,deta
//primer filtro
filtro = "clientes_cod_cli ='" + sle_cliente.text + "'"
dw_1.setfilter(filtro)
dw_1.filter()
dw_1.retrieve()
//select para segundo filtro
DECLARE detalle CURSOR FOR
SELECT detalle.cod_ped
FROM clientes,
detalle,
pedidos
WHERE ( pedidos.cod_ped = detalle.cod_ped ) and
( pedidos.cod_cli = clientes.cod_cli ) and
( ( clientes.cod_cli = :sle_cliente.text ) ) ;
open detalle;
fetch detalle into :deta;
do while not sqlca.sqlcode = 100
filtro2 = "detalle_cod_ped = '" + deta + "'"
fetch detalle into :deta;
loop
close detalle;
dw_2.setfilter(filtro2)
dw_2.filter()
dw_2.retrieve()
//img692.imageshack.us/img692/7919/dibujo3.png
como ven, solo me muestra el resultado del ultimo cod_ped pero no de los otros 2, podrían decirme como solucionarlo?, gracias de antemano
F_Tanori:
A la larga y con el incrementod e informacion en la base de datos, los cursores se vuelven un dolor de cabeza... consumen muchos recursos y es recomendable evitarlos en lo posible;
segun veo lo que pretendes es crear un filtro con todos los valores que te muestre el cursor
--- Citar ---do while not sqlca.sqlcode = 100
filtro2 = "detalle_cod_ped = '" + deta + "'"
fetch detalle into :deta;
loop
--- Fin de la cita ---
Te muestra solo el ultimo porque no estas CONCATENANDO los valores solo lo estas reasignando a la variable filtro2
--- Código: Visual Basic ---do while not sqlca.sqlcode = 100 filtro2 += "detalle_cod_ped = '" + deta + "' AND " // Equivalente: filtro2 = filtro2 + "detalle_cod_ped = '" + deta + "' AND "fetch detalle into :deta;loopclose detalle; filtro2= trim(filtro2) if len(filtro2)>3 filtro2 = trim(mid(filtro2,1,len(filtro2)-3 )) //Quitar el "AND" sobranteend if dw_2.setfilter(filtro2)dw_2.filter()dw_2.retrieve()
Puede que haya algunos errorcillos, no lo probe; prueba a ver que tal
tambien te recomiendo utilizar las etiquetas [CODE] para que sea mas entendible
Saludos
Navegación
Ir a la versión completa