Fórum Mostrar apenas um campo (Banco Dados) no combobox? #334027
01/12/2006
0
Bom tenho um combobox que me mostra 2 campos
[b:b9a9d69061]ComboBox1.items.add(dm.ibq1.fieldbyname(´matricula´).AsString + ´ ´ + dm.ibq1.fieldbyname(´associado´).AsString);[/b:b9a9d69061]
Ai nos eventos onDropDown e OnClick fiz um tratamento para aumentar o tamanho do [b:b9a9d69061]DropDownWidth [/b:b9a9d69061] para poder enchergar os nomes do associados.
procedure TForm9.ComboBox1DropDown(Sender: TObject); begin combobox1.width:=450; // para enchergar os dados do associado end;
procedure TForm9.ComboBox1Click(Sender: TObject); begin combobox1.width:=100; // para voltar ao tamanho inicial end;
E carrego os todos os dados no evento onshow do Form assim
procedure TForm9.FormShow(Sender: TObject); var c : string; begin with dm.ibq1 do begin close; sql.clear; combobox1.Clear; sql.add(´select * from sind2´); sql.add(´order by matricula´); sql.add(c); Open; while dm.ibq1.Eof = false do begin ComboBox1.items.add(dm.ibq1.fieldbyname(´matricula´).AsString + ´ ´ + dm.ibq1.fieldbyname(´associado´).AsString); dm.ibq1.next; end; dm.ibq1.close; end; end;
[b:b9a9d69061]Ateh aqui 100¬ funcional.[/b:b9a9d69061]
Agora o problema eh que preciso ao clicar em cima de algum associado aparecer apenas o numero da matricula neste combobox. [color=red:b9a9d69061](Pois se eu clicar em cima de algum associado o ComboBox mostra o campo matricula e o associado que eu selecionei, e quero apenas que mostre o campo matricula do associado que selecionei)[/color:b9a9d69061]
Pergunta: Eh possivel isso? Se form alguem pode me ajudar como fazer?
Tentei fazer no evento onclick do combobox assim
procedure TForm9.ComboBox1Click(Sender: TObject); begin with dm.ibq1 do begin close; sql.clear; sql.add(´select * from sind2´); sql.add(´order by matricula´); sql.add(c); Open; combobox1.Clear; ComboBox1.items.add(dm.ibq1.fieldbyname(´matricula´).AsString); dm.ibq1.Next; combobox1.width:=100; // para vc enchergar os dados end; end;
No aguardo
Agradeço a ajuda de todos
Adriano.
Adriano_servitec
Curtir tópico
+ 0Posts
01/12/2006
Andrew
não sei quantos caracteres tem seu campo Matricula, mas você poderia usar [b:f16fd7dd5e]Copy[/b:f16fd7dd5e] ou combiná-lo com [b:f16fd7dd5e]Pos[/b:f16fd7dd5e] já q tem um separador entre os dois campos que parece ser um espaço em branco.
Certa vez uma colega aqui do fórum(martins) me mandou umas linhas para algo parecido usando Copy e Pos. Vou ver se encontro aqui para postar para vc.
Gostei + 0
01/12/2006
Quartieri
Gostei + 0
01/12/2006
Brasidata
Coloque um TEdit sobreposto no seu TComboBox (se vc alinhar direitinho vai parecer que é um componente só e no evento OnChange do ComboBox coloque:
Edit1.text := Trim(Copy(ComboBox1.Text,1,(Pos(´ ´,ComboBox1.Text)-1)));
Aí é só usar o text do Edit como referencia.
Tô até com vergonha dessa solução porca, mas ela foi feita em 5 minutos e funciona. E eu prometo achar algo mais profissional pra vc DEPOIS.
Gostei + 0
01/12/2006
Adriano_servitec
Hehehehe, melhor do que eu estava fazendo, ja que nao mostrava nada
Valeu amigo
[obs]Nao quero usar outro componente que nao seja o combobox
Gostei + 0
01/12/2006
Adriano_servitec
Veja bem usei o tamanho do combobox1.width=20 esse codigo tambem uso no onclick do combo para retornar ao tamanho original do 20, e deixei ele do lado do edit como se fosse um combobox, ai coloquei o codigo que vc fez no evento onchange do combobox.
Gostei muito do resultado amigo.
Ficou show mesmo
Obrigado
Gostei + 0
01/12/2006
Martins
Hehehehe, melhor do que eu estava fazendo, ja que nao mostrava nada
Valeu amigo
[obs]Nao quero usar outro componente que nao seja o combobox[/quote:c9285515bc]
Desculpe companheiro, mas não sou muito fã de gambiarras ou resoluções feitas na marreta, o Delphi nos dá recursos para resolvermos problemas sem precisarmos desse tipo de metodos.
Não testei aqui pq não tenho Delphi nesta máquina, mas creio q vá funcionar.
//Inclua essa linha no OnExit do ComboBox, troque o caractere (?) pelo número do combobox. procedure TFxxxxx.ComboBox???Exit(Sender: TObject); begin ComboBox??.Text := Copy(ComboBox??.Text, 1, Pos(´ ´, Trim(ComBoBox??.Text))-1); end;
O código acima vai lhe retornar o q vc desejar.
Digamos q vc tenha:
[b:c9285515bc]Matricular[/b:c9285515bc]
0001 Jonas
0002 Marcio
etc...
vai lhe retornar apenas:
0001 ou 0002, dependendo do q for selecionado.
Boa sorte!!
Gostei + 0
01/12/2006
Adriano_servitec
Usei assim
Assim
ComboBox1.Text := Trim(Copy(ComboBox1.Text,0,Pos(´ ´,ComBoBox1.Text)-1));
Assim
ComboBox1.Text := Trim(Copy(ComboBox1.Text,1,Pos(´ ´,Trim(ComBoBox1.Text))-1));
Mudei 1 por 0 e nada nao pega os os codigos antes da pos ´ ´
somente assim esta funcionando
Edit1.text := Trim(Copy(ComboBox1.Text,1,(Pos(´ ´,ComboBox1.Text)-1)));
Mesmo assim obrigado por ajudar.
Gostei + 0
01/12/2006
Martins
Assim
ComboBox1.Text := Trim(Copy(ComboBox1.Text,0,Pos(´ ´,ComBoBox1.Text)-1));
Assim
ComboBox1.Text := Trim(Copy(ComboBox1.Text,1,Pos(´ ´,Trim(ComBoBox1.Text))-1));
Mudei 1 por 0 e nada nao pega os os codigos antes da pos ´ ´
somente assim esta funcionando
Edit1.text := Trim(Copy(ComboBox1.Text,1,(Pos(´ ´,ComboBox1.Text)-1)));
Mesmo assim obrigado por ajudar.[/quote:c1d9dac811]
Cara até em Delphi 3 funcionaria assim.
procedure TForm1.ComboBox1Exit(Sender: TObject); begin ComboBox1.Text := Copy(ComboBox1.Text, 1, Pos(´ ´, Trim(ComBoBox1.Text))-1); end;
[b:c1d9dac811]Pos(´ ´, Trim(ComBoBox1.Text)[/b:c1d9dac811] ele pegaria até o espaço em branco.
Como estão os itens dentro do combobox, coloque um exemplo aqui para q possamos ver o separador.
Boa sorte!!!
Gostei + 0
01/12/2006
Adriano_servitec
Gostei + 0
01/12/2006
Marco Salles
Gostei + 0
02/12/2006
Brasidata
Hehehehe, melhor do que eu estava fazendo, ja que nao mostrava nada
Valeu amigo
[obs]Nao quero usar outro componente que nao seja o combobox[/quote:8ba252f62a]
Desculpe companheiro, mas não sou muito fã de gambiarras ou resoluções feitas na marreta, o Delphi nos dá recursos para resolvermos problemas sem precisarmos desse tipo de metodos.
Não testei aqui pq não tenho Delphi nesta máquina, mas creio q vá funcionar.
//Inclua essa linha no OnExit do ComboBox, troque o caractere (?) pelo número do combobox. procedure TFxxxxx.ComboBox???Exit(Sender: TObject); begin ComboBox??.Text := Copy(ComboBox??.Text, 1, Pos(´ ´, Trim(ComBoBox??.Text))-1); end;
O código acima vai lhe retornar o q vc desejar.
Digamos q vc tenha:
[b:8ba252f62a]Matricular[/b:8ba252f62a]
0001 Jonas
0002 Marcio
etc...
vai lhe retornar apenas:
0001 ou 0002, dependendo do q for selecionado.
Boa sorte!![/quote:8ba252f62a]
Caro amigo Martins. Em primeiro lugar quero deixar bem claro que eu CONCORDO com vc. Eu tb, não gosto de ´gambiarras´ no Delphi. Porém, como vc mesmo disse, vc não testou o código que sugeriu por não ter o Delphi em sua máquina. Se você testar verá que ele não funcionará como o esperado, pois, se por algum motivo ele SAIR e ENTRAR novamente no ComboBox o TEXT será apagado (Eu testei). A questão aqui independe da versão do Delphi. Uso o Delphi 2006, cheio de recursos e para o caso ESPECIFICO do amigo Adriano, o componente COMBOBOX não têm sido muito amigável.
Dessa forma sugeri que ele colocasse um EDIT para receber o resultado do nosso código (E poderia ser tanto o seu quanto o meu) e trabalhasse com o valor desse edit, usando o ComboBox somente para escolher o Item. A idéia de SOBREPOR os componente foi SOMENTE para que o usuário final visualizasse ambos como um único componente e a solução VISUAL ficar mais próxima ao que o Adriano queria. CLARO que existem soluções mais adequadas. Eu aposto no uso do LockupComboBox ou até mesmo na criação de OUTRO componente usando o ComboBox como classe ancestral. Só que o Adriano deixou bem claro que NÃO gostaria de usar outro componente que não fosse o COMBOBOX (mesmo sem eu entender o porque). Daí a minha idéia, pela qual peço desculpas se ´maculei´ a integridade do Delphi com seus maravilhosos recursos. Mas , como prometi, assim que eu tiver tempo, conseguirei uma solução mais PROFISSIONAL, nem que para isso eu tenha que escrever um novo componente e xingá-lo de ´ComboBox´ para que o Adriano possa usar .
Abraços a todos...
Gostei + 0
02/12/2006
Adriano_servitec
Alias fica ateh mais facil de usar esse codigo aqui
Em vez de
[b:4a1ee86f23]if (combobox1.Text <> ´´) then begin
sql.add(´ and (matricula = :pmatricula)´);
Parambyname(´pmatricula´).AsString := ComboBox1.text;
end;[/b:4a1ee86f23]
Sobre a questao de usar componentes da paleta Data Controls, isso eh pq nao gosto de usar dbedit, dbloockup, etc. Sei que sao mais faceis de usar, incusive no combobox ateh tive que colocar esse codigo por nao ter na propriedade dele [b:4a1ee86f23]DropDownRolws[/b:4a1ee86f23]
procedure TForm9.ComboBox1DropDown(Sender: TObject); begin combobox1.width:=450; // para vc enchergar os dados end; procedure TForm9.ComboBox1Click(Sender: TObject); begin combobox1.width:=20; // voltar ao tamanho normal do combo end;
Por tanto pra mim ja esta 100¬. E tambem resolvido
Agradeço a todos pela ajuda
Adriano
Gostei + 0
02/12/2006
Martins
Mas se está funcionando 100¬ então manda ver, continua aí.
Boa sorte!
Gostei + 0
02/12/2006
Martins
mais uma vez, minhas sinceras desculpas.
[b:140edc05ef]Adriano[/b:140edc05ef] desculpe-me também, espero que vc tenha sucesso no desenvolvimento do seu software.
boa sorte a todos.
Gostei + 0
02/12/2006
Brasidata
não há do que se desculpar... Eu não me ofendi, não.. é que a linguagem escrita é complicada e muitas vezes pode ter um sentido ambíguo. Hora alguma vc foi hostil (e espero não ter sido tb). Afinal, isso é um fórum e como tal, as opniões tem que ser diferentes para justificar a discussão.
Acho que o Adriano tá achando o caminho dele, devagar o sistema tá funcionando e graças ao DELPHI, seu recursos e suas gambiarras a gente sempre tem uma resposta para as nossas dificuldades de desenvolvimento.
E viva as diferenças...
PS: Mas a guerra tava tão boa!!!!! :)
PS2: (só pra relaxar)... Encontrei uma excelente utilidade para aquele suporte de CDs que veio na revista PCExpert numero 29. Graças a ele consegui consertar a válvula da minha descarga... Acho que funcionará com o suporte das outras edições tb... E VIVA A GAMBIARRA!!!!!!!!
Gostei + 0