by Willi Quintana » Fri Nov 02, 2007 12:06 am
El error esta al abrir las DBFs, pueba asi:
#include "Fivewin.ch"
FUNCTION MAIN()
LOCAL nCta, wMonto, wFecha_ven
REQUEST DBFCDX
RddSetDefault("DBFCDX")
nCta="1212"
wmonto=120
wFecha_Ven=Ctod("20/01/2006")
CreoIndices()
ModCta( ncta, wmonto, wFecha_Ven )
RETURN NIL
Function ModCta( ncta, wmonto, wfecha_ven )
local nSaldo //1-Actualizo saldo en bancos.dbf
MsgInfo(wmonto)
IF wmonto = 0
RETURN nil
ENDIF
//IF !AbroDbf( .T., "DBFCDX", "BANCOS", "BANCOS", "i_ban")
// MsgInfo("No fu posible verificar cuenta" + CRLF + "Base de datos no disponible")
// RETURN .F.
//ENDIF
USE BANCOS ALIAS BANCOS SHARED NEW
SET INDEX TO BANCOS
If FLOCK()
browse()
EndIf
BANCOS->( DbSeek(ncta, .f.) )
IF BANCOS->( Found() )
// DO WHILE .T.
// IF BANCOS->( DbRLock() )
nSaldo := BANCOS->saldo + wmonto
? _field->saldo
_field->saldo := nSaldo
BANCOS->( DbCommit() )
BANCOS->( DbUnlock() )
// EXIT
// ENDIF
// ENDDO
ENDIF
BANCOS->( DbCloseArea() )
//2-Cargo el monto de movimientos en el saldo de la fecha correspondiente en saldos.dbf
// IF !AbroDbf( .T., "DBFCDX", "SALDOS", "SALDOS", "i_Saldos")
// MsgInfo("No fu posible verificar cuenta" + CRLF + "Base de datos no disponible")
// RETURN .F.
// ENDIF
USE SALDOS ALIAS SALDOS SHARED NEW
SET INDEX TO SALDOS
SALDOS->( DbSeek( ncta+Dtos(wfecha_ven), .t. ) ) //softseek
IF ! SALDOS->( Eof() ) .and. SALDOS->cta = ncta .and. SALDOS->fecha = wfecha_ven
DO WHILE .t.
IF SALDOS->( DbRLock() )
REPLACE SALDOS->saldo WITH SALDOS->saldo + wmonto
SALDOS->( DbCommit() )
SALDOS->( DbUnlock() )
EXIT
ENDIF
ENDDO
ELSE
SALDOS->( DbSkip( -1 ) )
IF ! SALDOS->( Bof() ) .and. SALDOS->cta = ncta
sald_ant = SALDOS->saldo
DO WHILE .t.
IF SALDOS-> ( DbRLock() )
SALDOS->( DbAppend() )
IF ! SALDOS->( Neterr() )
REPLACE SALDOS->cta WITH ncta
REPLACE SALDOS->fecha WITH wfecha
REPLACE SALDOS->saldo WITH sald_ant+wmonto
SALDOS->( DBCommit() )
SALDOS->( DbUnlock() )
EXIT
ENDIF
ENDIF
ENDDO
ELSE
DO WHILE .t.
SALDOS->( DbAppend() )
IF ! SALDOS->( Neterr() )
REPLACE SALDOS->cta WITH ncta
REPLACE SALDOS->fecha WITH wfecha_ven
REPLACE SALDOS->saldo WITH wmonto
SALDOS->( DbCommit() )
SALDOS->( DBUnlock() )
EXIT
ENDIF
ENDDO
ENDIF
ENDIF
//3-Actualizo todos los saldos de la cuenta desde la fecha del movimiento incrementndolos
//en ese monto (siempre en saldos.dbf).
SALDOS->( DbSkip() )
DO WHILE ! SALDOS->( Eof() ) .and. SALDOS->cta = ncta
DO WHILE .t.
IF SALDOS->( DbRLock() )
REPLACE SALDOS->saldo WITH SALDOS->saldo + wmonto
SALDOS->( DbCommit() )
SALDOS->( DBUnlock() )
EXIT
ENDIF
ENDDO
SALDOS->( DbSkip() )
ENDDO
SALDOS->( DbCloseArea() )
//verifico que anduvo
// IF !AbroDbf( .T., "DBFCDX", "BANCOS", "BANCOS", "i_ban")
// MsgInfo("No fu posible verificar cuenta" + CRLF + "Base de datos no disponible")
// RETURN .F.
// ENDIF
USE BANCOS ALIAS BANCOS SHARED NEW
SET INDEX TO BANCOS
SELECT BANCOS
BANCOS->( DbSeek(ncta, .f.) )
MsgInfo(BANCOS->Saldo)
CLOSE DATABASES
RETURN .T.
/*Fin Funcin ModCta
-------------------------------------------------------------------------------------------*/
FUNCTION CreoIndices()
IF FILE("SALDOS.CDX")
ERASE "SALDOS.CDX"
ENDIF
IF FILE("BANCOS.CDX")
ERASE "BANCOS.CDX"
ENDIF
use saldos exclusive
if .not. neterr()
pack
index on cta+dtos(fecha) TAG i_saldos
endif
commit
close
use bancos exclusive
if .not. neterr()
pack
index on cuenta TAG i_ban
index on banco TAG i_ban2
endif
commit
close data
/*Fin Funcin CreoIndices
-------------------------------------------------------------------------------------------*/
//Funciones de Apertura y Cierre
FUNCTION AbroDbf( lNew, cDriver, cNom_dbf, cAlias, uOrden, lShared, lReadOnly )
LOCAL intentos:=0, Result:=.F.
IF cDriver=NIL
cDriver=cRDD
ENDIF
IF cAlias=NIL
cAlias=cNom_dbf
ENDIF
IF lReadOnly=NIL
lReadOnly=.T.
ENDIF
IF lShared=NIL
lShared=.T.
ENDIF
IF uOrden=NIL
uOrden:=1
ENDIF
DbUseArea(lNew, cDriver, cNom_dbf, cAlias, lShared, lReadOnly)
DO WHILE .T.
DO WHILE NetErr() .and. Intentos<100
DbUseArea(lNew, cDriver, cNom_dbf, cAlias, lShared, lReadOnly)
Intentos++
ENDDO
IF UPPER( Alias() ) = UPPER( cAlias )
Intentos=0
Result:=.T.
EXIT
ELSE
IF ! MsgYesNo("No se pudo acceder a la base, Reintenta?")
Intentos:=0
EXIT
ELSE
Intentos=0
ENDIF
ENDIF
ENDDO
IF Result
OrdSetFocus(uOrden)
ENDIF
RETURN Result
/*Fin Funcin AbroDbf
Salu2