• Jueves 28 de Marzo de 2024, 22:04

Autor Tema:  Filtrar datawindows desde otro  (Leído 2099 veces)

angelito1121

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Filtrar datawindows desde otro
« en: Miércoles 28 de Octubre de 2009, 19:15 »
0
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

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Filtrar datawindows desde otro
« Respuesta #1 en: Miércoles 28 de Octubre de 2009, 22:44 »
0
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

Te muestra solo el ultimo porque no estas CONCATENANDO los valores solo lo estas reasignando a la variable filtro2


Código: Visual Basic
  1. do while not sqlca.sqlcode = 100
  2.    filtro2 += "detalle_cod_ped = '" + deta + "' AND "   // Equivalente: filtro2 = filtro2 + "detalle_cod_ped = '" + deta + "' AND "
  3. fetch detalle into :deta;
  4. loop
  5. close detalle;
  6.  
  7. filtro2= trim(filtro2)
  8.  
  9. if len(filtro2)>3
  10.     filtro2 = trim(mid(filtro2,1,len(filtro2)-3 )) //Quitar el "AND" sobrante
  11. end if
  12.  
  13. dw_2.setfilter(filtro2)
  14. dw_2.filter()
  15. dw_2.retrieve()
  16.  
  17.  
  18.  

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
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================