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.
Pergunta
fajo
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:
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
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.