Fórum Como fazer filtro composto DELPHI #613678

31/12/2020

0

Bom dia, estou com uma questão aqui, preciso fazer uma pesquisa com 3 campos combobox e 1 edit, não faço ideia de como fazer isto, eu apenas sei fazer filtro com um componente, com 4 eu nem faço ideia de como faz, alguem me ajuda por favor

utilizo SQLite de BD

Muito obrigado, desde ja agradeço
Ramboli

Ramboli

Responder

Post mais votado

31/12/2020

você precisa nos dizer quais são os itens desses comboboxes e como deverão funcionar os filtros.
vou tentar adivinhar aqui... supondo que todos os comboboxes estejam com Style = cdDropDownList

você precisa de uma parte fixa da instrução, e também de uma parte variável.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var
   strSELECT, strWHERE: string;
 
   procedure AddWhere( strCondicao: string );
   begin
      if strWhere <> EmptyStr then strWhere := strWhere + ' AND ';
      strWhere := strWhere + strCondicao;
   end;
begin
   strSELECT := 'SELECT [LISTA DE CAMPOS OU *] FROM TABELA';
   strWHERE := EmptyStr;
 
   // 1o. combobox, com o filtro por UFs
   if ComboBox1.Text <> 'TODOS' then
      AddWhere('UF = '+QuotedStr(ComboBox1.Text));
 
   // 2o. combobox, com o estado civil (casado. solteiro, etc)
   if ComboBox2.Text <> 'TODOS' then
      AddWhere('ESTCIVIL = '+QuotedStr(ComboBox2.Text));
 
   // 3o. combobox, com os campos que serão utilizados para filtrar o conteúdo do Edit
   // por exemplo: no combobox haverá as opções: Código / Nome / CNPJ
   // e no Edit será indicado o valor a procurar
   if Edit1.Text <> EmptyStr then
   begin
      if ComboBox3.ItemIndex = 0 then // pesquisa por código
         AddWhere('CODIGO = '+QuotedStr(Edit1.Text))
      else
      if ComboBox3.ItemIndex = 1 then // pesquisa por nome
         AddWhere('NOME LIKE '+QuotedStr('%'+Edit1.Text+'%'))
      else // pesquisa por CNPJ
         AddWhere('CNPJ = '+QuotedStr(Edit1.Text));
   end;
 
   if strWHERE <> EmptyStr then
      strSELECT := strSELECT + ' WHERE ' + strWHERE;
 
   // o código abaixo depende dos componentes utilizados
   objQuery.Close;
   objQuery.SQL.Text := strSELECT;
   objQuery.Open;
 
end;

Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

31/12/2020

Ramboli

você precisa nos dizer quais são os itens desses comboboxes e como deverão funcionar os filtros.
vou tentar adivinhar aqui... supondo que todos os comboboxes estejam com Style = cdDropDownList

você precisa de uma parte fixa da instrução, e também de uma parte variável.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var
   strSELECT, strWHERE: string;
 
   procedure AddWhere( strCondicao: string );
   begin
      if strWhere <> EmptyStr then strWhere := strWhere + ' AND ';
      strWhere := strWhere + strCondicao;
   end;
begin
   strSELECT := 'SELECT [LISTA DE CAMPOS OU *] FROM TABELA';
   strWHERE := EmptyStr;
 
   // 1o. combobox, com o filtro por UFs
   if ComboBox1.Text <> 'TODOS' then
      AddWhere('UF = '+QuotedStr(ComboBox1.Text));
 
   // 2o. combobox, com o estado civil (casado. solteiro, etc)
   if ComboBox2.Text <> 'TODOS' then
      AddWhere('ESTCIVIL = '+QuotedStr(ComboBox2.Text));
 
   // 3o. combobox, com os campos que serão utilizados para filtrar o conteúdo do Edit
   // por exemplo: no combobox haverá as opções: Código / Nome / CNPJ
   // e no Edit será indicado o valor a procurar
   if Edit1.Text <> EmptyStr then
   begin
      if ComboBox3.ItemIndex = 0 then // pesquisa por código
         AddWhere('CODIGO = '+QuotedStr(Edit1.Text))
      else
      if ComboBox3.ItemIndex = 1 then // pesquisa por nome
         AddWhere('NOME LIKE '+QuotedStr('%'+Edit1.Text+'%'))
      else // pesquisa por CNPJ
         AddWhere('CNPJ = '+QuotedStr(Edit1.Text));
   end;
 
   if strWHERE <> EmptyStr then
      strSELECT := strSELECT + ' WHERE ' + strWHERE;
 
   // o código abaixo depende dos componentes utilizados
   objQuery.Close;
   objQuery.SQL.Text := strSELECT;
   objQuery.Open;
 
end;

Ler Mais...



Opa, bem, na verdade estou precisando pro intraweb, eu adaptei seu code, na deburação a query recebe o valor de strSELECT certinho, mas não filtra a grid, esqueci de fazer algo? Fiz igual aqui

1
2
3
objQuery.Close;
  objQuery.SQL.Text := strSELECT;
  objQuery.Open;


So substituindo a query
Responder

Gostei + 0

31/12/2020

Ramboli

você precisa nos dizer quais são os itens desses comboboxes e como deverão funcionar os filtros.
vou tentar adivinhar aqui... supondo que todos os comboboxes estejam com Style = cdDropDownList

você precisa de uma parte fixa da instrução, e também de uma parte variável.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var
   strSELECT, strWHERE: string;
 
   procedure AddWhere( strCondicao: string );
   begin
      if strWhere <> EmptyStr then strWhere := strWhere + ' AND ';
      strWhere := strWhere + strCondicao;
   end;
begin
   strSELECT := 'SELECT [LISTA DE CAMPOS OU *] FROM TABELA';
   strWHERE := EmptyStr;
 
   // 1o. combobox, com o filtro por UFs
   if ComboBox1.Text <> 'TODOS' then
      AddWhere('UF = '+QuotedStr(ComboBox1.Text));
 
   // 2o. combobox, com o estado civil (casado. solteiro, etc)
   if ComboBox2.Text <> 'TODOS' then
      AddWhere('ESTCIVIL = '+QuotedStr(ComboBox2.Text));
 
   // 3o. combobox, com os campos que serão utilizados para filtrar o conteúdo do Edit
   // por exemplo: no combobox haverá as opções: Código / Nome / CNPJ
   // e no Edit será indicado o valor a procurar
   if Edit1.Text <> EmptyStr then
   begin
      if ComboBox3.ItemIndex = 0 then // pesquisa por código
         AddWhere('CODIGO = '+QuotedStr(Edit1.Text))
      else
      if ComboBox3.ItemIndex = 1 then // pesquisa por nome
         AddWhere('NOME LIKE '+QuotedStr('%'+Edit1.Text+'%'))
      else // pesquisa por CNPJ
         AddWhere('CNPJ = '+QuotedStr(Edit1.Text));
   end;
 
   if strWHERE <> EmptyStr then
      strSELECT := strSELECT + ' WHERE ' + strWHERE;
 
   // o código abaixo depende dos componentes utilizados
   objQuery.Close;
   objQuery.SQL.Text := strSELECT;
   objQuery.Open;
 
end;

Ler Mais...



Opa, bem, na verdade estou precisando pro intraweb, eu adaptei seu code, na deburação a query recebe o valor de strSELECT certinho, mas não filtra a grid, esqueci de fazer algo? Fiz igual aqui

1
2
3
objQuery.Close;
  objQuery.SQL.Text := strSELECT;
  objQuery.Open;


So substituindo a query

Ler Mais...



Opa, resolvi aqui, foi necessário dar um refresh na query apos abrir ela

1
2
3
4
objQuery.Close;
   objQuery.SQL.Text := strSELECT;
   objQuery.Open;
objQuery.Refresh;


Muito obrigado cara
Responder

Gostei + 0

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

Aceitar