Como Editar dados do banco de dados direto de um LookupComboBox

Delphi

08/02/2014

Olá Pessoal,

Eu tenho uma tabela chamada CARGO onde contém os seguinte campos: ID_CARGO, NOME.
O meu LookupComboBox lista os nomes (ou seja o listfield esta o campo nome).
Os outros campos do LookupComboBox estão:
-listSource - dtsCargoLkp
-keyfield - ID_CARGO
-datasource - dtsCadastrar
-datafield - ID_CARGO
E o que eu quero fazer é que quando o usuário selecionar um nome vai ter um botão ao lado chamado Editar Cargo, onde quando ele clicar ali vai abrir uma Janela Modal com todos os campos dessa janela ja preenchidos com os seus respectivos valores (ou seja o ID e o NOME), e quando ele clicar no botao Salvar a Edição seja feita e no LookupComboBox passe a aparecer o campo editado (eu entendo que isso é só questao de fechar e abrir o datasource).
Vale consta que eu já tenho a Janela Modal criada e que minha unica dificuldade é no código para fazer a Edição.
Eu já tentei desta maneira porém ele da o seguinte erro
Maneira, o Params[0] tem como parametro o '0 - id':
procedure TF_FormFuncionario.btnAlterarCargoClick(Sender: TObject);
var
  t:Integer;
begin
  with TClientDataSet(dtsCadastrar.DataSet) do
  begin
    Close;
      Params[0].AsInteger :=  lkpCargo.DataSource.DataSet.FieldByName(lkpCargo.KeyField).Value;
    Open;
    Edit;
  end;
  F_FormCargoAlterar.showmodal;
end;


Erro:
Project CMS.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (Integer)'.


Eu já fiz desta forma com um DBGrid e funcionou perfeitamente o problema é que agora eu quero fazer com um LookupComboBox.
procedure TF_FormFuncionario.btnAlterarCargoClick(Sender: TObject);
begin
  with TClientDataSet(dtsCadastrarCargo.DataSet) do
  begin
    Close;
    Params[0].AsInteger := TClientDataSet(dtsConsultar.DataSet).Fields[0].AsInteger;
    Open;
    Edit;
  end;
end;


Estou precisando muito resolver esse problema qualquer ajuda será muito bem vinda! Desde já Agradecido!
Edson Vilhalba

Edson Vilhalba

Curtidas 0

Respostas

Edson Vilhalba

Edson Vilhalba

08/02/2014

Resolvi galera eu estava fazendo um erro bobo eu dentro do TClientDataSet estava com o dts errado. E o codigo que eu utilizei para fazer isso caso alguem precise foi este.
procedure TF_FormFuncionario.btnAlterarCargoClick(Sender: TObject);
var
  t:Integer;
begin
  with TClientDataSet(dtsCadastrarCargo.DataSet) do
  begin
    Close;
      Params[0].AsInteger :=  lkpCargo.ListSource.DataSet.FieldByName(lkpCargo.KeyField).Value;
    Open;
    Edit;
  end;
  F_FormCargoAlterar.showmodal;
end;

GOSTEI 0
POSTAR