Willian Jhonnes L. dos Santos wrote: > Olá, galera... > > Seguinte: o problema é cascudo! > > Em uma determinada aplicação desenvolvida em Delphi3 tenho objetos > TStoredProc e TQuery manipulando informações no BD (Oracle 10g > Enterprise) via Oracle Client 9.0. Até aí, tudo bem. A aplicação é > legada e NÃO há como migrá-la para uma versão mais atual do Delphi sem > impactar em nosso cronograma. Digo isso para que respostas como "muda > pro Delphi 2007" ou "usa o ODAC", as quais não ajudam em nada, não apareçam. > > Voltando ao caso, em 'n' formulários tenho objetos TQuery e TStoredProc > instanciados e trabalhando normalmente. Porém, em certas situações, eles > teimam em causar problemas. Em certas máquinas, a execução de dois > métodos Close em dois componentes distintos (TQuery ou TStoredProc, isso > independe) simplesmente encerra a aplicação! Isso sem nenhuma mensagem > de exceção. > > Debugando a aplicação, me deparei com uma mensagem *INFORMATIVA* de > violação de acesso! O texto da mensagem é este: > > access violation at 0x4da2ed3d: read of address 0xffaaadcc > 83 3A 00 74 63 E8 39 10 00 00 64 8B
Praticamente certo de que alguém está tentando usar um objeto que já foi destruído. > Exatamente como aparece na caixa de mensagem. Após clicar em ok, a > aplicação é encerrada. Em uma consulta ao google, a pesquisa pelo código > de erro me retornou isto [1]. Não ajuda, isso é meramente um endereço de memória. > Alguém tem alguma idéia de como resolver (ou contornar, mesmo com POG) > este problema? Reitero: respostas como "muda pro Delphi 2007" ou "usa o > ODAC" não ajudam. > > Dentre uma das tentativas, tentamos compilar a aplicação em Delphi7, mas > o problema persiste. Tenho a alternativa de usar o ODAC, mas, como já > disse, o impacto no nosso cronograma seria gigantesco, pois esta é a > maior de todas as nossas aplicações em produção. Se o problema aparece em Delphi 7, então é certo que está na sua aplicação. Do contrário, numa hipótese muito remota, poderia ser bug da vcl. Dica: ligue as informações de debug da sua aplicação e use as units com informações de debug: project | options | compiler | use debug dcu. Quando o erro pipocar, veja um backtrace (Ctrl+F3) e use a criatividade para tentar adivinhar quem está apontando para o objeto destruído. Boa sorte. -- Joao Morais > Abraços e espero ter sido claro o suficiente (se não fui, me desculpem > e, por favor, me questionem)... > > [1] - > http://www.google.com.br/search?hl=pt-BR&rlz=1G1GGLQ_PT-BRBR293&q=0x4da2ed3d&btnG=Pesquisar&meta= >