Ayuda con ADS, bloqueos y transacciones

Ayuda con ADS, bloqueos y transacciones

Postby carlos vargas » Sat Sep 03, 2011 5:32 pm

Estimados, esta es una duda que he tenido por mucho tiempo, como se implementa correctamente los bloqueos y transacciones con el ads, ahora que empiezo a probar el Client/Server
esto es algo que tengo, pero no me siento a gusto con el codigo, podria ayudarme con esto, les agradeceria mucho su inestimable ayuda

Code: Select all  Expand view

FUNCTION ProgramacionP_Grabar()
   LOCAL lGrabado := FALSE
   LOCAL oError

   //TODO:validar datos

   InitTrans()
   TRY
      IF CTRL->( DbLockRec() ) CLIE->( DbLockRec() ) .and. PRES->( DbApndRec() ) .and. MOVI->( DbApndRec() )

         CTRL->CONT_PRES   += 1

         CLIE->SALDO_ACT   += oRecSol:MONTO_PRES

         MOVI->NUM_PRES    := oRecSol:NUM_PRES
         MOVI->NUM_CLIE    := oRecSol:NUM_CLIE
         MOVI->FECHA       := oRecSol:FECHA_DESE
         MOVI->DEBE        := oRecSol:MONTO_PRES
         MOVI->SALDO       := oRecSol:MONTO_PRES

         PRES->NUM_PRES    := oRecSol:NUM_PRES
         PRES->NUM_CLIE    := oRecSol:NUM_CLIE
         PRES->TIPO_PRES   := oRecSol:TIPO_PRES
         PRES->FECHA_SOLI  := oRecSol:FECHA_SOLI
         PRES->FECHA_APRO  := oRecSol:FECHA_APRO
         PRES->FECHA_ENTR  := oRecSol:FECHA_ENTR   //?
         PRES->MONTO_SOLI  := oRecSol:MONTO_SOLI
         PRES->MONTO_APRO  := oRecSol:MONTO_APRO
         PRES->MONTO_PRES  := oRecSol:MONTO_PRES
         PRES->MONTO_ENTR  := oRecSol:MONTO_ENTR
         PRES->INTE_TASA   := oRecSol:INTE_TASA
         PRES->INTE_MONT   := oRecSol:INTE_MONTO
         PRES->MANT_TASA   := oRecSol:MANT_TASA
         PRES->MANT_MONT   := oRecSol:MANT_MONT
         PRES->DESE_TASA   := oRecSol:DESE_TASA
         PRES->DESE_MONT   := oRecSol:DESE_MONT
         PRES->DED_INSGAR  := oRecSol:DED_INSGAR
         PRES->DED_ESCPUB  := oRecSol:DED_ESCPUB
         PRES->DED_GASLEG  := oRecSol:DED_GASLEG
         PRES->DED_CAMFIA  := oRecSol:DED_CAMFIA
         PRES->DED_ATRFIA  := oRecSol:DED_ATRFIA
         PRES->DED_RECMOR  := oRecSol:DED_RECMOR
         PRES->FECHA_INI   := oRecSol:FECHA_INI
         PRES->FECHA_FIN   := oRecSol:FECHA_FIN
         PRES->PLAZO       := oRecSol:PLAZO_SOLI
         PRES->NUM_CUOTAS  := oRecSol:NUM_CUOTAS
         PRES->VAL_CUOTA   := oRecSol:VAL_CUOTA
         PRES->ENTREGADO   := TRUE                 //?
         PRES->PAGADO      := FALSE
         PRES->SALDO       := ( oRecSol:NUM_CUOTAS * oRecSol:VAL_CUOTA )
         PRES->( ADSSetEmptyValue() )

         DBCommitAll()
         DBUnlockAll()

         lGrabado := TRUE
      ELSE
         DBUnlockAll()
      ENDIF

      EndTrans()

   CATCH oError
      RollTrans()
      ShowError( oError )
   END

   IF lGrabado
      oBrw:Refresh()
      SysRefresh()
   ENDIF

RETURN lGrabado

 


la verdad me parece incorrecta, que pasaria si el primer append es correcto y el segundo append falla?
no seria mejor algo asi:
Code: Select all  Expand view

      ELSE
         //aca hacer que el catch procese el error  (no se como)
         DBUnlockAll()                                
      ENDIF

      EndTrans()

   CATCH oError
      RollTrans()
      ShowError( oError )
   END
 


salu2
Last edited by carlos vargas on Sat Sep 03, 2011 6:43 pm, edited 1 time in total.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1691
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Ayuda con ADS, bloqueos y transacciones

Postby Patricio Avalos Aguirre » Sat Sep 03, 2011 6:22 pm

Hola

Yo utilizo Ads con tablas ADT

Lo que hago es bloquear y luego peguntar si se puede hacer la transaccion

.-primero siempre bloqueo el unico registro que tiene la bd parame.adt y asi evito que otro archivo este bloqueado posterior a este

Code: Select all  Expand view
if Parame->( !NetRLock() ) .or. Movi_Sal->( !NetFLock() ) .or. Docu_BF->( !NetFLock() ) .or. Articu->( !NetFLock() )
    dbUnlockAll()
   alert( "mensaje" )
    return( .f. )
endif
 


luego pregunto si se puede hacer la Transaction

Code: Select all  Expand view
if !AdsBeginTransaction( ViewUsu():hConnection )
  dbUnlockAll()
  msginfo("mensaje..." )
  return( .f. )
endif

..
..
...

AdsCommitTransaction( ViewUsu():hConnection )

 


puede que haya otra mejor manera..
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 41 guests