Pesquisa com dois filtros dbgrid com Delphi e firebird

28/03/2020

0

Meu formulário de Pequisa está com um radiogroup, dois filtros usando combobox , uma Edit e uma bdgrid. Eu precisa selecionar um ítem do RadioGroup, e filtrar nas combobox. Ae depois pesquisar no edit e aparecer o resultado na bdgrid.

Estou usando Firebird com TIBQuery. Estou usando o código abaixo mais eu não sei como incluir os filtros combobox na pesquisa sql.

procedure TfrmPesqIpasgo.btnLocalizarClick(Sender: TObject);
begin
with dm.ibIpasgo do
case rdPesqLocador.ItemIndex of
0 :Begin
close;
sql.Clear;
sql.Add(''''select * from ipasgo'''');
SQL.Add(''''where upper(CODIGOIPASGO) like upper(''''+ QuotedStr(''''%'''' + edtpesquisa.Text + ''''%''''));
sql.Add('''')'''');
sql.Add(''''order by upper(CODIGOIPASGO)'''');
open;
end;
1 :Begin
close;
sql.Clear;
sql.Add(''''select * from ipasgo'''');
sql.Add(''''where upper(descricao) like upper(''''+ QuotedStr(''''%'''' + edtpesquisa.Text + ''''%''''));
sql.Add('''')'''');
sql.Add(''''order by upper(descricao)'''');
open;
end;



end;

dm.ibIpasgo.Open;
if dm.ibIpasgo.IsEmpty then
ShowMessage(''''Nenhum registro encontrado não encontrado!'''');
End;
Vandeir

Vandeir

Responder

Posts

30/03/2020

Emerson Nascimento

veja se é isto:
procedure TfrmPesqIpasgo.btnLocalizarClick(Sender: TObject);
var
	sFiltro: string;
	sOrdem: string;
begin
	sFiltro := '';
	sOrdem := '';
	case rdPesqLocador.ItemIndex of
		0: begin
			sFiltro := 'upper(CODIGOIPASGO) like '+ QuotedStr('%' + upper(edtpesquisa.Text) + '%');
			sOrdem := 'upper(CODIGOIPASGO)';
		end;
		1: begin
			sFiltro := 'upper(descricao) like '+ QuotedStr('%' + upper(edtpesquisa.Text) + '%');
			sOrdem := 'upper(descricao)';
		end;
	end;

	with dm.ibIpasgo do
	begin
		close;
		SQL.Clear;
		SQL.Add('select * from ipasgo');
		SQL.Add('where '+sFiltro);
		SQL.Add('order by '+sOrdem);
		open;
	end;
end;

Responder

30/03/2020

Emerson Nascimento

corrigindo:
procedure TfrmPesqIpasgo.btnLocalizarClick(Sender: TObject);
var
	sFiltro: string;
	sOrdem: string;
begin
	sFiltro := '';
	sOrdem := '';
	case rdPesqLocador.ItemIndex of
		0: begin
			sFiltro := 'upper(CODIGOIPASGO) like '+ QuotedStr('%' + uppercase(edtpesquisa.Text) + '%'); // uppercase() ou ansiuppercase()
			sOrdem := 'upper(CODIGOIPASGO)';
		end;
		1: begin
			sFiltro := 'upper(descricao) like '+ QuotedStr('%' + uppercase(edtpesquisa.Text) + '%'); // uppercase() ou ansiuppercase()
			sOrdem := 'upper(descricao)';
		end;
	end;

	with dm.ibIpasgo do
	begin
		close;
		SQL.Clear;
		SQL.Add('select * from ipasgo');
		SQL.Add('where '+sFiltro);
		SQL.Add('order by '+sOrdem);
		open;
	end;
end;

Responder

30/03/2020

Vandeir

Obrigado pelo retorno amigo. Eu precisava incluir mais um filtro nesse código, por exemplo. No meu banco de dados têm duas tabelas referente a essa tela de pesquisa. Uma tabela armazena a data de atualização da tabela de medicamentos, ae têm tabela correpondente a cada a cada data de atualização de medicamentos, toda vez que sai uma atualização nova eu atualizo, conforme abaixo:

TABELA VERSAO:
ID_VERSAO (chave primária)
DATA_VERSAO

TABELA IPASGO:
ID (chave primária)
ID_VERSAO ( FK - relacionamento) (Esse campo no formulário pesquisa eu precisava colocar um filtro na combobox)
CODIGO_MAT_MED
DESCRIÇÃO
TIPO (Aqui separa os dados por MAT ou MED - Onde precisava colocar um dos filtros no combobox do formulário de pesquisa)
VALOR


Então no código que vc me passou eu precisa incluir um filtro com a data de atualização, para que eu selecione a data, ue pesquisa apenas os registros referente a essa atualização, e dentro da tabela é divido em MAT e MED, ae precisa do segundo combobox para filtrar ou só mat ou só med, conforme necessidade do usuário.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar