Aplicação em rede, problema com transação - IBX INTERBASE

08/02/2006

0

Pessoal,

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

Techsoft

Responder

Posts

09/02/2006

Techsoft

Alguém poderia me ajudar com este problema???

Estou realmente precisando descobrir onde estou errando.

Obrigado!


Responder

09/02/2006

Aroldo Zanela

Colega,

Neste caso, acredito que o uso de uma tabela auxiliar de ´sequenciadores´ seria uma opção segura.


Responder

09/02/2006

Siam

Também tive um problema parecido e resolví com try/except aplicando Select Max 10 vezes e tentando gravar. Na décima vez que entrar no except, lanço a exceção.


Responder

10/02/2006

Techsoft

Obrigado pelas respostas. Vou ver se consigo resolver com uma dessas formas!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar