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

(Resolvido) access violation


etspaz

Pergunta

boa tarde a todos,

estou com um problema que est´s me atrapalhando muito.

um projeto em que estou trabalhando esta dando access vilation em varias telas, sempre quando vai abrir alguma tela.

sempre pára num showmodal ;

já tentei debygar mas como não passa do show de um formulario não consigo identificar já que nos eventos destas telas que abor já conferi que não tem nada errado, não achei em nenhum lugar uma chamada a um objeto inexistente na memoria, o que pode ser já que esta acontecendo com todas telas do sistema, só abre a principal.

será alguma coisa com o delphi?

estou precisando de ajuda mesmo, pois é minha segunda semana no estagio que suei pra entrar e não consegui andar nada neste sistema.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
um projeto em que estou trabalhando esta dando access vilation em varias telas, sempre quando vai abrir alguma tela.

sempre pára num showmodal ;

já tentei debygar mas como não passa do show de um formulario não consigo identificar já que nos eventos destas telas que abor já conferi que não tem nada errado, não achei em nenhum lugar uma chamada a um objeto inexistente na memoria, o que pode ser já que esta acontecendo com todas telas do sistema, só abre a principal.

será alguma coisa com o delphi?

etspaz, eu acho pouco provável ser com o Delphi.

você executa algum procedimento no evento OnCreate dos forms?

Você está criando os forms em run-time?

Link para o comentário
Compartilhar em outros sites

  • 0

micheus realmente todos formularios são criados em tempo de execução, mas está definido direitinho lá em project>opções>forms, do lado direito.

e no codigo está certo, já conferi isto, mas taí o codigo do form principal, onde chama os outros forms, pro pessoal da uma analizada.

olhei também no oncreate dos forms e ta normal, compilei em maquinas diferentes e o problemas persistem, então conclui que realmente não são do delphi.

procedure TFrmPrincipal.acClienteExecute(Sender: TObject);
begin
  try
    frm_cliente := TFrm_Cliente.Create(self);
    frm_cliente.ShowModal;
  finally
    FreeAndNil(frm_cliente);
  end;
end;

procedure TFrmPrincipal.acTipoClienteExecute(Sender: TObject);
begin
  if not assigned(Frm_Tipocliente) then
     application.CreateForm(TFrm_Tipocliente,Frm_Tipocliente);
  Frm_Tipocliente.ShowModal;
end;

procedure TFrmPrincipal.acEspecialidadeExecute(Sender: TObject);
begin
  if not assigned(Frm_TipoEspecialidade) then
     application.CreateForm(TFrm_TipoEspecialidade,Frm_TipoEspecialidade);
  Frm_TipoEspecialidade.ShowModal;
end;

procedure TFrmPrincipal.acFamiliaExecute(Sender: TObject);
begin
  if not assigned(Frm_Familia) then
     application.CreateForm(TFrm_Familia,Frm_Familia);
  Frm_Familia.ShowModal;
end;

procedure TFrmPrincipal.acTipoProdutoExecute(Sender: TObject);
begin
  if not assigned(Frm_TipoProduto) then
     application.CreateForm(TFrm_TipoProduto,Frm_TipoProduto);
  Frm_TipoProduto.ShowModal;
end;

procedure TFrmPrincipal.acFornecedorExecute(Sender: TObject);
begin
  if not assigned(Frm_Fornecedor) then
     application.CreateForm(TFrm_Fornecedor,Frm_Fornecedor);
  Frm_Fornecedor.ShowModal;
end;

procedure TFrmPrincipal.acProdutosExecute(Sender: TObject);
begin
  if not assigned(Frm_Produtos) then
     application.CreateForm(TFrm_Produtos,Frm_Produtos);
  Frm_Produtos.ShowModal;
end;

procedure TFrmPrincipal.acFormaPgtoExecute(Sender: TObject);
begin
  if not assigned(Frm_FormaPgto) then
     application.CreateForm(TFrm_FormaPgto,Frm_FormaPgto);
  Frm_FormaPgto.ShowModal;
end;

procedure TFrmPrincipal.acComprasExecute(Sender: TObject);
begin
  {if not assigned(Frm_Compras) then
     application.CreateForm(TFrm_Compras,Frm_Compras);
  Frm_Compras.ShowModal;}
  try
    frmComrpasNew := TfrmComrpasNew.Create(self);
    frmComrpasNew.ShowModal;
  finally
    FreeAndNil(frmComrpasNew);
  end;
end;

procedure TFrmPrincipal.acVendasExecute(Sender: TObject);
begin
  if not assigned(Frm_Vendas) then
     application.CreateForm(TFrm_Vendas,Frm_Vendas);
  Frm_Vendas.ShowModal;
  Frm_Vendas.Free;
  Frm_Vendas := Nil;
end;

procedure TFrmPrincipal.tbtnVendaConsignadaClick(Sender: TObject);
begin
  if not assigned(Frm_BaixadevendaConsignada) then
     application.CreateForm(TFrm_baixadevendaConsignada,Frm_baixadevendaConsignada);
  Frm_BaixadevendaConsignada.ShowModal;
end;

procedure TFrmPrincipal.tbtnContaCorrenteClick(Sender: TObject);
begin

  if not assigned(Frm_ContaCorrente) then
     application.CreateForm(TFrm_ContaCorrente,Frm_ContaCorrente);
  Frm_ContaCorrente.ShowModal;
  Frm_contaCorrente.Free;
  Frm_ContaCorrente := Nil;

end;

procedure TFrmPrincipal.VendasporFornecedor1Click(Sender: TObject);
begin
  if not assigned(Frm_RelatorioVendasFornecedor) then
     application.CreateForm(TFrm_RelatorioVendasFornecedor, Frm_RelatorioVendasFornecedor);
  Frm_RelatorioVendasFornecedor.ShowModal;
end;

procedure TFrmPrincipal.Clientes1Click(Sender: TObject);
begin
    DmDentalita.RvProject.execute;
end;


procedure TFrmPrincipal.VendasporCliente1Click(Sender: TObject);
begin
  if not assigned(Frm_RelatorioVendasCliente) then
     application.CreateForm(TFrm_RelatorioVendasCliente, Frm_RelatorioVendasCliente);
  Frm_RelatorioVendasCliente.ShowModal;
end;

procedure TFrmPrincipal.PorProduto1Click(Sender: TObject);
begin
  if not assigned(Frm_RelatorioVendasProdutos) then
     application.CreateForm(TFrm_RelatorioVendasProdutos, Frm_RelatorioVendasProdutos);
  Frm_RelatorioVendasProdutos.ShowModal;
end;


procedure TFrmPrincipal.Preos1Click(Sender: TObject);
begin
  if not assigned(Frm_ListaPrecos) then
     application.CreateForm(TFrm_ListaPrecos, Frm_ListaPrecos);
  Frm_ListaPrecos.ShowModal;
end;

procedure TFrmPrincipal.Estoque1Click(Sender: TObject);
begin
  if not assigned(Frm_Estoque) then
     application.CreateForm(TFrm_Estoque, Frm_Estoque);
  Frm_Estoque.ShowModal;
end;

procedure TFrmPrincipal.Fornecedor2Click(Sender: TObject);
begin
    DmDentalita.RvProject6.execute;
end;

procedure TFrmPrincipal.Sair2Click(Sender: TObject);
begin
  application.Terminate;
end;

procedure TFrmPrincipal.EstoqueMnimo1Click(Sender: TObject);
begin
    DmDentalita.RvProject7.execute;
end;

procedure TFrmPrincipal.pornome1Click(Sender: TObject);
begin
    //DmDentalita.RvProject.execute;
    try
      frmRelListaClientes := TfrmRelListaClientes.Create(self);
      frmRelListaClientes.ShowModal;
    finally
      FreeAndNil(frmRelListaClientes);
    end;
end;

procedure TFrmPrincipal.porcidade1Click(Sender: TObject);
begin
    //DmDentalita.RvProject8.execute;
    try
      frmRelClientesPorCidade := TfrmRelClientesPorCidade.Create(self);
      frmRelClientesPorCidade.ShowModal;
    finally
      FreeAndNil(frmRelClientesPorCidade);
    end;
end;

procedure TFrmPrincipal.FormShow(Sender: TObject);
var Data,Data2 : String;
begin
   Data := DateToStr(Date());
   Data2 := Copy(Data,1,2) + '.' +  Copy(Data,4,2) + '.' + Copy(Data,7,4);
   Frm_Login := TFrm_Login.Create(self);
   try
     Frm_Login.ShowModal;
   finally
     Frm_Login.Free;
   end;

   Frm_Progresso := TFrm_Progresso.Create(self);
   try
     Frm_Progresso.ShowModal;
   finally
     Frm_Progresso.Free;
   end;
   {Comentado por: Leonel - 31/01/2005
    Comentário: Rotina para ocultar ou exibir o botão de acordo com pendências no follow up
   }
   dmDentalita.SDT_consluta_followup.Close;
   dmDentalita.SDT_consluta_followup.DataSet.CommandText := 'select * from FOLLOW_UP '; //+
    //'where DATA_INICIAL_ALARME <= ' + #39 + Data2 + #39 + ' and STATUS = ' + #39 + 'P' + #39;
   //ShowMessage(dmDentalita.SDT_consluta_followup.DataSet.CommandText);
   dmDentalita.SDT_consluta_followup.Open;
   if (dmdentalita.SDT_consluta_followup.RecordCount > 0) then begin
    btnVerificarPendencias.Visible := True;
    Stbar.Panels.Items[0].Text := 'Há clientes com pendências. Clique em Pendências para ver a lista de pendências';
   end
   else
    btnVerificarPendencias.Visible := False;

    {carrega por padrão o arquivo de imagem que se encontra no mesmo diretório da aplicação chamado: img_gestao.jpg
    caso não encontre a aplicação dá um erro oculto e segue em frente}
    try
        Img_fundo.Picture.LoadFromFile('img_gestao.jpg');
    except
    end;

end;

procedure TFrmPrincipal.Movimentao1Click(Sender: TObject);
begin
   Frm_Movimentos := TFrm_Movimentos.Create(self);
   try
     Frm_Movimentos.ShowModal;
   finally
     Frm_Movimentos.Free;
   end;
end;

procedure TFrmPrincipal.Lanar1Click(Sender: TObject);
begin
  if not assigned(Frm_ContaCorrente) then
     application.CreateForm(TFrm_ContaCorrente,Frm_ContaCorrente);
  Frm_ContaCorrente.ShowModal;
  Frm_ContaCorrente.Free;
  Frm_ContaCorrente := Nil;
end;

procedure TFrmPrincipal.Fechamento1Click(Sender: TObject);
begin
   Frm_Fecha := TFrm_Fecha.Create(self);
   try
     Frm_Fecha.ShowModal;
   finally
     Frm_Fecha.Free;
   end;
end;

procedure TFrmPrincipal.Cobrana1Click(Sender: TObject);
begin
   Frm_Cob := TFrm_Cob.Create(self);
   try
     Frm_Cob.ShowModal;
   finally
     Frm_Cob.Free;
   end;
end;

procedure TFrmPrincipal.Perfil1Click(Sender: TObject);
begin
   Frm_Perfil := TFrm_Perfil.Create(self);
   try
     Frm_Perfil.ShowModal;
   finally
     Frm_Perfil.Free;
   end;
end;

procedure TFrmPrincipal.Usuario1Click(Sender: TObject);
begin
   Frm_Usuario := TFrm_Usuario.Create(self);
   try
     Frm_Usuario.ShowModal;
   finally
     Frm_Usuario.Free;
   end;
end;

procedure TFrmPrincipal.ipodeMovimentao1Click(Sender: TObject);
begin
   Frm_TipoMov := TFrm_TipoMov.Create(self);
   try
     Frm_TipoMov.ShowModal;
   finally
     Frm_TipoMov.Free;
   end;
end;

procedure TFrmPrincipal.ConsultadeFaturas1Click(Sender: TObject);
begin
   Frm_Cons_Fatura := TFrm_Cons_Fatura.Create(self);
   try
     Frm_Cons_Fatura.ShowModal;
   finally
     Frm_Cons_Fatura.Free;
   end;
end;

procedure TFrmPrincipal.acMensagemExecute(Sender: TObject);
begin
  if not assigned(FrmMensagem) then
     application.CreateForm(TFrmMensagem,FrmMensagem);
  FrmMensagem.ShowModal;
