Como fazer filtro composto DELPHI
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
utilizo SQLite de BD
Muito obrigado, desde ja agradeço
Ramboli
Curtidas 0
Melhor post
Emerson Nascimento
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.
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.
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;
GOSTEI 1
Mais Respostas
Ramboli
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.
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.
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;
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
objQuery.Close; objQuery.SQL.Text := strSELECT; objQuery.Open;
So substituindo a query
GOSTEI 0
Ramboli
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.
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.
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;
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
objQuery.Close; objQuery.SQL.Text := strSELECT; objQuery.Open;
So substituindo a query
Opa, resolvi aqui, foi necessário dar um refresh na query apos abrir ela
objQuery.Close; objQuery.SQL.Text := strSELECT; objQuery.Open; objQuery.Refresh;
Muito obrigado cara
GOSTEI 0