Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kierk

resultado da query não é mostrado no dbgrid

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.