Fórum Popular Combobox comparando valor de um edit ao campo de outra Tabela #444552
03/06/2013
0
meu form ao abrir já exibi o codigo do cliente em um edit ( Tabela Clientes).
neste form tenho um combobox que irá exibir as placas dos veiculos do cliente referente ao codigo do registro dele,
exibido no edit.
as placas dos veiculos, estão na tabela veiculos.
campos desta tabela Cod_Clie e Placa. Alphanumericos ( String)
preciso que ao abrir o form, seja filtrado, comparado, ou locate não sei?
se o codigo do edit no form da tabela clientes é igual ao campo cod_Clie da Tabela veiculos, se for igual fazer um add
( popular) o combobox somente com as placas dos veiculos deste cliente, caso este cliente tenha 3 veiculos exibi as tres
placas dos veiculos dele,para o usuario selecionar qual Placa (veiculo) do cliente será a ordem de serviço.
na tabela veiclos é gravado assim:
Cod_Clie Placa
34 DDD-9876
34 FFF-0033
34 AAA-0001
os cod_Clie são os mesmo do campo da tabela Cliente com o nome de codigo.
o Maximo que Consegui foi popular o combobox, porém sem um filtro, sendo assim ele lista todas as placas cadastradas que
não é o que preciso.
meu codigo:
TBCliente.refresh;
TBCliente.filter:='';
combobox1.clear;
TbVeiculos.first;
while not TbVeiculos.eof do begin
combobox1.Items.Add(TbVeiculosPlaca.asstring);
TbVeiculos.next;
end;
combobox1.itemindex:=0;
end;peço a gentileza se possivel postar um exemplo do codigo desta rotina fazendo a comparação do veiculo do cliente pelo seu
codigo no edit e na tabela veiculos.
uso tabelas, banco de dados paradox, aplicativo pequeno.
contocom a juda de vcs, obrigado.
Gilvanio Gonçalves
Curtir tópico
+ 0Posts
03/06/2013
André
combobox1.Items.Add(TbVeiculosPlaca.asstring);
TbVeiculos.next; )
Gostei + 0
03/06/2013
Alan Souza
O ideal mesmo é fazer um filtro nos veículos, pode ser feito no select se você estiver usando Query, ou usando a propriedade Filter em qualquer caso de outro DataSet.
Ex:
TBCliente.Refresh; TBCliente.Filter := ''; TBVeiculos.Filter := 'COD_CLIE = ' + SEUEDIT.TEXT; TBVeiculos.Filtered := True; Combobox1.Clear; TbVeiculos.First; while not TBVeiculos.eof do begin Combobox1.Items.Add(TbVeiculosPlaca.AsString); TBVeiculos.Next; end; Combobox1.ItemIndex := 0; TBVeiculos.Filtered := False;
Gostei + 0
03/06/2013
Guilherme Wiethaus
Abraços
Gostei + 0
03/06/2013
Gilvanio Gonçalves
O ideal mesmo é fazer um filtro nos veículos, pode ser feito no select se você estiver usando Query, ou usando a propriedade Filter em qualquer caso de outro DataSet.
Ex:
TBCliente.Refresh; TBCliente.Filter := ''; TBVeiculos.Filter := 'COD_CLIE = ' + SEUEDIT.TEXT; TBVeiculos.Filtered := True; Combobox1.Clear; TbVeiculos.First; while not TBVeiculos.eof do begin Combobox1.Items.Add(TbVeiculosPlaca.AsString); TBVeiculos.Next; end; Combobox1.ItemIndex := 0; TBVeiculos.Filtered := False;
Amigo Alands, seu codigo funcionou certissimo como eu queria.
ainda neste mesmo assunto do combobox. gostaria de perguntar o seguinte.
na tabela veiculos tem também os campos marca, tipo, cor e ano.
estes dados também devem ser exibidos no edits do mesmo form.
ou seja quando o usuario selecionar a placa deseja no combobox,
os edits receberam os restante dos dados do veiculo que corresponde
a placa selecionada.
pode me dar a luz de como fazer isto?.
eu não perguntei antes para não ficar confuso o meu topico já no inicio.
exemplo : edit com codigo do cliente, codigo 11, combobox populado com as
placas dos veiculos deste cliente codigo 11.
placas no combobox / Dados da Tabela de cada placa
marca tipo cor ano
gku-0000 wv fusca branco 83
gku-0001 fiat uno 1.0 Azul 2000
gku-0002 ford ka 1.0 prata 99/99
o usuario seleciona a placa gku-0002 e os edits recebem os dados deste veiculo.
pode me ajudar como fazer isto, conto com a ajuda de vcs me resta só isto para finalizar,obrigado.
Gostei + 0
03/06/2013
Alan Souza
Bom, dá pra você usar ao invés de uma Combobox um DBLookupComboBox ligado ao seu dataset de veículos filtrados, assim você não precisa populá-la e poderá usar os outros DBControls para apresentar os dados do veículo selecionado.
Agora, se for mesmo necessário trabalhar sem o auxílio dos DBControls, dá pra carregar um objeto com os dados do veículo na ComboBox e recuperá-los depois, mas isso é um recurso meio bobo, ou fazer um Locate no seu dataset de veículos e pegar os dados pelos Fields da sua Table.
Gostei + 0
03/06/2013
Guilherme Wiethaus
Abraços
Gostei + 0
03/06/2013
Gilvanio Gonçalves
Bom, dá pra você usar ao invés de uma Combobox um DBLookupComboBox ligado ao seu dataset de veículos filtrados, assim você não precisa populá-la e poderá usar os outros DBControls para apresentar os dados do veículo selecionado.
Agora, se for mesmo necessário trabalhar sem o auxílio dos DBControls, dá pra carregar um objeto com os dados do veículo na ComboBox e recuperá-los depois, mas isso é um recurso meio bobo, ou fazer um Locate no seu dataset de veículos e pegar os dados pelos Fields da sua Table.
Tem como me passar um exemplo como seria este locate?.
Gostei + 0
03/06/2013
Guilherme Wiethaus
Gostei + 0
03/06/2013
Gilvanio Gonçalves
Bom, dá pra você usar ao invés de uma Combobox um DBLookupComboBox ligado ao seu dataset de veículos filtrados, assim você não precisa populá-la e poderá usar os outros DBControls para apresentar os dados do veículo selecionado.
Agora, se for mesmo necessário trabalhar sem o auxílio dos DBControls, dá pra carregar um objeto com os dados do veículo na ComboBox e recuperá-los depois, mas isso é um recurso meio bobo, ou fazer um Locate no seu dataset de veículos e pegar os dados pelos Fields da sua Table.
Amigo Alans no caso de usar o dblookupcombobox, tem como vc me orientar como seria as propridades dele
e como seria para o edits exibirem o dados da placa selecionada nele.
pode me ajudar se usando dblookcombobox é mais pratico eu mudo pra ele.
desde já agradeço a força.
Gostei + 0
03/06/2013
Alan Souza
ListSource: o TDataSource ligado ao DataSet que você quer usar (no seu caso ligado ao TBVeiculos).
ListField: o campo que será listado pelo componente, no seu caso a placa do veículo.
KeyField: um campo de referencial, geralmente a PK de sua tabela ou um campo de id único (se a placa não se repetir pode até ser ela!)
para apresentar os outros dados, é só manter componentes TDBEdit ou TDBText (dependendo da sua necessidade) ligados nos campos que você quer que eles exibam.
Montei um exemplo bem rápido só pra ser usado como base (está BEM básico): [url]http://www.4shared.com/zip/pCgT4eXx/exemploLookup.html[/url]
Gostei + 0
04/06/2013
André
talvez nao der p usar dblookupcombobox
vc vai ter q usar varias query para fazer o que vc quer
Gostei + 0
04/06/2013
Alan Souza
agora se estiverem em várias tabelas espalhadas, realmente você vai precisar de uma Query que te retorne os dados para você ligar aos componentes, inclusive no DBLookupComboBox.
Gostei + 0
04/06/2013
Alisson Santos
Procure criar um metodo de verificação, aonde você monta um sql dinamico passando o código do veiculo e retornando o que precisa.
Quando sair do campo combobox você preenche os edits com o retorno das informações.
Gostei + 0
04/06/2013
Gilvanio Gonçalves
ListSource: o TDataSource ligado ao DataSet que você quer usar (no seu caso ligado ao TBVeiculos).
ListField: o campo que será listado pelo componente, no seu caso a placa do veículo.
KeyField: um campo de referencial, geralmente a PK de sua tabela ou um campo de id único (se a placa não se repetir pode até ser ela!)
para apresentar os outros dados, é só manter componentes TDBEdit ou TDBText (dependendo da sua necessidade) ligados nos campos que você quer que eles exibam.
Montei um exemplo bem rápido só pra ser usado como base (está BEM básico): [url]http://www.4shared.com/zip/pCgT4eXx/exemploLookup.html[/url]
Amigo Alanps
Peguei o seu exemplo, porém não entendi bém.
no codigo para mim ficaria Asssim:
Table1.Filtered := False;
Table1.Filter := 'Placa = ' + QuotedStr('Davis');
Table1.Filtered := True;
onde esta davis eu devo colocar o que?
na proridade do dblookupcombobx fiz assim
ListField = Placa
KeyField = Cod // campo que não se repete.
mas ao filtrar ele exibi todas as placas da tabela. não de cliente expecifico.
como faço para que o dblookup tenha somente as placas desejadas.
exemplo cliente 11 no edit do form, exebi todas as placas do veiculos deste cliente.
como disse tenho duas tabelas uma cliente e outra veiculos.
na tabela cliente campo codigo.
na tabela veiculos
campo cod que não se repete.
campo placa / que pode sim uma placa se repetida devido a cidade e estado.
e campo cod_clie que contem o mesmo codigo do cliente, da tabela cliente.
te incomodando mais uma vez, pode me ajudar.
Gostei + 0
04/06/2013
Alan Souza
TBVeiculos.Filter := 'COD_CLIE = ' + SEUEDIT.TEXT;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)