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