Fórum preenchendo um combobox com digitação em um edit trazendo do banco de dados #381139

12/07/2010

0

olá pessoal, estou precisando urgentemente de uma ajuda, e não estou conseguindo, preciso preencher um combobox com dados de uma tabela. bem isto eu já consegui fazer. trazer os dados de um campo. o codigo éstá abaixo. porem preciso filtrar os dados que vem, com os dados de outro campo. ex. preencher combobox com campo numero aonde numeros = campo livro selecionado no edit text. ou seja o combobox será preenchido com os  numeros referentes ao livro tal que foi digitado no edit. este codigo preenche o combobox perfeitamente com os dados do campo.   combobox1.Items.clear;
       dm.qry_capitulo.First;
       While not  dm.qry_capitulo.Eof do begin
        combobox1.Items.add(dm.qry_capitulo.Fieldbyname('capitulo').asstring);
         dm.qry_capitulo.Next;   preciso colocar um filtro neste codigo para filtrar pelo edit. se alguém puder ajudar agradeço muito. geraldo leal
Geraldo Leal

Geraldo Leal

Responder

Posts

12/07/2010

Wilson Junior

Você quer filtrar a sua qry_capitulo com o valor do Edit, é isto?
Responder

Gostei + 0

12/07/2010

Geraldo Leal

Sim wilson, isto mesmo, consigo fazer o codigo no sql da query, fica assim. select * from tabela where livro = 'maria' and capitulo = '3' . ele traz o resultado e mostra no dbgrid. so que preciso mostrar em um richedit, então, com o codigo acima consigo preencher o combobox direto da query, mais ele fica com todos os dados do campo capitulo, vamos dizer que tem 200 linhas. preciso filtrar com um edit aonde coloco maria e ele se preenche somente com os dados de maria ou seja 20 linhas. sei também que se colocar o codigo select * from tabela where capitulo = + quotedstr(edit1.text) . mais não consigo  fazer .Obrigado por ter atendido meu chamado. sou iniciante em delphi e em programação. Sucesso  - geraldo
Responder

Gostei + 0

12/07/2010

Wilson Junior

Acho que estou começando a entender, você quer mostrar em TRichEdit o conteúdo do capítulo 3 do livro Maria, sendo que você pode filtrar pelo livro e pelo capítulo, e ao informar o livro, você mostra todos os capítulos em em TComboBox para o usuário selcionar.

Perguntas:
- Ao selecionar o capítulo ele deve mostrar o conteúdo do mesmo no TRichEdit?
- Onde está gravado o conteúdo do capítulo? e este conteúdo está separado por capítulos?

Aguardo retorno.
Responder

Gostei + 0

12/07/2010

Geraldo Leal

Boa tarde wilson,  exatamente o que preciso, preencher o combobox com os dados que vem do banco filtrado pelo edit1 que tem o nome maria. esta parte de preencher o edit, já consegui fazer, eu tenho um listbox aonde preencho com os livros, ai clico no livro de interesse e o mesmo vai para o edit. falta eu abrir o combo e os dados estarem la referente ao livro clicado. os dados referentes ao capitulo estão em um campo texto e cada capitulo tem digamos 10 linhas de texto. então . no edit . preenchemos com maria, no combo com os capitulos de vamos dizer de 1 a 20 . clicamos no 3 e manda os dados referenes que (são os textos ) para o richedit. obrigado pelo retorno urgente sucesso geraldo leal
Responder

Gostei + 0

12/07/2010

Wilson Junior

Inclua os componentes:
  - TClientDataSet (cdsCapitulo)
  - TDataSource (dsCapitulo)
  - TDBLookupComboBox (dblcbCapitulo)
  - TDBRichEdit (dbreTextoCapitulo)

Ajuste as propriedades:
  - dsCapitulo:
      * DataSet = cdsCapitulo

  - cdsCapitulo:
      * CommandText = SELECT ID_Capitulo, TextoCapitulo FROM TABLE_CAPITULO WHERE Livro = 'Nome_Livro' ORDER BY ID_Capitulo

  - dblcbCapitulo
      * ListSource = dsCapitulo
      * ListField = ID_Capitulo (Campo que será mostrado na lista, pode ter mais do que 1, sendo separados por ";". Exemplo: Capitulo;Nome)
      * KeyField = ID_Capitulo (Campo índice)

  - dbreTextoCapitulo
      * DataSource = dsCapitulo
      * DataField = TextoCapitulo

Ao selecionar o livro, assim como você já está fazendo, altere o "cdsCapitulo.CommandText" filtrando pelo nome do livro selecionado, ele automaticamente preencherá o dblcbCapitulo.
Bom, agora quando for selecionado o capítulo, automaticamente será preenchido o seu RichEdit (dbreTextoCapitulo).

Qualquer coisa é só perguntar.
Espero ter claborado.
Responder

Gostei + 0

12/07/2010

Geraldo Leal

Boa Noite Wilson, estou tendo alguns problemas, pois não te falei, mais estou trabalhando com componentes da palheta interbase. inclusive com querys. então tem algumas coisas nos componentes que me passou que não estou familiarizado, se puder converter para mim agradeço muito. seu codigo e o meu logo em baixo de cada topico seu.   - TClientDataSet (cdsCapitulo)                  =   ibquery( cdstabela) - estou usando query
  - TDataSource (dsCapitulo)                    =  TdataSource (ds_tabela) --este mesmo
  - TDBLookupComboBox (dblcbCapitulo)      =  TDBLookupComboBox (dblcbCapitulo) - estou com combobox                                                                 mais tudo bem com dblookupcombobox.
  - TDBRichEdit (dbreTextoCapitulo)           =  TDBRichEdit (dbreTextoCapitulo) - aqui estou com richedit                                                                mais também pode ser tdbrichedit.


Ajuste as propriedades:
  - dsCapitulo:
      * DataSet = cdsCapitulo aqui eu colocaria ds_tabela = cdstabela.

  - cdsCapitulo:
      * CommandText = SELECT ID_Capitulo, TextoCapitulo FROM TABLE_CAPITULO WHERE Livro = 'Nome_Livro' ORDER BY ID_Capitulo aqui eu não sei como colocar esta linha na query.   seria assim, o inicio! = select capitulo,texto from tabela qhere livro = .......................

  - dblcbCapitulo
      * ListSource = dsCapitulo aqui  coloquei o ds tabela
      * ListField = ID_Capitulo (Campo que será mostrado na lista, pode ter mais do que 1, sendo separados por ";". Exemplo: Capitulo;Nome) aqui coloquei o campo capitulo
      * KeyField = ID_Capitulo (Campo índice) e aqui coloquei o campo capitulo.

  - dbreTextoCapitulo
      * DataSource = dsCapitulo
      * DataField = TextoCapitulo aqui - coloquei o ds tabela e aqui o campo texto.   o dblookup, preenche quando eu abro o programa, os dados vem para o listbox, eu clico em um campo , o nome vai para o edit, ai eu clico em um botão para mostrar, por enquanto ele mostra em um dbgrid. somente ai, quando mostra o nome no dbgrid o campo capitulo preenche o lookupcombobox. obrigado pela paciencia. sucesso geraldo leal
Responder

Gostei + 0

12/07/2010

Marco Salles

Sim wilson, isto mesmo, consigo fazer o codigo no sql da query, fica assim. select * from tabela where livro = 'maria' and capitulo = '3' . ele traz o resultado e mostra no dbgrid. so que preciso mostrar em um richedit, então, com o codigo acima consigo preencher o combobox direto da query, mais ele fica com todos os dados do campo capitulo, vamos dizer que tem 200 linhas. preciso filtrar com um edit aonde coloco maria e ele se preenche somente com os dados de maria ou seja 20 linhas. sei também que se colocar o codigo select * from tabela where capitulo = + quotedstr(edit1.text) . mais não consigo  fazer .Obrigado por ter atendido meu chamado. sou iniciante em delphi e em programação. Sucesso  - geraldo
descupe a intromissão , mas ate agora ( alias desde o inicio ) não entendi uma coisa   Se vc tem o Select Original   select * from tabela where livro = 'maria' and capitulo = '3'   Pq que vc não filtra esses dados ??? estou falando em não fazer um outro Select Mas algo do tipo  
DataSet.Filtered:=false;
DataSet.Filter:='Seu Filtro';
DataSet.Filtered:=True;
while Not DataSet.Eof do
  carregarCombo;
  Não daria Wilson Paulista ???
Responder

Gostei + 0

12/07/2010

Geraldo Leal

Sim wilson, isto mesmo, consigo fazer o codigo no sql da query, fica assim. select * from tabela where livro = 'maria' and capitulo = '3' . ele traz o resultado e mostra no dbgrid. so que preciso mostrar em um richedit, então, com o codigo acima consigo preencher o combobox direto da query, mais ele fica com todos os dados do campo capitulo, vamos dizer que tem 200 linhas. preciso filtrar com um edit aonde coloco maria e ele se preenche somente com os dados de maria ou seja 20 linhas. sei também que se colocar o codigo select * from tabela where capitulo = + quotedstr(edit1.text) . mais não consigo  fazer .Obrigado por ter atendido meu chamado. sou iniciante em delphi e em programação. Sucesso  - geraldo
descupe a intromissão , mas ate agora ( alias desde o inicio ) não entendi uma coisa   Se vc tem o Select Original   select * from tabela where livro = 'maria' and capitulo = '3'   Pq que vc não filtra esses dados ??? estou falando em não fazer um outro Select Mas algo do tipo  
DataSet.Filtered:=false;
DataSet.Filter:='Seu Filtro';
DataSet.Filtered:=True;
while Not DataSet.Eof do
  carregarCombo;
  Não daria Wilson Paulista ???
Boa Noite Marcos, obrigado por participar, testei o codigo acima, não deu certo para mim, mais como disse sou novato e as vezes não sei nem como testar. veja bem. tenho este codigo abaixo no botão e funciona perfeito trazendo os dados para um dbgrid, então continuo com dois problemas, não preenche o combobox, tenho que colocar manualmente os numeros dos capitulos em um  edit, pois o edit dos livros se preenche sozinho quando clico no listbox. e o outro é que o resultado vem para um dbgrid. estou conseguindo alguma coisa no richedit. trazer alguns dados. o problema maior é preencher o combobox   dm.qry_tabela.sql.clear;
dm.qry_tabela.close;
dm.qry_tabela.sql.add('select *');
dm.qry_tabela.sql.add('from tabela');
dm.qry_tabela.sql.add(' where livro = ' + quotedstr(edt_livro.text));
dm.qry_tabela.sql.add('and capitulo = '+ quotedstr(edit4.text));
ddm.qry_tabela.open;
dm.qry_tabela.open; assim funciona. falta prencher o combo. obrigado mais uma vez por participar geraldo leal
Responder

Gostei + 0

12/07/2010

Marco Salles

[quote  dm.qry_tabela.sql.clear;
dm.qry_tabela.close;
dm.qry_tabela.sql.add('select *');
dm.qry_tabela.sql.add('from tabela');
dm.qry_tabela.sql.add(' where livro = ' + quotedstr(edt_livro.text));
dm.qry_tabela.sql.add('and capitulo = '+ quotedstr(edit4.text));
ddm.qry_tabela.open;
dm.qry_tabela.open; assim funciona. falta prencher o combo. obrigado mais uma vez por participar geraldo leal
se Assim funciona vc preenche o Combo percorrendo o qry_tabela igual vc fez lá no Primeiro Post A diferença é que agora os Dados ja Estão Filtrados .. Qual a dificuldade nisso ????
Responder

Gostei + 0

12/07/2010

Marco Salles

 dm.qry_tabela.sql.clear;
dm.qry_tabela.close;
dm.qry_tabela.sql.add('select *');
dm.qry_tabela.sql.add('from tabela');
dm.qry_tabela.sql.add(' where livro = ' + quotedstr(edt_livro.text));
dm.qry_tabela.sql.add('and capitulo = '+ quotedstr(edit4.text));
ddm.qry_tabela.open;
dm.qry_tabela.open; assim funciona. falta prencher o combo. obrigado mais uma vez por participar geraldo leal
se Assim funciona vc preenche o Combo percorrendo o qry_tabela igual vc fez lá no Primeiro Post A diferença é que agora os Dados ja Estão Filtrados .. Qual a dificuldade nisso ????
Responder

Gostei + 0

12/07/2010

Geraldo Leal

Wilson, e Marcos boa noite, mais uma vez obrigado pela atenção e ajuda. veja bem Marcos, os codigos que te mostrei eu peguei na internet, e como disse , eu sou iniciante em programação delphi, por isto minha dificuldade. abaixo vai outro codigo que peguei na internet, este preenche a combobox, com os dados do campo capitulo, mais vem todos os dados, o que não sei é juntar estes codigos para que filtre o que preciso. abaixo é uma função. lista campo, no on enter do edit eu coloco ela, ela enche o combo. se puder me mostrar a linha de codigo e aonde ela vai neste codigo para filtrar os dados, agradeço demais.   var
capitulo:string;
begin
   Result := TStringList.Create; //-- Criar lista
  Result.Clear; //-- Limpar lista
  Result.BeginUpdate; //-- Acessar a lista mais rapido, melhora o desempenho
  with DM.tbl_tabela do //-- Para não repetir este nome     begin         First; //-- primeiro registro da tabela (tbl_tabela)
        while not Eof do //-- Enqto não chegar ao fim da tabela (TbNomeTabela)         begin
          Result.Add(FieldByName('capitulo').AsString); //-- Copiar o registro para lista
          
             Next; //-- Ir para o proximo registro
        end;
    end;
  Result.EndUpdate; //-- Retornar o status normal da lista
end; Mais uma vez obrigado pelo tempo de vocês dois saude e paz geraldo leal.

Responder

Gostei + 0

13/07/2010

Marco Salles

ta fácil , mas ta complicado né ...   Deveriamos ter começado assim... Mas nunca é tarde   Qual a sua estrutura de sua Tabela ( Nome da Tabela , Nome dos campos )
Responder

Gostei + 0

13/07/2010

Wilson Junior

Não sei qual a estrutura da tabela, mas de fato, a opção do Marco de utilizar a propriedade "Filter" dependendo da estrutura da sua tabela, pode ser a mais apropriada.

Portanto, nos passe a estrutura das suas tabelas.

E Marco, quando se quer ajudar não é se INTROMETER, e sempre percebo que você quer ajudar.

Aguardo retorno da estrutura.
Responder

Gostei + 0

13/07/2010

Geraldo Leal

  Boa tarde Pessoal, marcos e wilson, obrigado por esta atenção incondicional, são poucos que fazem como vocês, eu, e acredito muita gente agradece.pois já vi vocês atuando em varios posts. segue ai os camos da tabela. nome d tabela (colecao) campos: id_colecao ( id - da tabela) livro ( campo aonde vão todos os livros das coleçoes) id_livro ( ex. um livro pode estar em vinte linhas da tabela e o id livro é o mesmo nas 20 linhas) tipo ( aonde diz se é novo ou usado, o livro maracuja por exemplo, se ele estiver em 20 linhas o tipo também vai estar. id_tipo- topico( dentro de um livro pode ter 30 topicos ou capitulos pagina( um topico pode estar em 30 paginas ex. topico 1- 2- 3-4-5-6-7 etc ) texto  ( é o que vai em cada topico se tem 20 topico tem 20 texto)   id_colecao  - -    livro - -       id_livro - -  tipo - -  id_tipo - - topico - - pagina - - texto - -     01              maracuja           01          usado      01           01            01            qualquer coisa     02              maracuja           01          usado      01           01            02            outro qualquer     03              maracuja           01          usado      01           01            03            qualquer negocio     04             maracuja            01          usado      01           02            01            qualquer coisa     05              maracuja           01          usado      01           02            02            outro qualquer     06              maracuja           01          usado      01           02            03            qualquer negocio     07             maracuja            01          usado      01           03            01            outro qualquer     08             maracuja            01          usado      01           03            02            outro qualquer     09              maracuja           01          usado      01           03            03            qualquer negocio     04               pera                  02          novo        02           01            01            explanação     04               pera                  02          novo        02           01            02            explanação     04               pera                  02          novo        02           02            01            explanação     04               pera                  02          novo        02           02            02            explanação     04               pera                  02          novo        02           03            01            explanação     04               pera                  02          novo        02           03            02           explanação vejamos agora o seguinte, preciso trazer o camo livro ( já estou trazendo e colocando em um edit, aonde estou usando um distinct na query. e o campo topico, ai mostra a pagina e o texto. por isto na query quando faço o teste vem legal,  select from colecao where livro = 'maracuja' and topico = '2'  isto na query. porém quando é para fazer isto no delphi , não consigo, so consigo mostrar tudo que esta no campo. quando clicar no listbox escolhendo maracuja, o nome vai para um edit, está indo. preciso que ele jogue no combo os topicos referentes somente ao maracuja ou seja o 1 -2-3 eu marco o 3 e vem os dados pagina e texto referente ao 3. boa tarde a todos paz e saude geraldo leal
Responder

Gostei + 0

13/07/2010

Geraldo Leal

  Boa tarde Pessoal, marcos e wilson, obrigado por esta atenção incondicional, são poucos que fazem como vocês, eu, e acredito muita gente agradece.pois já vi vocês atuando em varios posts. segue ai os camos da tabela. nome d tabela (colecao) campos: id_colecao ( id - da tabela) livro ( campo aonde vão todos os livros das coleçoes) id_livro ( ex. um livro pode estar em vinte linhas da tabela e o id livro é o mesmo nas 20 linhas) tipo ( aonde diz se é novo ou usado, o livro maracuja por exemplo, se ele estiver em 20 linhas o tipo também vai estar. id_tipo- topico( dentro de um livro pode ter 30 topicos ou capitulos pagina( um topico pode estar em 30 paginas ex. topico 1- 2- 3-4-5-6-7 etc ) texto  ( é o que vai em cada topico se tem 20 topico tem 20 texto)   id_colecao  livro - -    id_livro - -  tipo - -  id_tipo - - topico - - pagina - - texto - -     01         maracuja     01          usado      01           01            01       qualquer coisa     02         maracuja     01          usado      01           01            02       outro qualquer     03         maracuja      01          usado      01           01            03       qualquer negocio     04         maracuja      01          usado      01           02            01       qualquer coisa     05         maracuja      01          usado      01           02            02       outro qualquer     06         maracuja      01          usado      01           02            03       qualquer negocio     07        maracuja       01          usado      01           03            01       outro qualquer     08        maracuja      01          usado      01           03            02        outro qualquer     09         maracuja      01          usado      01           03            03       qualquer negocio     04         pera              02          novo        02           01            01       explanação     04         pera             02          novo        02           01            02        explanação     04         pera             02          novo        02           02            01        explanação     04         pera             02          novo        02           02            02        explanação     04         pera             02          novo        02           03            01        explanação     04         pera             02          novo        02           03            02        explanação vejamos agora o seguinte, preciso trazer o camo livro ( já estou trazendo e colocando em um edit, aonde estou usando um distinct na query. e o campo topico, ai mostra a pagina e o texto. por isto na query quando faço o teste vem legal,  select from colecao where livro = 'maracuja' and topico = '2'  isto na query. porém quando é para fazer isto no delphi , não consigo, so consigo mostrar tudo que esta no campo. quando clicar no listbox escolhendo maracuja, o nome vai para um edit, está indo. preciso que ele jogue no combo os topicos referentes somente ao maracuja ou seja o 1 -2-3 eu marco o 3 e vem os dados pagina e texto referente ao 3. boa tarde a todos paz e saude geraldo leal
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar