Fórum EoleException with message ´Field quot;pusuarioquot; not f #365475

25/10/2008

0

Pessoal que erro é este
[b:bbde282d57]raise Exception class EoleException with message ´Field ´pusuario´ not found´.[/b:bbde282d57]?

Estou tentando chamar um procedimento, usando os componentes DataSetProvider + ClientDataSet, e está mostrando este erro acima.

A procedure é esta aqui
procedure TfrmAdministracao.SQL_CheckBoxGrid;
begin
  with ibEmpresas do
  begin
    Close;
    CommandText := ´ select a.marcar_check, ´+
                   ´ a.nmempresa,           ´+
                   ´ a.cdempresa,           ´+
                   ´ b.idusuario,           ´+
                   ´ b.marcarbox            ´+
                   ´ from empresa a         ´+
                   ´      left join permissoesuser b  ´+
                   ´    ON (a.cdempresa = b.idempresa)´+
                   ´ and b.idusuario = :pusuario and  ´+
                   ´ b.marcarbox = ´´T´´              ´;
    Params.ParamByName(´pusuario´).AsInteger := dsPrincipal.DataSet.FieldByName(´id_usuario´).AsInteger;
    Open;
  end;
end;


Que eu saiba ai o ´pusuario´ é um parametro e não um Field como está mostrando o erro.

No DatasetProvider a propriedade poAllowCommandText está como true para poder executar a o SQL, e no ClientDataSet estão todos os TFields dentro do Fields Editor.

Preciso usar o ClientdataSet para atualizar a tabela por causa do REFRESH, porque no IBDataSet (IBX) não funciona o refresh e não posso dar um close/open na tabela, por causa que é um DBGrid que marcação de CheckBox. E preciso que o cursos fique na linha que eu marquei.

O comando que eu uso para marcar é este:
procedure TfrmAdministracao.DBMarcarDadosCellClick(Column: TColumn);
begin
  {se der um clique na célula a tabela vai entrar em modo de edição}
  if Column.FieldName = ´MARCARBOX´ then
  begin
     {Criei esta SP para deletar quando estiver marcado ou incluir quando não tiver marcado}
     try
       with ibSPPermissoes do
       begin
         Prepare;
         Params[0].AsInteger := ibUsuario.FieldByName(´ID_USUARIO´).AsInteger;
         Params[1].AsInteger := ibEmpresasCDEMPRESA.AsInteger;
         params[2].AsString  := ´T´;
         ExecProc;
         Unprepare;
       end;
       if not dm.Transaction.InTransaction then
          dm.Transaction.StartTransaction;
          dm.Transaction.CommitRetaining;
          {Atualiza o CDS para deixar a dbgrid atualizada}
          ibEmpresas.Refresh;
          DBGrid2.Refresh;
          //ibEmpresas.Close;
          //ibEmpresas.Open;
     except
       on E:Exception do
       begin
         if not dm.Transaction.InTransaction then
            dm.Transaction.StartTransaction;
            dm.Transaction.RollbackRetaining;
            MessageDlg(´Ocorreu um erro neste processo. ´ +#1313 +´Erro gerado: ´+13+
              E.Message + 1313 + ´Todo o processo foi abortado!´, mtError, [mbOk],0);
            Abort;
       end;
     end; //Final try/except
  end;
end;



Grato pela ajuda.


Adriano_servitec

Adriano_servitec

Responder

Posts

25/10/2008

Adriano_servitec

Descobri o problema, é que no IBDataSet(IBX) não tinha colocado o [b:bc1c02f0ae]´:Pusuario´[/b:bc1c02f0ae] como Params, então não tinha o parametro na propriedade params do ClientDataSet, e ele reconhevia como um Fields.

Problema resolvido.

Valeu pessoal.


Responder

Gostei + 0

25/10/2008

Adriano_servitec

Agora minha duvida é saber pq, o IBX(IBDataSet) não aceita um refresh para atualizar a tabela? Fiz uns testes aqui e só atualiza depois de um Close/Open, enquanto o ClientDataSet linkado ao DataSetProvider linkado ao ibDataSet aceita?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar