Power Builder - para declarar un cursor

 
Vista:

para declarar un cursor

Publicado por johan (21 intervenciones) el 14/09/2002 01:58:20
hola de nuevo he declarado un cursor de la siguiente manera:declare primercur cursor for select idcarpeta,nombre
from carpetas;
open primercur;
fetch primercur into :p,:s;
do until sqlca.sqlcode = 100
ddlb_carpeta.additem(s)//; ddlb_carpeta.AddItem(s);
fetch primercur into :p,:s;
loop
close primercur;

pero lo que yo quiero mostrar en el ddlb es el idcarpeta y el nombre como puedo hacer para que aparezcan los dos juntos o tengo que hacerlo de otra manera. o tengo que usar un datawindow en lugar de un ddbl, espero que me ayuden con este problemita, muy agradecido

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:para declarar un cursor

Publicado por Milson Cardona (613 intervenciones) el 16/09/2002 16:13:58
Un saludo especial desde COLOMBIA.

Si entendí bien la inquietud tuya, lo que quieres hacer es recuperar dos campos de una tabla, y luego adicionarlos a un ddlb, pero que te muestre los dos campos que recuperaste en una misma entrada del ddlb.

bueno, yo te aconsejaría que recuperaras de una vez los dos campos concatenados en el cursor, luegos los sacas en una sola variable del cursor, y esta vble es la que adicionas al ddlb.

mira este ejemplo
declare primercur cursor for
SELECT TO_CHAR(idcarpeta)||' '||nombre
FROM carpetas
USING sqlca;

OPEN primercur;
FETCH primercur into :vble_string;

DO UNTIL sqlca.sqlcode = 100
ddlb_carpeta.additem(vble_string);
FETCH NEXT primercur into :vble_string;
LOOP
CLOSE primercur;

NOTA: esta sintaxis es para ORACLE donde:
TO_CHAR convierte el idcarpeta en un string(porque me imagino que es un numérico)
y las ( ||' '|| ), concatenan el string de idcarpeta con el nombre dejando un espacio entre ambos campos..

te repito, esta sintaxis es para ORACLE, si utilizas sqlserver u otro motor, debes buscar la sintaxis que reemplace a las funciones que te mencione anteriormente

espero que esto te sirva de algo, y me comentas la evolución de tu problema
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:para declarar un cursor//para milson

Publicado por johan (21 intervenciones) el 16/09/2002 23:00:57
mi estimado milson, te hare una consulta no seria mejor que en vez de declarar un cursor use un datawindows para mostrar los codigos y nombres claro que mejor se ve en un ddbl, tengo dos tablas carpetas y titulos
la tabla carpetas consta de idcarpeta,nombre
la tabla titulos consta de idtutilo,nombre,fuente,fecha,idcarpeta
me explico mejor
adu001 aduanas //esto en el datawindow(carpeta)
lo que deseo es recuperar el codigo(de la carpeta) osea adu001 para que se graba en otro datawindow(titulos)
ya que el codigo de carpeta actua como llave foranea en la tabla titulos y si no puedo jalar ese dato no puedo grabar en los demas datos de la tabla titulos, espero que comprendas y me puedas ayudar
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:para declarar un cursor//para milson

Publicado por Milson Cardona (613 intervenciones) el 17/09/2002 00:39:34
yo te recomiendo que utilices un DW_CARPETAS, ya que haces la recuperación de los datos en una sola operación, lo que es más rápido que un CURSOR, que además debe llevar uno a uno los registros a un DDLB(drop down list box).
ahora si lo que deseas es que en un DW_TITULOS(donde recoges la información para grabar los títulos), tengas una forma de mostrarle al usuario los códigos y nombres de las carpetas disponibles en la tabla CARPETAS, para que este elija cualquiera de ellos.

coloca el DW_CARPETAS que creas para recuperar el código y el nombre de la carpeta como un DDDW(drop down datawindow), en el campo idcarpeta del DW_titulos, este hará las veces del DDLB que querias formar con el cursor inicialmente.

espero que esto te aclare las dudas, si tienes alguna otra hazmelo saber para ver si te puedo ayudar en algo más......comentame la evolución de tu problema.

un saludo especial desde COLOMBIA
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:para declarar un cursor

Publicado por Ricardo (1957 intervenciones) el 17/09/2002 16:20:15
Si lo que quieres es crear un cursor para alimentar un DDLB y que lo conformen dos datos prueba con esto:

// declara cursor de capitulos
DECLARE primercur CURSOR FOR
SELECT idcarpeta, nombre
FROM carpetas
ORDER BY carpetas.idcarpeta ASC ;
OPEN primercur;
FETCH primercur INTO :p,:s;
DO WHILE sqlca.sqlcode = 0
ddlb_ejemplo.AddItem('('+STRING(p)+') '+TRIM(s))
IF ddlb_ejemplo.text = '' THEN
ddlb_ejemplo.AddItem('('+STRING(p)+') '+TRIM(s))
END IF
FETCH primercur INTO :p,:s;
LOOP
CLOSE primercur ;

Espero te sirva
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:para declarar un cursor

Publicado por johan (21 intervenciones) el 19/09/2002 00:13:20
pero en la otra declaracionse usaba un :
do until sqlca.sqlcode = 100
ddbl_carpeta.additem(p)
en que cambia esto????
do while sqlca.sqlcode = 0
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:para declarar un cursor

Publicado por Milson Cardona (613 intervenciones) el 19/09/2002 01:28:56
Con la declaración
DO until sqlca.sqlcode = 100, le estas diciendo que se ejecute hasta que el cursor no tenga datos(hasta que se procese el último registro del cursor)

con la sentencia
DO WHILE sqlca.sqlcode = 0, le estas diciendo que se ejecute mientras el cursor tenga datos y no suceda ningún error al recuperarlos.

la diferencia entre las dos sentencias, para ser más explicitos, es que la primera no hace ningún chequeo de errores con los datos del cursor, solo le importa que se procesen todos los registros.
mientras que la segúnda, procesa todos los registros hasta el final siempre y cuando no se genere ningún error.

espero que sea suficientemente claro

un saludo especial desde COLOMBIA..

Una pregunta, como te fue con la solución que te plantee en comentarios anteriores????
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