Como fazer um select com dados do checklistbox?

Delphi

24/10/2010

Pessoal...
Minha dificuldade é saber como passo todos checked do checklistbox marcados como variavel para o where.

Ou seja, não consigo imaginar como fazer o select funcionar.

Se eu tenho 4 variaveis marcadas no checklistbox

ABRANCHES
BATEL
NOVO MUNDO
PILARZINHO

Como filtro no select dentro do where por estes quatros nomes que pertence apenas a um campo?

exemplo

select * from tabela


where SERVICO = :varcheckbox //AQUI COMO PASSO A CONDIÇÃO?


Não tem como comparar o operador para tantos valores que vem na variavel, pior ainda se passar por um array, ai que não vai reconhecer mesmo.

Não sei se usar o operador OR resolveria neste caso...

Bom se ficou confuso, eu explico melhor.

Obrigado pessoal.



Adriano Dolce

Adriano Dolce

Curtidas 0

Respostas

Jonathan Campos

Jonathan Campos

24/10/2010

var
filtro : String;
i: Integer;
Q: TQuery;
begin
 filtro:= ' ';
  for i:=0 to checklistbox1.Count - 1 do
  begin
    if CheckListBox1.Checked[i] then
    filtro:= filtro + CheckListBox1.Items.Strings[i] + ',';
  end;

Q.Close;
Q.Sql.Clear;
Q.Open;
Q.ExecuteQuery(Q, 'select * from tabela
where SERVICO = in ' + filtro;

end;

Cara o que vc precisa é + ou - isso, qualquer dúvida entre em contato de novo;
GOSTEI 0
Jonathan Campos

Jonathan Campos

24/10/2010

corrigindo alguns erros acima... tinha feito sem testar...
aqui está o certo. Coloquei o resultado da String SQL em um Memo para ficar + facil pra vc compreender.
procedure TForm1.Button1Click(Sender: TObject);
var
filtro : String;
i : Integer;
begin
 for I := 0 to CheckListBox1.Count - 1 do
   if (CheckListBox1.Checked[i]) then
     filtro:= filtro + (CheckListBox1.Items.Strings[i] + ', ') ;

  Delete(filtro, length(filtro) - 1 ,2); //Tirando a Vírgula do ultimo parametro

  Memo1.Lines.Add('select * from tabela where SERVICO in( ' + filtro + ')');
end;

GOSTEI 0
Adriano Dolce

Adriano Dolce

24/10/2010

Obrigado por responder... Mas ainda não deu certo por causa das aspas amigo.

veja

select * from tabela where servicos in('campo1', 'campo2');

Sem as apsas nos campos da erro no select. Tipo faltando o QUOTEDSTR


GOSTEI 0
Jonathan Campos

Jonathan Campos

24/10/2010

Eis o que vc precisa:

var
filtro : String;
i : Integer;
begin
 for I := 0 to CheckListBox1.Count - 1 do
   if (CheckListBox1.Checked[i]) then
     filtro:= filtro + QuotedStr(CheckListBox1.Items.Strings[i]) + ', ' ;

  Delete(filtro, length(filtro) - 1 ,2); //Tirando a Vírgula do ultimo parametro

  Memo1.Lines.Add('select * from tabela where SERVICO in( ' + filtro + ')');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
end;

GOSTEI 0
Adriano Dolce

Adriano Dolce

24/10/2010

Valeu Jonathan Campos, funcionou...

Apenas tive que colocar assim para fechar as aspas no final
Memo1.Lines.Add('select * from tabela where SERVICO in( ' + filtro + ''')');

Estava dando erro de sintaxe, mais esta resolvido.

Muito obrigado


GOSTEI 0
POSTAR