end;


{Comentado por: Leonel - 27/01/2005
 Comentário: Relatório de Estoques por fornecedor
}
procedure TFrmPrincipal.EstoqueporFornecedor1Click(Sender: TObject);
begin
  if not assigned(Frm_RelatorioEstoqueFornecedor) then
     application.CreateForm(TFrm_RelatorioEstoqueFornecedor,Frm_RelatorioEstoqueFornecedor);
  Frm_RelatorioEstoqueFornecedor.ShowModal;
end;

{Comentado por: Leonel - 27/01/2005
 Comentário: Relatório de Estoques Agrupados por fornecedor
}
procedure TFrmPrincipal.EstoquesAgrupadosporFornecedor1Click(
  Sender: TObject);
begin
  if not assigned(Frm_EstoqueAgrupadoFornecedor) then
     application.CreateForm(TFrm_EstoqueAgrupadoFornecedor,Frm_EstoqueAgrupadoFornecedor);
  Frm_EstoqueAgrupadoFornecedor.ShowModal;
end;

procedure TFrmPrincipal.MapaDirio1Click(Sender: TObject);
begin
  if not assigned(Frm_RelMapaDiario) then
     application.CreateForm(TFrm_RelMapaDiario,Frm_RelMapaDiario);
  Frm_RelMapaDiario.ShowModal;
end;

procedure TFrmPrincipal.btnVerificarPendenciasClick(Sender: TObject);
var Data,Data2 : String;
begin
  Data := DateToStr(Date());
  Data2 := Copy(Data,1,2) + '.' +  Copy(Data,4,2) + '.' + Copy(Data,7,4);
  if not assigned(Frm_ListaFollowUp) then
     application.CreateForm(TFrm_ListaFollowUp,Frm_ListaFollowUp);

  //Atualiza a consulta de Pendências
  dmDentalita.SDT_consluta_followup.Close;
  dmDentalita.SDT_consluta_followup.DataSet.CommandText := 'select * from FOLLOW_UP ' +
    'where DATA_INICIAL_ALARME <= ' + #39 + Data2 + #39 + ' and STATUS = ' + #39 + 'P' + #39;
  dmDentalita.SDT_consluta_followup.Open;
  Frm_ListaFollowUp.btnInserir.Visible := False;
  Frm_ListaFollowUp.ShowModal;
end;

procedure TFrmPrincipal.PorVendedor1Click(Sender: TObject);
begin
  Frm_RelVendasVendedor := TFrm_RelVendasVendedor.Create(self);
  try
    Frm_RelVendasVendedor.ShowModal;
  finally
    FreeAndNil(Frm_RelVendasVendedor);
  end;
end;

procedure TFrmPrincipal.PorProdutosAgrupadosporFornecedor1Click(
  Sender: TObject);
begin
  FrmRelVendasProdAgFornecedor := TFrmRelVendasProdAgFornecedor.Create(self);
  try
    FrmRelVendasProdAgFornecedor.ShowModal;
  finally
    FreeAndNil(FrmRelVendasProdAgFornecedor);
  end;
end;

procedure TFrmPrincipal.quenofizeramcompras1Click(Sender: TObject);
begin
  FrmRelClientes := TFrmRelClientes.Create(self);
  try
    FrmRelClientes.ShowModal;
  finally
    FreeAndNil(FrmRelClientes);
  end;
end;

procedure TFrmPrincipal.ItensDevolvidos1Click(Sender: TObject);
begin
  FrmRelItensDevolvidos := TFrmRelItensDevolvidos.Create(self);
  try
    FrmRelItensDevolvidos.ShowModal;
  finally
    FreeAndNil(FrmRelItensDevolvidos);
  end;
end;

no evenento oncreate do frm_cliente por exemplo está mandando abrir um dataset, que está normal.

Editado por Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites

  • 0
micheus realmente todos formularios são criados em tempo de execução, mas está definido direitinho lá em project>opções>forms, do lado direito.
no evenento oncreate do frm_cliente por exemplo está mandando abrir um dataset, que está normal.
e quanto aos datamodules? Quando são criados?

Nestes procedimentos, procure colocá-los dentro do padrão que você já utiliza e que são mais adequados

procedure TFrmPrincipal.acClienteExecute(Sender: TObject);
begin
  try
    frm_cliente := TFrm_Cliente.Create(self);
    frm_cliente.ShowModal;
  finally
    FreeAndNil(frm_cliente);
  end;
end;

...

procedure TFrmPrincipal.acComprasExecute(Sender: TObject);
begin
  {if not assigned(Frm_Compras) then
     application.CreateForm(TFrm_Compras,Frm_Compras);
  Frm_Compras.ShowModal;}
  try
    frmComrpasNew := TfrmComrpasNew.Create(self);
    frmComrpasNew.ShowModal;
  finally
    FreeAndNil(frmComrpasNew);
  end;
end;

procedure TFrmPrincipal.acVendasExecute(Sender: TObject);
begin
  if not assigned(Frm_Vendas) then
     application.CreateForm(TFrm_Vendas,Frm_Vendas);
  Frm_Vendas.ShowModal;
  Frm_Vendas.Free;
  Frm_Vendas := Nil;
end;

...

procedure TFrmPrincipal.tbtnContaCorrenteClick(Sender: TObject);
begin

  if not assigned(Frm_ContaCorrente) then
     application.CreateForm(TFrm_ContaCorrente,Frm_ContaCorrente);
  Frm_ContaCorrente.ShowModal;
  Frm_contaCorrente.Free;
  Frm_ContaCorrente := Nil;

end;

...

procedure TFrmPrincipal.pornome1Click(Sender: TObject);
begin
    //DmDentalita.RvProject.execute;
    try
      frmRelListaClientes := TfrmRelListaClientes.Create(self);
      frmRelListaClientes.ShowModal;
    finally
      FreeAndNil(frmRelListaClientes);
    end;
end;

procedure TFrmPrincipal.porcidade1Click(Sender: TObject);
begin
    //DmDentalita.RvProject8.execute;
    try
      frmRelClientesPorCidade := TfrmRelClientesPorCidade.Create(self);
      frmRelClientesPorCidade.ShowModal;
    finally
      FreeAndNil(frmRelClientesPorCidade);
    end;
end;

...

procedure TFrmPrincipal.Lanar1Click(Sender: TObject);
begin
  if not assigned(Frm_ContaCorrente) then
     application.CreateForm(TFrm_ContaCorrente,Frm_ContaCorrente);
  Frm_ContaCorrente.ShowModal;
  Frm_ContaCorrente.Free;
  Frm_ContaCorrente := Nil;
end;
ex. da correção sugerida:
procedure TFrmPrincipal.acClienteExecute(Sender: TObject);
begin
  frm_cliente := TFrm_Cliente.Create(self);   // < FICA NESTA POSIÇÃO
  try
    frm_cliente.ShowModal;
  finally
    FreeAndNil(frm_cliente);
  end;
end;

procedure TFrmPrincipal.acVendasExecute(Sender: TObject);
begin
  if not assigned(Frm_Vendas) then
     application.CreateForm(TFrm_Vendas,Frm_Vendas);
  Frm_Vendas.ShowModal;
  FreeAndNil(Frm_Vendas);
end;
Sendo que se você utilizar os forms neste formato (após o showmodal liberá-los, não haveria porque fazer o teste para sua criação já que você o cria e o destroy. Então, seria mais apropriado utilizar o formato que você utiliza em alguns pontos do programa, como o formato apresentado no 1º exemplo da correção Outra pergunta: Nos form's onde você está utilizando este método de criação (abaixo), por acaso você está manipulando o evento OnClose e definindo Action com csFree?
procedure TFrmPrincipal.MapaDirio1Click(Sender: TObject);
begin
  if not assigned(Frm_RelMapaDiario) then
     application.CreateForm(TFrm_RelMapaDiario,Frm_RelMapaDiario);
  Frm_RelMapaDiario.ShowModal;
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

problema resolvido!

o problema era que estava faltando rtes udfs no banco, pois o servidor é linux e criaram estas udfs pro firebird, mas o cliente usa windows e eu estava usando um backup do banco do cliente mas na minha maquina faltava adicionar estas udfs, depois disso foi q foi hehe

agradeço a todos pela ajuda neste problema

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...