Elisei 0 Denunciar post Postado Abril 22, 2009 Olá, boa tarde a todos. Estou executando um aplicação e neste processo me surge a seguinte mensagem de erro: Access violation at address 00446684 in module 'ALMA.exe'. Read of address 00000048. Não estou fazendo tratamento de excessões em minha aplicação, porém não consigo descobrir onde está o problema. Existe alguma forma de identificar o que está ocorrendo com esta mensagem de erro? Não sei se fui claro, mas acho que isto é um erro comum. Tentei encntrar uma tabela onde existam todos os códigos de erros no Delphi assim como existem em outras linguagens mas não encontrei. Se alguem puder me ajudar, serei grato. Obrigado pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 22, 2009 Na verdade isso pode ser muitos problemas... pode ser um range de um vetor que está estourando, uma tentativa de acesso a uma posição inválida de memória... o ideal é você debugar até encontrar o trecho onde está ocorrendo o erro e fazer um tratamento de erros nele, e verificar o motivo pelo qual o erro ocorre com base neste debug de código fonte. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Elisei 0 Denunciar post Postado Abril 23, 2009 Olá, bom dia. Implementei a rotina de tratamento de exceções no meu evento click: procedure TfrmAlma.BTALMAInfPessoaisClick(Sender: TObject); begin try frmObreiros := TfrmObreiros.Create(Self); except on e: EAccessViolation do begin MessageDlg('Houve uma violação de acesso, com a mensagem' + e.Message, MtError, [MbOk], 0); end; end; end; Porém o erro ainda permanece e não me mostra a MessageDlg. O erro acontece no momento em que chamo (crio) o formulário (frmObreiros := TfrmObreiros.Create(Self);) Trata-se de um MDIChield chamado de um MDIForm Estou efetuando a tratativa do erro de forma errada? Obrigado pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 23, 2009 Talvez porque o tipo de erro retornado não seja o mesmo que especificou no seu except... tenta por assim no tratamento do erro: Try frmObreiros := TfrmObreiros.Create(Self); Except on E : Exception do begin MessageDlg('Houve uma violação de acesso, com a mensagem' + E.Message, MtError, [MbOk], 0); Exit; End; End; Compartilhar este post Link para o post Compartilhar em outros sites
port3r 0 Denunciar post Postado Abril 23, 2009 Muito provável que o erro esteja na criação do seu formulário "frmObreiros". Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Elisei 0 Denunciar post Postado Abril 23, 2009 Boa tarde. Chrnos, desta forma também não tratou a exceção. Na verdade o problema está no momento da criação do formulário como colocou o port3r. O erro indica a linha do create. O mais interessante é que surge a mensagem de erro mas o formulário abre normalmente quando clicado em ok, porem não efetua gravações no banco de dados. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 23, 2009 Você dispara algum evento no onCreate ou no onShow do form na hora que está criando ele? Verificou se o form já não foi criado antes em memória? Muitos programadores esquecem de retirar o form do autocreate do dpr quando criam um fonte novo e ai dá esses pau de memória no create... tente por isso na hora de dar o create: if not assigned(frmObreiros) then frmObreiros := TfrmObreiros.Create(Self); Esse teste impede do form ser criado 2 vezes na mesma aplicação... []'s Compartilhar este post Link para o post Compartilhar em outros sites
Elisei 0 Denunciar post Postado Abril 23, 2009 na verdade eu crio o formulário e ao sair da aplicação, tanto pelo evento formclose ou pelo onclick de algum botão, sempre retiro o form da memória. Não sei o que pode estar acontecendo. Muito estranho. O procedimento que voce me mendou não adianta pois não é o caso. procedure TfrmObreiros.PNGButton9Click(Sender: TObject); begin frmObreiros.Close; frmObreiros := nil; end; procedure TfrmObreiros.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmObreiros := nil; end; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 24, 2009 Você não está já criando este form no source do seu projeto (Project -> View Source)? Se o form estiver sendo criado no fonte do source, a forma como está criando o seu form irá causar violação pelo que me lembro... agora, sem os fontes pra debugar fica difícil identificar onde está o erro do seu processo. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Elisei 0 Denunciar post Postado Abril 24, 2009 Olá, bom dia. Sim, ele já está sendo criado no source como mostra a seguir: program ALMA; uses Forms, unit_alma in 'unit_alma.pas' {frmAlma}, unit_dm in 'unit_dm.pas' {DmAlma: TDataModule}, unit_informacoes_legais_loja in 'unit_informacoes_legais_loja.pas' {frmInfLegaisLoja}, unit_movimentacao_financeira in 'unit_movimentacao_financeira.pas' {frmMovimentacaoFinanceira}, unit_agencias_bancarias in 'unit_agencias_bancarias.pas' {frmAgenciasBancarias}, unit_formas_pagamento in 'unit_formas_pagamento.pas' {frmFormasPagamento}, unit_ident_pgto_irmaos in 'unit_ident_pgto_irmaos.pas' {frmIdentPgtoIrmaos}, unit_sessoes in 'unit_sessoes.pas' {frmSessoes}, unit_obreiros in 'unit_obreiros.pas' {frmObreiros}, unit_popup_contas_contabeis in 'unit_popup_contas_contabeis.pas' {frmPopUpContasContabeis}, unit_historico_visitas in 'unit_historico_visitas.pas' {frmHistoricoVisitas}, unit_relat_mens_obreiros in 'unit_relat_mens_obreiros.pas' {frmRelMensObreiros}, unit_chapas in 'unit_chapas.pas' {frmChapas}, unit_apuracao_eleicoes in 'unit_apuracao_eleicoes.pas' {frmApuracaoEleicoes}, unit_processo_admissao in 'unit_processo_admissao.pas' {frmProcessoAdmissao}, unit_geracao_boletos in 'unit_geracao_boletos.pas' {frmGeracaoBoletos}, unit_trabalhos_apresentados in 'unit_trabalhos_apresentados.pas' {frmTrabalhosApresentados}, unit_cargos_loja in 'unit_cargos_loja.pas' {frmCargosObreiros}, unit_dependentes in 'unit_dependentes.pas' {frmDependentes}, unit_aniversariantes_mes in 'unit_aniversariantes_mes.pas' {frmAniversariantesMes}, unit_mensalidade_obreiros in 'unit_mensalidade_obreiros.pas' {frmMensalidadeObreiros}, unit_inf_complementares in 'unit_inf_complementares.pas' {frmInfComplementares}, unit_irmaos_visitantes in 'unit_irmaos_visitantes.pas' {frmIrmaosVisitantes}, unit_edita_hist_visitas in 'unit_edita_hist_visitas.pas' {frm_selec_reg_edit}; {$R *.res} begin Application.Initialize; Application.Title := 'ALMA - Administração de Lojas Maçônicas'; Application.CreateForm(TfrmAlma, frmAlma); Application.CreateForm(TDmAlma, DmAlma); Application.Run; end. Mas todos os outros forms estão também e funcionam sem violação. Embora já tenha repassado todos os componentes do form, vou repassar de novo, pois acredito que também poderá ser algum campo trocado no datasource do objeto com o nome do atributo da tabela. Compartilhar este post Link para o post Compartilhar em outros sites
Elisei 0 Denunciar post Postado Abril 24, 2009 Boa tarde. O problema foi resolvido. Debugando meu codigo, percebi que coloquei manualmente um comando para que o formulário abrisse em determinada posição da tela. Porém tambem alterei a propriedade Windows State para Maximized. Desta forma o conflito aconteceum ocasionando o erro mencionado. Retirei o posicionamento do formulário e o erro não ocorreu mais. Muito obrigado pela atenção. caso encerrado. Compartilhar este post Link para o post Compartilhar em outros sites