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

 

Responder a