Cancelar CICLO

Cancelar CICLO

Postby leandro » 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: Select all  Expand view

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Cancelar CICLO

Postby karinha » Mon Feb 02, 2015 1:19 pm

Code: Select all  Expand view

   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
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cancelar CICLO

Postby leandro » Mon Feb 02, 2015 3: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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Cancelar CICLO

Postby karinha » Mon Feb 02, 2015 3:52 pm

Intenta:

Code: Select all  Expand view

   WHILE LASTKEY() != VK_ESCAPE
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cancelar CICLO

Postby Armando » Mon Feb 02, 2015 4:17 pm

Leandro:

Si el usuario responde NO, cambia el valor de nKey

nKey := VK_RETURN

Saludos
Last edited by Armando on Mon Feb 02, 2015 4:32 pm, edited 1 time in total.
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
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Cancelar CICLO

Postby carlos vargas » Mon Feb 02, 2015 4: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: Select all  Expand view


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)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Cancelar CICLO

Postby Willi Quintana » Tue Feb 03, 2015 2:55 am

Que tal asi;

Code: Select all  Expand view


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


 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Cancelar CICLO

Postby leandro » 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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1481
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 97 guests