Fórum Popular ComboBox + link com outra tabela delphi #622387
23/07/2024
0
A situação é a seguinte:
Tabela de Grupo de Contas
Tabela Fornecedores
Tabela Contas a Pagar
Na tabela de fornecedores eu gravo o codigo do Grupo de Conta.
Na tabela de Contas a pagar eu gravo o codigo do fornecedor e e codigo do grupo de contas
Então, ao inserir uma nova conta a pagar eu preciso popular o combobox com o nome do Grupo de Contas
Query.First;
while not Query.Eof do
begin
ComboGrupoContas.Items.Add(Query.FieldByName('NOME_GRUPO').AsString);
Query.Next;
end;Porém, quando eu chamar o Fornecedor, preciso que o combobox, além de ter todos os grupos de contas, que me permitem alterar, mostre o grupo de conta que está vinculado ao fornecedor que chamei na pesquisa.
Renan
Curtir tópico
+ 0Posts
23/07/2024
Arthur Heinrich
ComboGrupoContas.ItemIndex:=ComboGrupoContas.Items.IndexOf(Fornecedor.GrupoConta);
Gostei + 0
24/07/2024
Renan
cbGrupoContas.ItemIndex := cbGrupoContas.Items.IndexOf(IntToStr(qrAux.FieldByName(''COD_GRUPO_CONTAS'').AsInteger));Gostei + 0
24/07/2024
Renan
Porém na tabela onde eu busco a informação, tenho apenas o codigo gravado.
Neste caso eu teria que reestruturar a SQL para trazer o nome de uma outra tabela, certo?
Gostei + 0
24/07/2024
Arthur Heinrich
Talvez dê para fazer uma "gambiarra".
Sempre que um componente possui um TStringList, como é o caso do ComboBox.Items, o componente possui dois arrays. Uma para os objetos (Objects) e outro para as descrições (Strings).
É comum trabalharmos apenas com a descrição, que inclusive é a propriedade padrão.
Ao utilizar ComboBox.Items[3], estamos acessando ComboBox.Items.Strings[3], Mas também podemos acessar o ComboBox.Items.Objects[3].
O array Objects contém uma lista de TObject, que é a referência para uma classe. Um ponteiro tipado, de 4 bytes.
Podemos carregar o ComboBox.Items usando a função AddObject(const S: string; AObject: TObject) ao invés do Add(const S: string).
Query.First;
while not Query.Eof do
begin
ComboGrupoContas.Items.AddObject( Query.FieldByName('NOME_GRUPO').AsString, TObject(Query.FieldByName('COD_GRUPO').AsInteger) );
Query.Next;
end;
Feito isso, você terá tanto o código como o nome do grupo no seu ComboBox e poderá fazer a pesquisa pelo código:
cbGrupoContas.ItemIndex := cbGrupoContas.Items.Objects.IndexOfObject( TObject( qrAux.FieldByName(''COD_GRUPO_CONTAS'').AsInteger ) );
Gostei + 0
25/07/2024
Renan
Vou deixar aqui como ficou meu código
No show do form eu carrego o combo com os grupos ativos
Qry := TIBQuery.Create(nil);
try
Qry.Database := FrmDm.dbBoletos;
Qry.SQL.Clear;
Qry.SQL.Add('SELECT CODIGO, NOME_GRUPO FROM GRUPO_CONTAS');
Qry.SQL.Add('WHERE STATUS = :ST');
Qry.SQL.Add('ORDER BY NOME_GRUPO');
Qry.ParamByName('ST').AsString := 'ATIVO';
Qry.Open;
while not Qry.eof do
begin
cbGrupoContas.Items.AddObject(Qry.FieldByName('NOME_GRUPO').AsString, TObject(Integer(Qry.FieldByName('CODIGO').AsInteger)));
Qry.Next;
end;
finally
FreeAndNil(Qry);
end;no evento de enter do combo eu busco o item relacionado ao fornecedor que pesquisei
cbGrupoContas.ItemIndex := cbGrupoContas.Items.IndexOfObject(TObject(qrAux.FieldByName('COD_GRUPO_CONTAS').AsInteger));por fim, no evento de exit do combo, eu armazeno o codigo no edit, para posteriormente gravar
edCodGrupoContas.Text := IntToStr(Integer(cbGrupoContas.Items.Objects[cbGrupoContas.ItemIndex]));
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)