Aplicação em rede, problema com transação - IBX INTERBASE
08/02/2006
0
Estou com problemas no meu sistema, isso nunca tinha acontecido antes, acredito que eu esteja esquecendo de algo na transação pois a situação é a seguinte:
Tenho 1 IBDatabase e 1 IBTransaction, inicialmente estava com problemas que ao excluir um registro isto não refletia para os outros usuários da rede. Consegui contornar isso com um start transaction ao iniciar os forms de cadastro e um commit ao fechar o form.
O IBQuery está com o cachedupdates ativado e estou efetuando o applyupdate ao gravar.
Resolvi o problema da exclusão, porém efetuando outro teste percebi que se dois usuários entrarem na mesma tela de cadastro... o primeiro que salvar o registro, o sistema informa o código corretamente... este código é gerado da seguinte forma... no before post do IBQuery uso:
with TIBQuery.Create(nil) do try Database := frmPrincipal.ibdtbINDante; Transaction := frmPrincipal.ibtraINDante; SQL.Add(´SELECT MAX(CID_ID) AS MCID FROM CID_CIDADE´); Open; if FieldByName(´MCID´).IsNull then ibqryINCadastroCID_ID.AsInteger := 1 else ibqryINCadastroCID_ID.AsInteger := FieldByNAme(´MCID´).AsInteger + 1 finally Close; Free; end;
Bom, fazendo isso pego o último registro e logo em seguida o sistema aplica o applyupdates e salva o registro.
Porém.. se o outro cliente estava com a mesma tela aberta e vai salvar... ao executar o código acima... ele reconhece o último registro como sendo o último registro existente ao abrir a transação... e não o último registro REAL que está no banco... com isso estou tento problemas com a chave primária.... estranho é que não tinha passado por esta situação antes...
O que estou fazendo de errado????
Agradeço a ajuda dos colegas!
Techsoft
Posts
09/02/2006
Techsoft
Estou realmente precisando descobrir onde estou errando.
Obrigado!
09/02/2006
Aroldo Zanela
Neste caso, acredito que o uso de uma tabela auxiliar de ´sequenciadores´ seria uma opção segura.
09/02/2006
Siam
10/02/2006
Techsoft
Clique aqui para fazer login e interagir na Comunidade :)