Power Builder - borrar en un dw varios registros a la vez

 
Vista:

borrar en un dw varios registros a la vez

Publicado por martin guevara s (13 intervenciones) el 06/05/2003 18:57:19
tengo en un dw un campo check el cual me permite verifcar si el registro esta o no seleccionado
el codigo del evento clicked del boton eliminar es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
IF li_count <> 0 THEN
                li_tot_estcheck_1 = 0
                FOR li_fila = 1 TO li_count
	IF dw_detalle_oferta.object.estcheck[li_fila] = '1' THEN
                      	li_tot_estcheck_1 = li_tot_estcheck_1  + 1
	END IF
                 NEXT
                 li_fila = 1
                 li_tot_estcheck_2 = 0
               DO WHILE li_fila <= li_count
	IF dw_detalle_oferta.object.estcheck[li_fila] = '1' THEN
                      	dw_detalle_oferta.DeleteRow(li_fila)
		dw_detalle_oferta.AcceptText()
		dw_detalle_oferta.Update()
	                      li_tot_estcheck_2 = li_tot_estcheck_2  + 1
	END IF
	IF li_tot_estcheck_2 = li_tot_estcheck_1 THEN EXIT
	li_fila = li_fila + 1
LOOP
COMMIT;

este codigo borra a veces en otras no

gracias por su cooperacion
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:borrar en un dw varios registros a la vez

Publicado por Ricardo (1957 intervenciones) el 06/05/2003 19:21:56
Hola que tal:

Utiliza primero
1
dw_detalle_oferta.AcceptText()

y enseguida

1
2
dw_detalle_oferta.DeleteRow(li_fila)
dw_detalle_oferta.Update()

Saludos!
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:borrar en un dw varios registros a la vez

Publicado por Milson Cardona (613 intervenciones) el 06/05/2003 21:49:13
Un saludo especial desde COLOMBIA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// por
IF li_count <> 0 THEN
   li_fila = 1
   DO WHILE li_fila <= li_count
           IF dw_detalle_oferta.object.estcheck[li_fila] = '1' THEN
                   dw_detalle_oferta.DeleteRow(li_fila)
             END IF
             li_fila = li_fila + 1
     LOOP
 
     IF dw_detalle_oferta.UPDATE(true,false) = 1 THEN
            COMMIT USING sqlca ;
     ELSE
            ROLLBACK USING sqlca ;
            MESSAGEBOX('ERROR','no se grabo')
      END IF
END IF
IF li_tot_estcheck_2 = li_tot_estcheck_1 THEN EXIT
dw_detalle_oferta.AcceptText()
dw_detalle_oferta.Update()
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

PERDON... se me fue este POST sin querer

Publicado por Milson Cardona (613 intervenciones) el 06/05/2003 22:19:30
PERDON... se me fue este POST sin querer no lo tomes en cuenta..... mientras preparaba mi sugerencia...

la puedes encontrar en el siguiente
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:borrar en un dw varios registros a la vez

Publicado por Milson Cardona (613 intervenciones) el 06/05/2003 22:13:36
Un saludo especial desde COLOMBIA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// porque no intentas con este código, le hice varios cambios porque me
// pareció habían lineas que sobraban
 
//si hay registros en el DW entra
IF dw_detalle_oferta.rowcount() > 0 THEN
   //inicializamos el contador
   li_fila = 1
 
   //mientras el contador sea menor o igual a el total de registros del DW
   DO WHILE li_fila <= dw_detalle_oferta.rowcount()
     //si el registro esta mascado para borrarse se borra pero no se aumenta el contador
     //para que en la próxima pasada chequee la misma fila para ver si se debe borrar
     IF dw_detalle_oferta.object.estcheck[li_fila] = '1' THEN
        dw_detalle_oferta.DeleteRow(li_fila)
     ELSE
	//si la fila no era para borrar se aumenta el contador
        li_fila = li_fila + 1
     END IF
   LOOP //fin ciclo
 
   //se hace el UPDATE
   IF dw_detalle_oferta.UPDATE(true,false) = 1 THEN
	//si no hay problema se hace el commit
      COMMIT USING sqlca ;
   ELSE
	//si hay problema se devuelven los cambios que se hicieron en la DB y se saca un error
      ROLLBACK USING sqlca ;
      MESSAGEBOX('ERROR','no se grabo')
   END IF
END IF
SIGUE EN EL OTRO POST
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

CONTINUACION

Publicado por Milson Cardona (613 intervenciones) el 06/05/2003 22:14:55
CONTINUA

1
2
3
4
5
6
7
8
9
10
11
//sobra porque siempre serán iguales las 2 variables, si haces el conteo
//en el mismo ciclo
IF li_tot_estcheck_2 = li_tot_estcheck_1 THEN EXIT
 
// sobra porque el Accepttext siempre llama al evento itemchanged y es peligroso utilizarlo en //otros eventos..... si necesariamente lo debes poner, hazlo al principio pero nunca dentro del
//ciclo
dw_detalle_oferta.AcceptText()
 
//el update es mejor y mas optimo hacerlo una sola vez  por eso se hace
//al final del ciclo.
dw_detalle_oferta.Update()
MOTIVO DEL PROBLEMA QUE TENIAS
el problema esta en que siempre que borres un registro de un DW, el registro siguiente tomará la posición del que fue eliminado, y como el contador li_fila ya chequeo esa posición (para borrar el registro anterior) este registro que tomo su nueva posicion no será borrado

espero que la anterior explicación no este muy enrredada y la puedas entender

ANALIZA EL ALGORITMO Y ME DICES QUE NO ENTIENDES, te recomiendo que le hagas un paso a paso
para que este seguro que funciona, yo casi que te lo garantizaria pero es mejor estar seguros

espero que te sirva para que soluciones el 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:borrar en un dw varios registros a la vez

Publicado por GRACIAS MILSON (613 intervenciones) el 06/05/2003 23:27:34
Vale la observacion
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:borrar en un dw varios registros a la vez

Publicado por marianux (1 intervención) el 07/05/2003 00:12:28
Vaya vaya, milson agradeciendo a milson, solo lo haces para aumentar tus post, eres un cretino, que solo contesta por contestar.
es mas estoy segura que contestaras esto solo por aumentar tus post.
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:borrar en un dw varios registros a la vez

Publicado por aclaracion (13 intervenciones) el 07/05/2003 16:42:23
solo quisiera aclarar que el correo anterior cometi un error al llenar los datos del nombre y correo, bueno el objetivo era dar gracias a milson por su ayuda.
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:borrar en un dw varios registros a la vez

Publicado por Harold Castellanos (5 intervenciones) el 24/09/2014 01:23:37
1
2
3
4
5
6
7
8
9
10
11
12
13
//yo lo hago de esta manera se parece a la de mislson...
long li_fila
li_fila=1
DO WHILE li_fila <= dw_4.rowcount()
	dw_4.deleterow(0)
LOOP
If dw_4.update(true) = 1 then
	Commit;
Else
	Rollback;
End if
 
//igual gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

borrar en un dw varios registros a la vez

Publicado por andrew (1 intervención) el 10/01/2020 22:27:31
1
2
3
4
5
6
7
8
9
10
11
12
boolean result,res
 
long li_fila,fila2,con
con=dw_1.rowcount()
li_fila=1
DO WHILE li_fila <= con
	  result =dw_1.IsSelected(con)
	   IF result=true THEN
		    dw_1.deleterow(con)
		end if
con --
LOOP
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