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

(Resolvido)Erro Estranho


robinhocne

Pergunta

Olá pessoal, estou com 20% do projeto pronto, quer dizer então no inicio e estou tomando alguns cuidados para ficar melhor o desempenho e para não ter erros, mas ultimamente não muito especifico, mas geralmente encontro em um formulário só, pelo que eu percebi!

Mas só que tem hora que vai numa beleza e depois vou acessar de novo ai dá um erro, entro de novo e ele vai ou dá erro de novo o erro está abaixo:

Sem_ttulo.png

Em um DbGrid no Formulário AdmHelp ao dar um duplo click eu abro o formulário InnCad003 (Procedimentos do Formulário) e então quando eu vou abrir que dá o erro, as vezes sim ou as vezes não.....já debuguei e não estou conseguindo encontrar.....alguém me ajuda ?

Abaixo o codigo que verifico e abre o formulario InnCad003

procedure TFAdmHelp.DbgProcDblClick(Sender: TObject);
begin

  if PRI_Privilegio = 'PADRÃO' then
    begin

      ConsultaFormLibUsuario('INNCAD003');

      if Dtm.QryUsuarios.RecordCount = 0 then
        begin
          ShowMessage('Usuário '+PRI_UsuCodigo+' - '+PRI_UsuNome+' sem Nivel de acesso ao Formulário INNCAD003 - Pesquisa de Procedimentos !');
          exit;
        end;

    end;

  with  TFInnCad003.Create(Application) do
    begin
      try

        ProCodigo     := TblProProCodigo.AsString;
        PrfFormulario := Formulario;

        LeRegistro;

        SpbEdi.Enabled := true;
        spbpes.Visible := false;
        SpbCan.Visible := false;
        SpbEdiClick(Self);

        ShowModal;

        Atualiza;

      finally;
        FreeAndNil(FInnCad003);
      end;
    end;
end;
e Quando eu abro o InnCad003 antes de mais nada no OnActive eu verifico esse procedimento abaixo:
procedure TFInnCad003.LeRegistro;
begin
  TblPro.Close;
  TblPro.Active := true;

  with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Adm_Procedimentos P, Adm_Proced_Formularios F where P.ProCodigo = F.ProCodigo and F.PrfFormulario =:For and P.ProCodigo =:ProCod');
      ParamByName('For').AsString    := PrfFormulario;
      ParamByName('ProCod').AsString := ProCodigo;
      open;
    end;

  ProCodigo   := Dtm.QryProcedimentos.FieldByName('ProCodigo').AsString;
  TxtPro.Text := Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString;
  TxtFor.Text := Dtm.QryProcedimentos.FieldByName('PrfFormulario').AsString;
  TxtMod.Text := Dtm.QryProcedimentos.FieldByName('ProModulo').AsString;
  Mem.Text    := Dtm.QryProcedimentos.FieldByName('ProDescricao').AsString;
  TxtVal.Text := Dtm.QryProcedimentos.FieldByName('ProValor').AsString;

  if Dtm.QryProcedimentos.FieldByName('ProObrigatorio').AsString = 'S' then
    begin
      RdbSim.Checked := true;
    end
    else
    begin
      RdbNao.Checked := true;
    end;

  if PRI_EmpTeste = 'S' then
    begin

      with Dtm.QryEmpresa do
        begin
          close;
          sql.Clear;
          sql.Add('Select * From Adm_Empresas');
          open;
        end;

    end
    else
    begin

      with Dtm.QryEmpresa do
        begin
          close;
          sql.Clear;
          sql.Add('Select * From Adm_Empresas where EmpTeste =:Emp');
          ParamByName('Emp').AsString := 'N';          
          open;
        end;

    end;

    while not Dtm.QryEmpresa.Eof do
      begin  

        with Dtm.QryProcedimentos do
          begin
            close;
            sql.Clear;
            sql.Add('Select * From Adm_Proced_Empresa where EmpCodigo =:Emp and ProCodigo =:Pro and PrfFormulario =:For');
            ParamByName('Emp').AsString := Dtm.QryEmpresa.FieldByName('EmpCodigo').AsString;
            ParamByName('Pro').AsString := ProCodigo;
            ParamByName('For').AsString := TxtFor.Text;
            open;
          end;

          with TblPro do
            begin
              Insert;
              TblProControle.AsString  := Dtm.QryEmpresa.FieldByName('EmpControle').AsString;
              TblProEpdCodigo.AsString := Dtm.QryProcedimentos.FieldByName('EpdCodigo').AsString;
              TblProEmpresa.AsString   := Dtm.QryEmpresa.FieldByName('EmpCodigo').AsString;
              TblProValor.AsString     := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
              TblProUsuario.AsString   := Dtm.QryProcedimentos.FieldByName('EpdUsuario').AsString;
              post;
            end;

        Dtm.QryEmpresa.Next;
      end;

     TblPro.SortOnFields('Controle', true, false);
     Dtm.QryProcedimentos.Close;
     TblPro.First;
     DbgPro.SelectedIndex := 2;
end;

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

O erro de vialoção de endereço de memória, refere-se a isso

with  TFInnCad003.Create(Application) do
muito provavelmente, quando voce tenta criar novamente o formulário, ele ainda não foi limpo da memória
FreeAndNil(FInnCad003);

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
O erro de vialoção de endereço de memória, refere-se a isso

with  TFInnCad003.Create(Application) do
muito provavelmente, quando voce tenta criar novamente o formulário, ele ainda não foi limpo da memória
FreeAndNil(FInnCad003);

abraço

Como eu posso evitar que não de mais esse erro ? e como em vez de dar erro eu posso dar uma mensagem ?

Link para o comentário
Compartilhar em outros sites

  • 0

tente assim

procedure TForm1.FormDblClick(Sender: TObject);
begin
  if PRI_Privilegio = 'PADRÃO' then
    begin

      ConsultaFormLibUsuario('INNCAD003');

      if Dtm.QryUsuarios.RecordCount = 0 then
        begin
          ShowMessage('Usuário '+PRI_UsuCodigo+' - '+PRI_UsuNome+' sem Nivel de acesso ao Formulário INNCAD003 - Pesquisa de Procedimentos !');
          exit;
        end;

    end;

  try
     if TFInnCad003 = Nil then
        TFInnCad003 := TTFInnCad003.Create(self);
  except
      ShowMessage('Erro na criação do formulário !!');
      exit;
  end;

  with TFInnCad003 do
    begin

        ProCodigo     := TblProProCodigo.AsString;
        PrfFormulario := Formulario;

        LeRegistro;

        SpbEdi.Enabled := true;
        spbpes.Visible := false;
        SpbCan.Visible := false;
        SpbEdiClick(Self);

        ShowModal;

        Atualiza;

    end;
end;

abraço

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...