Power Builder - Consulta en dw

 
Vista:

Consulta en dw

Publicado por Alberto (88 intervenciones) el 19/09/2006 16:14:06
Tengo un dw en la cual me muestra datos segun el parametro que le envio, ese parámetro lo recupero con un codigo sql, todo funciona correctamente siempre y cuando el select bote un solo valor, pero si bota dos o mas valores, en el dw solo me muestra el primer valor, por ejm:

//codigo sql
select codigo
into :ls_codigo
from tabla1

//pasando parametro al dw

dw_1.retrieve(ls_codigo)

si el select arroja un solo valor, por decir 10 entonces ese valor se graba en el ls_codigo, y luego lo paso al dw, pero suponiendo que el select arroje, 10 y 11, en el ls_codigo solo graba el 10 y por logica en el dw solo se pasa el 10, mas no el 11, como puedo hacer para que pase todos los valores que arroje el select.

Gracias por la ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta en dw

Publicado por Jorge (37 intervenciones) el 19/09/2006 18:25:21
Lo ideal sería que utilices un where. es lógico que si encuentra mas de un valor siempre tomará el primero si tu select no contiene un where.
El siguiente codigo obtiene los valores obtenidos en el select y lo introduce en un array. si te funcionaria si tu codigo es de tipo numerico.
Long ll_i
integer li_cod, li_codigo[]
ll_i = 0
Declare c1 cursor For
Select Distinct codigo From tabla1;
Open C1;
Fetch c1 Into :li_cod;
Do While sqlca.sqlcode = 0
ll_i++
li_codigo[ll_i] = li_cod
Fetch c1 Into :li_cod;
Loop
Close c1;

tendrias que modificar el select de tu datawindow en el tipo de operador tendrias que poner between y en valores :argumento1 and :argumento2 con esto obtienes resultados entre dos datos. (solo numericos)
recuerda si tu select en tu dw el operador es = solo te retorna valores iguales al argumento.

dw_1.retrieve(ls_codigo[1], ls_codigo[ll_i])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta en dw

Publicado por Jancarlo (890 intervenciones) el 19/09/2006 21:43:43
Otra manera de hacerlo es similar a la que mencionan anteriormente, basicamente el cusor seria el mismo.

La modificación que tendrias que hacer en tu DW seria de agregar un argumento que sea un Array, es decir String Array, Number Array,etc

en el where del query de tu dw colocarias algo asi

...
..Where campo = parametro[ ]

Y al hacer un retrieve a tu dw solo pasa el array

dw_1.retrieve( li_variable[ ] )

Nota: es parecido a usar un "In (10,11,12,n)" solo que usando arrays

Suerte !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta en dw

Publicado por Jorge (37 intervenciones) el 19/09/2006 23:17:57
Me corrigo yo mismo. bueno no precisamente es una corrección, porque el código que puse anteriormente si funciona pero con algunas limintaciones solo si el campo de retrieve es numerico. lo que biene a continacion es una mejora digamos mas calidad.

Long ll_i
String ls_cod, ls_codigo[]
ll_i = 0
Declare c1 cursor For
Select Distinct codigo From tabla1;
Open C1;
Fetch c1 Into :ls_cod;
Do While sqlca.sqlcode = 0
ls_codigo[Upperbound(ls_codigo) + 1] = ls_cod
Fetch c1 Into :ls_cod;
Loop
Close c1;

para explicar . Utilizo distinct para obtener valores no duplicados.
los datos obtenidos se almacena en un array.

ahora modifica el retrieve de tu dw.
el tipo del argumento deve ser string array
en el where el operador dever ser In
codigo In :argumento

dw_1.retrieve(ls_codigo)

saludos desde Lima-Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta en dw

Publicado por Jancarlo (890 intervenciones) el 20/09/2006 02:12:35
Claro, en resumen sólo cambia de acuerdo al tipo de dato que vayas a utilizar para el argumento de recuperación ( lógicamente también para el campo donde se esta filtrando). Cabe mencionar que cuando se usa argumentos tipo array puedes usar los operadores de comparación " In " y " = " , prúebalos y veras que te dan el mismo resultado.

Espero ya hayas resuelto tu problema... cualquier duda nos consultas.

Suerte !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar