Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Bufferização / Travamento de registros...
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Titre:
Bufferização / Travamento de registros...
Divers
Thread ID:
00694152
Message ID:
00694152
Vues:
58
Temos um sistema que funciona em com várias estações atualizando as mesmas tabelas ao mesmo tempo ( estoque e movimentação ).

Fazendo testes, com duas estações, verificamos o seguinte :

As duas transações são iniciadas, quase que ao mesmo tempo.

Quando primeira estação é desligada ( algum travamento, reset no computador ) antes de um END TRASACTION / ROLLBACK, os registros ficam travados, não possibilitando a atualização por outra estação, mesmo que em produtos diferentes.


Já utilizei buffer de registro e de tabela. Mas no insert da segunda tabela, retorna um erro que o registro esta travado por outro usuário.

Abaixo segue o código de simulação que desenvolvemos :
lcCod  = [000007]  && na primeira estação utilizamos o codigo 000001, para caracterizar produtos diferentes.


SET MULTILOCKS ON
SET REPROCESS TO 5 SECONDS && para aguardar até 5 segundos.

lBuff  = CURSORSETPROP("Buffering",2,[g2_estoq])
lBuff2 = CURSORSETPROP("Buffering",3,[g2_estmo])

lUp    = .T.
lUp2   = .T.
BEGIN TRANSACTION 

		m.lnSaldo = 0
		UPDATE gereswin!g2_estoq SET qtd_est = AtualizaEstoque(qtd_est,m.lnValor,@m.lnSaldo) WHERE codigo=lcCod
		lUp   = TABLEUPDATE(2,.t.,[g2_estoq],laErroEst)
		
		INSERT INTO g2_estmo (codigo,qtd_lanca,qtd_saldo,historico) VALUES(m.lcCod,m.lnVAlor,m.lnSaldo,[paulo cesar])
		lUp2  = TABLEUPDATE(2,.t.,[g2_estmo],laErroMov)
		IF !lUp OR !lUp2
		   EXIT
		ENDIF
 wait window [Iniciar a segunda estação e Desligar a primeira estação...] 

IF llRollBack
	ROLLBACK
   = TABLEREVERT(.t.,[g2_estoq])
   = TABLEREVERT(.t.,[g2_estmo])
ELSE	
   IF lUp AND lUp2
	END TRANSACTION 
   ELSE
       = AERROR(laErro)
       = MESSAGEBOX([Alteração de dados não realizada ...],0+16,[Erro])
		ROLLBACK 
   = TABLEREVERT(.t.,[g2_estoq])
   = TABLEREVERT(.t.,[g2_estmo])
   ENDIF
ENDIF 
FLUSH

FUNCTION AtualizaEstoque
	LPARAMETERS lnQtd,lnLanca,lnSaldo
	
	m.lnSaldo = m.lnQtd + m.lnLanca
	
	RETURN m.lnSaldo
RETURN
Paulo Cesar Carneiro
desenvolvimento@controplan.com.br


"My God, what have we done?"
-- Capt. Robert Lewis, co-pilot of the Enola Gay, recalling the moment the atomic bomb exploded over Hiroshima

At 8:15 a.m. on August 6 1945
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform