Power Builder - ya no se que hacer..!!!

 
Vista:

ya no se que hacer..!!!

Publicado por jose (113 intervenciones) el 18/08/2010 18:19:50
hola al foro.

tengo el siguiente programa.

for i= 1 to dw_1.rowcount()
dni=dw_1.getitemstring(i,"dni")
registro=dw_1.getitemstring(i,"registro")

declare rubro_boletas cursor for select cod,titulo from rubros where muestra='S' ;
open rubro_boletas;
fetch rubro_boletas into :cod_rubro,:rubro ;
do while SQLCA.sqlcode = 0
if mid(cod_rubro,1,1)="I" then
tipo_rubro="Ingresos"
end if
if mid(cod_rubro,1,1)="D" then
tipo_rubro="Descuentos"
end if
if cod_rubro<>"I01" then // poniendo el valor del sueldo basico
monto=0
end if
insert into boletas (registro ,dni , cod_rubro, rubro,dias,horas,monto)
values (:registro,:dni,:cod_rubro,:rubro,0,0,:monto) ;
fetch rubro_boletas into :cod_rubro,:rubro ;
loop
next
commit;

El problema es el siguiente, que en la tabla rubros tengo 20 registro, cuando termina de ejecutarse e ingreso a ver los datos en la tabla boletas, solo veo el ultimo registro.

Puse unos messagebox dentro del bucle para si hay datos en el cursor y si existe.

gracias por el apoyo que puedan darme
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
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:ya no se que hacer..!!!

Publicado por JeinnerH (646 intervenciones) el 18/08/2010 19:02:18
Hola Jose.

Veo que haces el Declare del Cursor dentro del For, podría ser ese el problema, que la primera vez lo declara y las veces siguientes te da error, porque ya está declarado.

Por facilidad, te recomiendo que crees un DW con el select del Cursor, en la ventana donde haces el proceso y lo pongas Visible=FALSE. Y utilices este para recorrerlo, en lugar del Cursor, así puedes ver y estar seguro de que la información que se está recorriendo es la correcta siempre.

Aquí te pongo el mismo código con algunas modificaciones. No estoy seguro cómo se comporta el Open dentro del For. Puedes probarlo.

Declare rubro_boletas Cursor for
Select cod,titulo
From rubros Where muestra='S';

For i=1 to dw_1.rowcount()
dni=dw_1.GetItemString(i, "dni")
registro=dw_1.GetItemString(i, "registro")

Open rubro_boletas;
Fetch rubro_boletas Into :cod_rubro, :rubro;
Do While SQLCA.SQLCode = 0
If mid(cod_rubro,1,1) = "I" Then &
tipo_rubro="Ingresos"

If mid(cod_rubro,1,1)="D" Then &
tipo_rubro="Descuentos"

If cod_rubro <> "I01" Then &
monto=0 // poniendo el valor del sueldo basico

Insert Into boletas
(registro, dni, cod_rubro, rubro, dias, horas, monto)
Values (:registro, :dni, :cod_rubro, :rubro, 0, 0, :monto);
If SQLCA.SQLCode <> 0 Then
Messagebox('ERROR', 'ERROR INTERNO('+String(SQLCA.SQLCode)+'):'+SQLCA.SQLErrText)
EXIT
End If

Fetch rubro_boletas Into :cod_rubro, :rubro ;
Loop
Close rubro_boletas;
Next
COMMIT;
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