Para nós programadores e para quase todo mundo, tempo é dinheiro. Correto? Então, quanto mais ferramentas que facilite nossas vidas, melhor. 🙂
Imagina ter que listar uma tabela com centenas de clientes, ou produtos, ou qualquer outra tabela de dados que seja, num ComboBox…
Tudo bem, não é uma tarefa das mais complicadas. Mas, se pudermos simplificar com um Close e Open… melhor né?
Por isso, hoje vou te mostrar como funciona o DbLookUpComboBox.
COMO UTILIZAR O DBLOOKUPCOMBOBOX NO DELPHI
O DBLookupComboBox é um componente nativo do Delphi muito interessante. Sem muita programação ele carrega os dados de uma tabela origem e salva direto na sua tabela de destino.
E você também pode utilizá-lo apenas como consulta, listando os dados da sua tabela.
A configuração parece um pouco complicada, pois tem que mexer em mais de uma propriedade. Mas veja no vídeo abaixo como é muito simples.
Link: https://youtu.be/9TeP_P5cH-w
Dúvidas? Deixe seu comentário abaixo.
Link permanente
Felipe, obrigado pelo vídeo. Fiquei com a seguinte dúvida:
caso eu já tenha a informação gravada no banco e queira retornar esta informação para a tela, como eu faria para que o DBLookUpComboBox exiba esta informação? Fiz da seguinte forma, porém o campo permanece em branco:
IBQProd.Close;
IBQProd.SQL.Clear;
IBQProd.SQL.Add(‘select * from Produtos where CDPRO = :CDPRO’);
IBQProd.ParamByName(‘CDPRO’).AsInteger:=StrToInt(CodProduto.Text);
IBQProd.Open;
cbSetor.KeyValue:=IBQProd.FieldByName(‘SETOR’).Value;
Se puder me ajudar, agradeço muito.
Obrigado.
Abraço.
Link permanente
Fala Renato!
De nada, eu que agradeço pela visita. 🙂
Cara, está certo o jeito como está fazendo. Se o seu IBQProd estiver retornando o “Setor” corretamente na sua consulta, pelo seu código teria que estar funcionando sim (contanto que o seu DBLookUpComboBox esteja ligado na sua tabela de setores). Você pode testar o seguinte também: IBQProd.FieldByName(‘SETOR’).AsString. Faz essa “conversão” pra String ao invés do Value. Não sei se é da versão do Delphi ou a falta de alguma biblioteca, mas em alguns casos o DBLookUpComboBox só reconhece o KeyValue quando o valor passado é do tipo String. Qualquer coisa é só escrever.
Abraços!
Link permanente
Obrigado pela atenção, Felipe. O problema é que a informação que estava alimentando o LookUp não era do mesmo tamanho que a que vinha da outra tabela. Tinha uns espaços. daí fiz o ajuste e funcionou certinho. Obrigado mais uma vez pelo vídeo. Abraço.
Link permanente
Valeu Renato, bom que resolveu! Sucesso!! Abraços.
Link permanente
Obrigado amigo!
Estou voltando a mexer com Delphi, depois de mais de 15 anos parado. Já viu, né…
Aproveitando a oportunidade: o pessoal critica bastante o Paradox. É mesmo ruim? Vc sabe onde encontro material didático para me orientar na migração para um sistema melhor?
Abraço
Link permanente
Oi Fábio, tudo bem? Obrigado pela visita!
Seja bem-vindo novamente, programar em Delphi é sempre muito interessante. O Paradox é um banco de dados bem antigo que segurou a peteca durante muitos anos. Conheço alguns sistemas que ainda utilizam Paradox. É um banco de dados relacional baseado em tabelas, mas tem alguns pontos fracos relevantes. O fato de não ser um banco de dados Cliente/Servidor e a alta taxa de corrupção de índices são um deles. Já que você está retornando ao Delphi, recomendo utilizar o Firebird ou MySQL por exemplo. Aqui no blog eu ensino muita coisa sobre Delphi + Firebird. E no Google tem muito material também. Dá uma olhada em fóruns, é só se cadastrar e tirar suas dúvidas, a comunidade Delphi é muito solícita. Espero que tenha ajudado. Um forte abraço!
Link permanente
Bom dia meu caro Felipe Machado, estou com um problema com o DBLookupComboBox ele só lista uma linha, gostaria que ele lista mais linhas, ele só lista as linhas quando eu clico nas setas de direção aí sim quando eu clico é que aparece as linhas.
Eu já queria que aparecesse as linhas ao clicar de primeira..
Link permanente
Oi Helton, bom dia! Qual tipo de DataSet você está utilizando? Verifica se a tabela está sendo aberta por completo, alguns DataSets guardam em memória e só carregam os registros quando necessário. Você pode testar dando um DataSet.FetchAll ou DataSet.Last. Verifique também a propriedade “DropDownRows” do DBLookupComboBox. Abraços!
Link permanente
Amigo uma dúvida. Vamos supor que eu tenha feito tudo isso em um cadastro de um cliente e agora eu preciso editar esse cadastro, de que forma eu carrego o que eu escolhi no dia em que eu cadastrei. No caso se eu coloquei uma profissão e depois quero alterar ela, na DBlookupcombobox vem listada as profissões da tabela profissões, só que na alteração precisa vir a opção que eu escolhi no dia em que eu cadastrei.
Link permanente
Amigo já vou deixar a resposta do que eu mesmo perguntei…rsrsrssrs Acabei quebrando um pouco a cabeça aqui e consegui. Vou deixar o exemplo de no caso precisar carregar um cadastro que já tenha sido feito.
DblookupCombobox.Keyvalue := suatabela.fieldbyname(‘campo’).asstring;
E no onEnter do DBLookUpcombobox você faz uma consulta para carregar todos os dados do seu listfield
Se precisar deixar ele parado em alguma posição, pode usar também a propriedade ListFieldIndex e colocar o numero da posição.
Espero ter ajuda caso alguém precisar…. Abraços
Link permanente
Oi Jeferson, se o DBLookupComboBox estiver ligado no campo profissão do seu dataset ele será carregado automaticamente, mas se estiver usando o DBLookupComboBox apenas como lista você terá que passar a profissão no campo KeyValue do DBLookupComboBox. Abraços!