|
Ora viva Centuri�es, Tenho um aplica��o com v�rios blocos de
transac��es explicitamente inicializados com: Call SqlPrepareAndExecute(hSql, ‘BEGIN TRANSACTION Nome_da_Transac��o’) dentro das quais executo comandos DML em cascata. O que se
pretende � que, a n�o-execu��o de um� dos “statements” provoque o “Rollback”
dos restantes envolvidos na mesma transac��o. O que tem ocorrido em oposi��o ao
pretendido s�o “DeadLocks” e “Commits” de apenas alguns dos Statements gerando assim dados inconsistentes na BD. As minhas d�vidas s�o: - Ser� que devo definir o “Isolation Level” para cada
transac��o? E se for o caso, como � que combino �
com o “Lock”
das tabelas? Abaixo tem um fragmento do meu c�digo
para ilustrar melhor a situa��o. Agrade�o antecipadamente a colabora��o
de todos. !!CB!! 174 Call SqlExists( 'Select * from Utilizadores
where CodUtilizador=:df1', bExiste
) If bExiste ����������� Set strSql[0]=
'Update Utilizadores WITH (TABLOCKX, HOLDLOCK) set Nomeutilizador=:df2, Password1=:df3 where CodUtilizador=:df1' ����������� Set strSql[1]=
'Update� ASARMAZ WITH (TABLOCKX,
HOLDLOCK) set CodLoja=:sCodLoja,
NomeArz=:df2 where codArmz=:df1' ����������� Set sTName='T_UPD_USER' Else ����������� Set strSql[0]='Insert into
Utilizadores (Codutilizador, Nomeutilizador,
Password1 Values ( :df1, :df2, :df3) ����������� Set strSql[1]= 'Insert into
ASARMAZ (codArmz, CodLoja, NomeArz) values ( :df1, :sCodLoja, :df2 )' ����������� Set sTName='T_INS_USER' Set intPos=0 Call SalArrayGetUpperBound( strSql,1, intTamArr ) When SqlError ����������� Set bRollback=TRUE ����������� Return TRUE Call SqlPrepareAndExecute( hSql, 'SET TRANSACTION ISOLATION
LEVEL SERIALIZABLE' ) Call SqlPrepareAndExecute( hSql, "'BEGIN TRANSACTION'
|| sTName" ) While intPos <= intTamArr ����������� Call SqlPrepareAndExecute( hSql,� strSql[intPos]) ����������� Set intPos=intPos+1 If bRollback ����������� Call SqlPrepareAndExecute( hSql, 'ROLLBACK') Else ����������� Call SqlPrepareAndExecute( hSql, 'COMMIT') Cl�udio Francisco Sebasti�o Paulo (mailto:[EMAIL PROTECTED]) T�cnico de Sistemas de Informa��o
(Information Systems Technician) SISTEC – Sistemas, Tecnologia e Ind�stria,
S.A.R.L. (http://www.sistec.co.ao ; http://www.ti.sistec.co.ao ; http://www.netangola.com ) Av. Cde. Che-Guevara, 189/195 c.p. 3245
Luanda-Angola Tel. +244.2.325350 / 325360 / 325372 Fax. +244.2.3324.88 |
