Problema com Access Violation
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 vcs 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.
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 vcs 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.
Fajo
Curtidas 0
Respostas
Elip2008
06/08/2009
vc tem certeza q ker colocá-lo como comentário
// dm.cdsPropostasID_PROPOSTA.AsInteger := dm.GeraId(´SELECT MAX(ID_PROPOSTA) FROM PROPOSTAS´);
// dm.cdsPropostasID_PROPOSTA.AsInteger := dm.GeraId(´SELECT MAX(ID_PROPOSTA) FROM PROPOSTAS´);
GOSTEI 0
Osocram
06/08/2009
cara tem q simplificar as coisas qdo ta dando erro...
deixa so uma tabela p ver se da erro.... p ver se é uma tabela especifica ou todas.
como no try exception para trazer o e.message.
passe em qual linha exatamente da o erro.
deixa so uma tabela p ver se da erro.... p ver se é uma tabela especifica ou todas.
como no try exception para trazer o e.message.
passe em qual linha exatamente da o erro.
GOSTEI 0
Mrpostiga
06/08/2009
Os dbx não são muito compativeis com o Firebird 2.1.2.
pode ser ai que esteja o problema
pode ser ai que esteja o problema
GOSTEI 0
Fajo
06/08/2009
elip, essa linha foi comentada pois, devido ao erro em questão, modifiquei a forma de incremento q será feita no banco;
osocram, vou colocar o e.message, é incrível, mas não tinha pensado nisso, depois posto o resultado;
postiga, quando se fala em dbx, vc está falando dos componentes ou do driver de acesso, pois estou usano o driver da Corelab.
Obrigado.
osocram, vou colocar o e.message, é incrível, mas não tinha pensado nisso, depois posto o resultado;
postiga, quando se fala em dbx, vc está falando dos componentes ou do driver de acesso, pois estou usano o driver da Corelab.
Obrigado.
GOSTEI 0