FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cancelar CICLO
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Cancelar CICLO
Posted: Mon Feb 02, 2015 12:44 PM
Compañeros del foro buenos días...

Lo que pasa es que estoy corriendo un ciclo, pero eventualmente necesito cancelarlo. Es posible que sea una pregunta un poco tonta pero no se como hacer esto.

Saludos

Code (fw): Select all Collapse
IF nRegistros#0
  oConsCA:MoveFirst()
  Do While !oConsCA:Eof()

    vR_Ter:=if(valtype(oConsCA:Fields( "docu_terce" ):Value)="U",space(0),oConsCA:Fields( "docu_terce" ):Value)
    vR_Con:=if(valtype(oConsCA:Fields( "id_compraventa" ):Value)="U",0,oConsCA:Fields( "id_compraventa" ):Value)
    vR_Pro:=oConsCA:Fields( "id_proyecto" ):Value

    vR_Lot:=if(valtype(oConsCA:Fields( "id_lote" ):Value)="U",0,oConsCA:Fields( "id_lote" ):Value)
    vR_Tip:=if(valtype(oConsCA:Fields( "id_tipo_lote" ):Value)="U",0,oConsCA:Fields( "id_tipo_lote" ):Value)
    vR_Maz:=if(valtype(oConsCA:Fields( "id_manzana" ):Value)="U",0,oConsCA:Fields( "id_manzana" ):Value)

    vConsCB:="INSERT INTO lyma_cobro_serv (ss_regist,ss_estado,ss_tercer,ss_contra,ss_lotesp,ss_tiplot,ss_manzan,ufecha,uhoras) VALUES ('"+;
            alltrim(vFReg)+"','A','"+alltrim(vR_Ter)+"',"+alltrim(str(vR_Con))+","+;
            alltrim(str(vR_Lot))+","+alltrim(str(vR_Tip))+","+alltrim(str(vR_Maz))+",'"+vFec+"','"+vTim+"')"
    TRY
      oCon:Execute(vConsCB)
    CATCH oError
      FW_ShowAdoError(oCon)
    END

    oConsCA:MoveNext()
    oProgress2:nPosition++
    sysrefresh()

  EndDo
ENDIF
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cancelar CICLO
Posted: Mon Feb 02, 2015 01:19 PM
Code (fw): Select all Collapse
   local nKey := VK_RETURN


IF nRegistros#0
  oConsCA:MoveFirst()

  Do While !oConsCA:Eof()

     DO CASE
     CASE nKey == VK_ESCAPE .OR. GETKEYSTATE( VK_ESCAPE ) .OR. ;
                  LASTKEY() = VK_ESCAPE

        EXIT

    ENDCASE


    vR_Ter:=if(valtype(oConsCA:Fields( "docu_terce" ):Value)="U",space(0),oConsCA:Fields( "docu_terce" ):Value)
    vR_Con:=if(valtype(oConsCA:Fields( "id_compraventa" ):Value)="U",0,oConsCA:Fields( "id_compraventa" ):Value)
    vR_Pro:=oConsCA:Fields( "id_proyecto" ):Value

    vR_Lot:=if(valtype(oConsCA:Fields( "id_lote" ):Value)="U",0,oConsCA:Fields( "id_lote" ):Value)
    vR_Tip:=if(valtype(oConsCA:Fields( "id_tipo_lote" ):Value)="U",0,oConsCA:Fields( "id_tipo_lote" ):Value)
    vR_Maz:=if(valtype(oConsCA:Fields( "id_manzana" ):Value)="U",0,oConsCA:Fields( "id_manzana" ):Value)

    vConsCB:="INSERT INTO lyma_cobro_serv (ss_regist,ss_estado,ss_tercer,ss_contra,ss_lotesp,ss_tiplot,ss_manzan,ufecha,uhoras) VALUES ('"+;
            alltrim(vFReg)+"','A','"+alltrim(vR_Ter)+"',"+alltrim(str(vR_Con))+","+;
            alltrim(str(vR_Lot))+","+alltrim(str(vR_Tip))+","+alltrim(str(vR_Maz))+",'"+vFec+"','"+vTim+"')"
    TRY
      oCon:Execute(vConsCB)
    CATCH oError
      FW_ShowAdoError(oCon)
    END

    oConsCA:MoveNext()
    oProgress2:nPosition++
    sysrefresh()

  EndDo
ENDIF


Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Cancelar CICLO
Posted: Mon Feb 02, 2015 03:22 PM

karinha Muchas Gracias por Responder...

Efectivamente funciono..... Pero ahora me surge otra duda.

Resulta que coloque un msgNoYes("Confirma?"), si el usuario dice si, se sale del proceso.
Pero si dice no el mensaje se repite hasta que finaliza ciclo...

Alguna idea de como solucionarlo?

Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cancelar CICLO
Posted: Mon Feb 02, 2015 03:52 PM
Intenta:

Code (fw): Select all Collapse
   WHILE LASTKEY() != VK_ESCAPE
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Cancelar CICLO
Posted: Mon Feb 02, 2015 04:17 PM

Leandro:

Si el usuario responde NO, cambia el valor de nKey

nKey := VK_RETURN

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Cancelar CICLO
Posted: Mon Feb 02, 2015 04:26 PM
Creo que esta es la mejor manera.
1.-El ciclo en si es rapido, poner un sysrefresh en cada ciclo podría provocar un error. lo mejor es ponerlo cada n registros.
2.-lo mas rapido es crear una sola cadena para la insertar de una vez todos los registros, esto es eficiente en la mayoria de los casos.
Code (fw): Select all Collapse
lSalirSinGrabar := .F.
nContador  := 0
cInsertSQL := ""

IF nRegistros > 0

  oConsCA:MoveFirst()

  DO WHILE !oConsCA:Eof() 
    
    IF LaskKey()==VK_ESC
       IF MsgNoYes("Desa cancelar la inserción de registros?")
            lSalirSinGrabar := .t.
            EXIT
       ENDIF
    ENDIF

    vR_Ter:=if(valtype(oConsCA:Fields( "docu_terce" ):Value)="U",space(0),oConsCA:Fields( "docu_terce" ):Value)
    vR_Con:=if(valtype(oConsCA:Fields( "id_compraventa" ):Value)="U",0,oConsCA:Fields( "id_compraventa" ):Value)
    vR_Pro:=oConsCA:Fields( "id_proyecto" ):Value

    vR_Lot:=if(valtype(oConsCA:Fields( "id_lote" ):Value)="U",0,oConsCA:Fields( "id_lote" ):Value)
    vR_Tip:=if(valtype(oConsCA:Fields( "id_tipo_lote" ):Value)="U",0,oConsCA:Fields( "id_tipo_lote" ):Value)
    vR_Maz:=if(valtype(oConsCA:Fields( "id_manzana" ):Value)="U",0,oConsCA:Fields( "id_manzana" ):Value)

    vConsCB:="INSERT INTO lyma_cobro_serv (ss_regist,ss_estado,ss_tercer,ss_contra,ss_lotesp,ss_tiplot,ss_manzan,ufecha,uhoras) VALUES ('"+;
            alltrim(vFReg)+"','A','"+alltrim(vR_Ter)+"',"+alltrim(str(vR_Con))+","+;
            alltrim(str(vR_Lot))+","+alltrim(str(vR_Tip))+","+alltrim(str(vR_Maz))+",'"+vFec+"','"+vTim+"')"

    cInsertSQL += cInsertSQL + ";"

    oConsCA:MoveNext()
    
    IF ++nContador > 20
       SysRefresh()
    ENDIF

  ENDDO

  IF !empty( cInsertSQL ) .and. !lSalirSinGrabar
   
    TRY
      oCon:Execute( cInsertSQL )
    CATCH oError
      FW_ShowAdoError( oCon )
    END
  
  ENDIF

ENDIF
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Cancelar CICLO
Posted: Tue Feb 03, 2015 02:55 AM
Que tal asi;

Code (fw): Select all Collapse
oApp := TAplication()

REDEFINE BUTTON oCiclo ID 101 OF oDlg ACTION Proceso()
REDEFINE BUTTON oStop  ID 102 OF oDlg ACTION oApp:lStop := .t. 
...
..

Function Proceso()
cInsertSQL := ""

IF nRegistros > 0

  oConsCA:MoveFirst()

  DO WHILE !oConsCA:Eof() .AND. !oApp:lStop
    
    vR_Ter:=if(valtype(oConsCA:Fields( "docu_terce" ):Value)="U",space(0),oConsCA:Fields( "docu_terce" ):Value)
    vR_Con:=if(valtype(oConsCA:Fields( "id_compraventa" ):Value)="U",0,oConsCA:Fields( "id_compraventa" ):Value)
    vR_Pro:=oConsCA:Fields( "id_proyecto" ):Value

    vR_Lot:=if(valtype(oConsCA:Fields( "id_lote" ):Value)="U",0,oConsCA:Fields( "id_lote" ):Value)
    vR_Tip:=if(valtype(oConsCA:Fields( "id_tipo_lote" ):Value)="U",0,oConsCA:Fields( "id_tipo_lote" ):Value)
    vR_Maz:=if(valtype(oConsCA:Fields( "id_manzana" ):Value)="U",0,oConsCA:Fields( "id_manzana" ):Value)

    vConsCB:="INSERT INTO lyma_cobro_serv (ss_regist,ss_estado,ss_tercer,ss_contra,ss_lotesp,ss_tiplot,ss_manzan,ufecha,uhoras) VALUES ('"+;
            alltrim(vFReg)+"','A','"+alltrim(vR_Ter)+"',"+alltrim(str(vR_Con))+","+;
            alltrim(str(vR_Lot))+","+alltrim(str(vR_Tip))+","+alltrim(str(vR_Maz))+",'"+vFec+"','"+vTim+"')"

    cInsertSQL += cInsertSQL + ";"

    oConsCA:MoveNext()
    
   ENDDO

  IF !empty( cInsertSQL ) .and. !oApp:lStop
   
    TRY
      oCon:Execute( cInsertSQL )
    CATCH oError
      FW_ShowAdoError( oCon )
    END
  
  ENDIF

ENDIF
 
return(Nil)

CLASS TAplicacion
DATA lStop INIT .f.
ENDCLASS
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Cancelar CICLO
Posted: Tue Feb 03, 2015 12:34 PM

Gracias a todos por sus respuestas....

Willi voy a probar tu solucion me gusta que se pueda cancelar con el boton. La implemento y les cuento.

Gracias.

Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]

Continue the discussion