Ir para conteúdo
Fórum Script Brasil
  • 0

Problema sério com Access Violation


fajo

Pergunta

Olá a todos,

uso o D2007 com Firebird 2.1.2 e estou com um grande problema com uma mensagem de Access Violation q teima em aparecer; e o pior, só aparece na máquina do cliente, na minha máquina não; São 4 tabelas, a T1 é mestre, a T2 e T3 são detalhes da T1, e a T4 é detalhe da T2, estou usando um só botão pra gravar com esse código:

if dm.cdsDPessoais.State in [dsinsert,dsedit] then
   try
    DBXTrans := dm.ConConcess.BeginTransaction(TDBXIsolations.ReadCommitted);
    if dm.cdsDPessoais.State = dsinsert then
     begin
      dm.cdsDPessoaisID_D_PESSOAIS.AsInteger := dm.GeraId('SELECT MAX(ID_D_PESSOAIS) FROM D_PESSOAIS');
      dm.cdsDPessoais.ApplyUpdates(0);
     end
    else
     dm.cdsDPessoais.ApplyUpdates(0);
   dm.ConConcess.CommitFreeAndNil(DBXTrans);
   except
    on e:Exception do
     begin
       dm.ConConcess.RollbackFreeAndNil(DBXTrans);
       raise;
     end;
   end;

  if dm.cdsVeicProposta.State in [dsinsert,dsedit] then
   try
    DBXTrans := dm.ConConcess.BeginTransaction(TDBXIsolations.ReadCommitted);
    if dm.cdsVeicProposta.State = dsinsert then
     begin
      dm.cdsVeicPropostaID_VEICULOS_PROPOSTA.AsInteger := dm.GeraId('SELECT MAX(ID_VEICULOS_PROPOSTA) FROM VEICULOS_PROPOSTA');
      dm.cdsVeicPropostaID_D_PESSOAIS.AsInteger := dm.cdsDPessoaisID_D_PESSOAIS.AsInteger;
      dm.cdsVeicProposta.ApplyUpdates(0);
     end
    else
      dm.cdsVeicProposta.ApplyUpdates(0);
   dm.ConConcess.CommitFreeAndNil(DBXTrans);
   except
    on e:Exception do
     begin
       dm.ConConcess.RollbackFreeAndNil(DBXTrans);
       raise;
     end;
   end;


  if dm.cdsVeicTroca.State in [dsinsert,dsedit] then
   try
    DBXTrans := dm.ConConcess.BeginTransaction(TDBXIsolations.ReadCommitted);
    if dm.cdsVeicTroca.State = dsinsert then
     begin
      dm.cdsVeicTrocaID_VEICULO.AsInteger := dm.GeraId('SELECT MAX(ID_VEICULO) FROM VEICULOS_TROCA');
      dm.cdsVeicTrocaID_D_PESSOAIS.AsInteger := dm.cdsDPessoaisID_D_PESSOAIS.AsInteger;
      dm.cdsVeicTroca.ApplyUpdates(0);
     end
    else
      dm.cdsVeicTroca.ApplyUpdates(0);
   dm.ConConcess.CommitFreeAndNil(DBXTrans);
   except
    on e:Exception do
     begin
       dm.ConConcess.RollbackFreeAndNil(DBXTrans);
       raise;
     end;
   end;

  if dm.cdsPropostas.State in [dsinsert,dsedit] then
   try
    dm.cdsPropostas.DisableControls;
    DBXTrans := dm.ConConcess.BeginTransaction(TDBXIsolations.ReadCommitted);
    if dm.cdsPropostas.State = dsinsert then
     begin
//      dm.cdsPropostasID_PROPOSTA.AsInteger := dm.GeraId('SELECT MAX(ID_PROPOSTA) FROM PROPOSTAS');
      dm.cdsPropostasID_VEICULOS_PROPOSTA.AsInteger := dm.cdsVeicPropostaID_VEICULOS_PROPOSTA.AsInteger;
      dm.cdsPropostas.ApplyUpdates(0);
     end
    else
      dm.cdsPropostas.ApplyUpdates(0);
   dm.ConConcess.CommitFreeAndNil(DBXTrans);
   dm.cdsPropostas.Close;
   dm.cdsPropostas.Open;
   dm.cdsPropostas.EnableControls;
   except
    on e:Exception do
     begin
       dm.ConConcess.RollbackFreeAndNil(DBXTrans);
       raise;
     end;
   end;

todo esse código já é resultado de modificações q tentei fazer para achar uma solução, mas nada até agora; como vocês podem ver, eu gosto de gerar os id's pelo próprio delphi, no entanto devido ao problema do access violation, resolvi implementar no banco, mas não resolveu, continua a mensagem, e o pior, não é sempre, uma vez aqui e outra acolá, e só na última tabela, a T4.

Não sei mais o q fazer.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
mensagem de Access Violation q teima em aparecer; e o pior, só aparece na máquina do cliente, na minha máquina não

resolvi implementar no banco, mas não resolveu, continua a mensagem, e o pior, não é sempre, uma vez aqui e outra acolá, e só na última tabela, a T4.

O que acontece quando voce tenta editar o mesmo registro em 2 maquinas ao mesmo tempo ?

um grande problema com uma mensagem de Access Violation

quando se esta trabalhando em rede, não pode deixar 2 usuarios ou mais usarem o mesmo registro ao mesmo tempo

voce deve controlar o acesso .... se um usuário já acessou este registro voce deve bloqueá-lo para os outros, até que este usuário tenha finalizado a sua operação

e o pior, não é sempre, uma vez aqui e outra acolá, e só na última tabela, a T4

verifique e verá que isso só ocorre quando acontece de 2 usuários estarem usando o mesmo registro

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Jhonas, beleza,

o sistema só está em uma máquina, por enquanto, e o erro dá quando estou inserindo um registro;

inseri dados do cliente, grava;

inseri dados do veiculo, grava;

inseri dados da proposta do veiculo, grava..., as vezes dá tudo certo, as vezes, Access Violation.

é isso.

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Não foi o que voce escreveu:

Access Violation q teima em aparecer; e o pior, só aparece na máquina do cliente, na minha máquina não

inseri dados da proposta do veiculo, grava..., as vezes dá tudo certo, as vezes, Access Violation.
se esta usando apenas uma maquina não era para acontecer .... no entanto percebi que este código:
if dm.cdsPropostas.State in [dsinsert,dsedit] then
   try
    dm.cdsPropostas.DisableControls;
    DBXTrans := dm.ConConcess.BeginTransaction(TDBXIsolations.ReadCommitted);
    if dm.cdsPropostas.State = dsinsert then
     begin
//      dm.cdsPropostasID_PROPOSTA.AsInteger := dm.GeraId('SELECT MAX(ID_PROPOSTA) FROM PROPOSTAS');
      dm.cdsPropostasID_VEICULOS_PROPOSTA.AsInteger := dm.cdsVeicPropostaID_VEICULOS_PROPOSTA.AsInteger;
      dm.cdsPropostas.ApplyUpdates(0);
     end
    else
      dm.cdsPropostas.ApplyUpdates(0);
   dm.ConConcess.CommitFreeAndNil(DBXTrans);
   dm.cdsPropostas.Close;
   dm.cdsPropostas.Open;
   dm.cdsPropostas.EnableControls;
   except
    on e:Exception do
     begin
       dm.ConConcess.RollbackFreeAndNil(DBXTrans);
       raise;
     end;
   end;

está diferente dos outros .... veja se o motivo não seria por isso

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Jhonas,

desculpe se me expressei mal, mas, quando disse "minha máquina", me referi ao meu pc, q uso para programar;

com relação ao código diferente, se você estiver se referindo a essa linha:

//      dm.cdsPropostasID_PROPOSTA.AsInteger := dm.GeraId('SELECT MAX(ID_PROPOSTA) FROM PROPOSTAS');

foi comentada, pois, devido ao erro, resolvi implementar a geração de codigo diretamente no banco par ver se resolvia, no entanto, de nada adiantou.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Jhonas, desculpe a demora, é q tive q viajar a trabalho e só agora to com um tempinho.

bom com relação a:

Me referi a todas as linhas ....

olhei e só está diferente as seguintes linhas:

dm.cdsPropostas.DisableControls;

dm.cdsPropostas.Close;
dm.cdsPropostas.Open;
dm.cdsPropostas.EnableControls;

mas já foram colocadas em época de desespero, pode ignorá-las.

O erro continua.

abraço

Editado por fajo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...