Array
(
)

Travar inserção de Registro

Gilberto Fernandes
   - 29 mar 2006

Pessoal do fórum estou com um probleminha no meu sistema, eu ja tenho q rotina q grava o código (PK) da tabela na hora da gravação, soh q tenho um cálculo de saldo financeiro a ser feito de acordo com essa ordem, a rotina esta(va) funcionando perfeitamente, porém, qdo umas três máquinas pedem a gravação ao mesmo tempo, a rotina naum funciona, constatei q eh por causa do tempo q leva para buscar esse saldo logo depois de pegar o código...

o q eu to querendo saber eh se existe um jeito de eu travar as gravações até eu terminar de gravar um...

to usando, interbase+delphi 7, com sqlclientdataset

quem puder me ajudar eu agradeço! :)


Thomaz_prg
   - 30 mar 2006

não sei se o q você quer é a melhor saída, mas enfim...
você pode criar uma tabela com um único campo, por exemplo CONTROLE, onde você indica se a inserção está ou não permitida. Por exemplo, se não estiver permitida, ele tem um valor 0 por exemplo, daí vocÊ retornar uma exception indicando isso. Crie uma trigger para o evento OnBeforeInsert, e verifique o valor do campo:

#Código


if ( exists(select controle from tabcontrole where controle = 0) ) then
exception EXC_PROIB_INS ´Inserção não permitida!´;


isso retornará uma exceção ao sistema quando isto ocorrer. Isto tem alguns fatores contra, como por exemplo, o fato dea luz acabar por exemplo, então o computador que bloqueou a inserção, não conseguirá desfazer esse bloqueio, podendo gerar alguma inconsistência.
Uma outra forma seria vocÊ bloquear a tabela toda

#Código
select * from tabela with lock


Isto não permitirá nenhum tipo de edição na tabela até terminar.


Gilberto Fernandes
   - 30 mar 2006

valeu Tomaz, vou dar uma olhada nessa sua primeira sugestão, parece q pode resolver o meu problema

brigadão :lol: