kierk 0 Denunciar post Postado Dezembro 27, 2005 Pessoal, Num form, tenho um ListBox, além de um DBGrid - apontado para o DataSource DS_consulta, este para o ClientDataset CDSq (colocado no DataModulte DM_conexao), este para o DataSetProvider DSPq, este para o SQLQuery SQLq e, finalmente, este para o SQLConnection SQLC, conectado a um banco de dados que contém apenas a tabela NEW_TABLE. O objetivo é: 1) inserir no ListBox todos os possíveis resultados de um campo da tabela, o que consigo fazer numa boa (embora meio desajeitado visto que sou quase iniciante), com o seguinte código no OnTitleClick do DBGrid (por exemplo, ao clicar na coluna CADFEIRA_LOCAL, o ListBox é preenchido com os itens Rua X, Rua Y, Avenida Fulano, Condomínio Sicrano etc.): procedure TF_consulta.DBGrd_consultaTitleClick(Column: TColumn); var i:integer; begin i:=column.Field.FieldNo-1; campo:=DBGrd_consulta.Columns.FieldName; {mudando a cor de fundo do título} if DBGrd_consulta.Columns.Title.Color<>clYellow then begin DBGrd_consulta.Columns.Title.Color:=clYellow; {preenchendo a lista de possibilidades de cada campo} DM_conexao.SQLq.Close; DM_conexao.SQLq.SQL.Clear; DM_conexao.SQLq.SQL.Add('SELECT DISTINCT '); DM_conexao.SQLq.SQL.Add(campo); //campo fora declarada como variável global DM_conexao.SQLq.SQL.Add(' FROM NEW_TABLE'); DM_conexao.SQLq.Open; LBx_consulta.Items.Clear; while not DM_conexao.SQLq.Eof do begin LBx_consulta.Items.Add(DM_conexao.SQLq.Fields[0].AsString); DM_conexao.SQLq.Next; end; {visulizando a caixa} LBx_consulta.Visible:=true; end else begin DBGrd_consulta.Columns.Title.Color:=clMoneyGreen; LBx_consulta.Items.Clear; LBx_consulta.Visible:=false; end; end; 2) com a lista dos itens possíveis formada na ListBox, fazer com que um clique do usuário num item da mesma dispare uma query que preencha o DBGrid com dados filtrados de acordo com o respectivo item (por exemplo, ao clicar no item Avenida Funano, o DBGrid retorna todos os registros cujo campo CADFEIRA_LOCAL corresponda à Avenida Fulano). Estou usando o código abaixo, correspondente ao evento OnClick da ListBox LBx_consulta, cuja query parece estar certinha; no entanto, o DBGrid apenas mostra sempre toda a tabela, nunca filtra nada: procedure TF_consulta.LBx_consultaClick(Sender: TObject); var subcampo:string; //corresponde ao campo escolhido na DBGrid csql:string; //corresponde ao item escolhido, depois, na ListBox query:string; begin subcampo:=LBx_consulta.Items.Strings[LBx_consulta.ItemIndex]; application.ProcessMessages; query:='SELECT * FROM NEW_TABLE WHERE ' +campo+ ' = '+''''+subcampo+''''; DM_conexao.SQLq.Close; DM_conexao.SQLq.SQL.Clear; DM_conexao.SQLq.SQL.Add(query); if not DM_conexao.SQLq.Prepared then DM_conexao.SQLq.Prepared:=true; DM_conexao.SQLq.Open; end; É isso aí, pessoal, estou há mais de uma semana trabalhando só em cima desse problema, sem avançar meu programa um milímetro sequer - o que, como vocês sabem, gera muita frustração e ansiedade, além de ter gente me pressionando, http://forum.imasters.com.br/public/style_emoticons/default/skull.gif cobrando resultados imediatos. Qualquer ajuda de vocês vai aliviar bastante. Agradeço desde já. Kierk Compartilhar este post Link para o post Compartilhar em outros sites
kierk 0 Denunciar post Postado Dezembro 28, 2005 Pessoal, consegui encontrar o motivo de minha burrice: tinha esquecido de fechar o ClientDataSet antes da query e de o abrir logo após.O problema, ao que me parece, é que eu estou tentando aprender Delphi na marra, misturando material de estudos de tecnologias bem diferentes entre si, como BDE, DBExpress, IB e ADO, enquanto eu trabalho apenas com DBExpress.Isso salva minha cachaçada de Reveillon, já que não vou ter que me preocupar com as cobranças neste caso. Ótimo 2006 a todos!Kierk :natalbiggrin: :natalwink: Compartilhar este post Link para o post Compartilhar em outros sites