Query.SQL.Text := 'select * from clientes where (codigo = :pcodigo or :pcodigo = 0) and (cpf = :pcpf or :pcpf = 0) and (cadastro = :pcadastro or :pcadastro = 0)'; vamos supor q o filtro seja apenas por cpf, entao:
Query.ParamByName('pcodigo').AsInteger = 0 Query.ParamByName('pcpf').Value = '12345678' Query.ParamByName('pcadastro').AsInteger = 0 Query.Open; +- isso, vc pode verificar sua lista de filtro e atribuir valores a variáveis, depois passa para os parametros... assim vc poderia ter uma unica função para chamar o filtro qndo necessario... 2008/10/21 JB <[EMAIL PROTECTED]>: > tipo assim alessandra: > > select * from clientes where (codigo = :pcodigo or :pcodigo = 0) and > (cpf = :pcpf or :pcpf = '0') and (cadastro = :pcadastro or :pcadastro > = 0) > > entendeu +-? > > 2008/10/21 BandaLemuel <[EMAIL PROTECTED]>: >> Eu Uso assim..... >> >> with Query do >> begin >> Close; >> Sql.clear; >> >> { SQL Principal } >> Sql.text := 'SELECT * FROM TABELA ' ; >> >> { Verifica se filtra por codigo } >> if RgFiltro.itemIndex = 0 then >> begin >> Sql.add ( ' WHERE CODIGO=:CODIGO ' ); >> ParamByName('CODIGO').asinteger := StrToInt ( EdtCodigo.text ); >> end; >> >> { Se filtra por Periodo ]} >> if ( DtIni.Text <> '' ) and ( Dtfin.text <> '' ) then >> begin >> { Uso este IF para verificar se no SQL temo WHERE , se tiver é porque ja tem >> um filtro.... ai ele vai usar o AND ); } >> if pos ( 'WHERE' , Sql.text ) > 0 then >> Sql.Add ( ' AND DATA BETWEEN :DTINI AND :DTFIN ' ) >> else >> Sql.add ( ' WHERE DATA BETWEEN :DTINI AND :DTFIN' ); >> ParamByName('DTINI').asdate := DtIni.Date; >> ParamByName('DTFIN').asdate:= DtFin.date; >> end >> >> end; >> >> Creio que seja isso o que vc quer... ai vc pode fazer o jeito que vc >> precisar..... >> >> Wesley >> >> From: alessandra porto >> Sent: Tuesday, October 21, 2008 7:57 AM >> To: delphi-br@yahoogrupos.com.br >> Subject: Re: [delphi-br] ideias ajuda >> >> josebenedito >> >> comecei a pegar a ideia vce tem um pedacinho de codigo ai que vce usa >> para clarear a ideia >> >> desde já agradeço sua atenção >> >> --- Em ter, 21/10/08, JB <[EMAIL PROTECTED]> escreveu: >> De: JB <[EMAIL PROTECTED]> >> Assunto: Re: [delphi-br] ideias ajuda >> Para: delphi-br@yahoogrupos.com.br >> Data: Terça-feira, 21 de Outubro de 2008, 8:43 >> >> coloca todos os parametros e passa todos para a query, os q nao >> >> utiliza passa o valor 0 por exemplo, e no sql vc verifica se o campo >> >> eh igual a variavel ou a variavel eh igual a 0... entendeu? >> >> 2008/10/21 alessandra porto <alessandraporto11@ yahoo.com. br>: >> >>> preciso de ideias de como fazer essa pesquisa de forma mais eficiente >> >>> tenho que atraves de radiogroup deixar o usuario selecionar as opções que >> >>> farão parte da pesquisa , cada opção carrega uma variavel >> >>> >> >>> tipo: >> >>> paciente: medico convenio unidade >> >>> geral geral geral geral >> >>> nome medico convenio unidade >> >>> >> >>> paciente,medico, convenio, unidade >> >>> são tabelas do banco que se ligam atraves de >> >>> chaves. >> >>> >> >>> fiz algo assim: >> >>> >> >>> with DM3.Qry_Fatura_ Fat do >> >>> begin >> >>> Active:=false; >> >>> sql.Clear; >> >>> SQL.Add(CORPO_ SQL2+' WHERE (DTA_EMIS_GUIA >= :INIC AND >> >>> DTA_EMIS_GUIA <=:FIM)'+COND_ FAT1+COND_ FAT2+COND_ FAT3+COND_ FAT4+COND_ >>> FAT5+' >> >>> ORDER BY DTA_EMIS_GUIA '); >> >>> ParamByName( 'CD_CONV' ).AsInteger :=CD_CONVENIO_ FAT; >> >>> ParamByName( 'INIC').AsDate :=EinicFat.Date; >> >>> ParamByName( 'FIM').AsDate :=EfinalFat. Date; >> >>> Active:=True; >> >>> end; >> >>> >> >>> corposql é uma variavel que contem o sql principal >> >>> >> >>> COND_FAT1+COND_ FAT2+COND_ FAT3+COND_ FAT4+COND_ FAT5 >> >>> >> >>> seria as variaveis que receberiam os valores escolhidos pelo usuario >> >>> >> >>> o problema é como criar os >> >>> >> >>> ParamByName( '').Asinteger :=; >> >>> >> >>> conforme a necessidade do usuario >> >>> >> >>> pois nem sempre ele vai determinar valores todas as variaveis , há casos >> >>> que quando geral não é necessario criar o ParamByName( '').Asinteger :=; >> >>> >> >>> ficaria grata aos amigos que ajudarem com ideias de como fazer isso de >>> forma >> >>> mais eficiente >> >>> >> >>> obs. essa é só uma parte a pesquisa envolve um maior numero de >> >>> tabelas(opções) em uma só pesquisa >> >>> >> >>> Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua >> >>> cara @ymail.com ou @rocketmail. com. >> >>> http://br.new. mail.yahoo. com/addresses >> >>> >> >>> [As partes desta mensagem que não continham texto foram removidas] >> >>> >> >>> >> >> -- >> >> Att. >> >> -- >> >> ____________ _________ _______ >> >> José Benedito >> >> Software Developer >> >> josebenedito@ gmail.com >> >> +55 19 8116-7826 >> >> __________________________________________________ >> Fale com seus amigos de graça com o novo Yahoo! Messenger >> http://br.messenger.yahoo.com/ >> >> [As partes desta mensagem que não continham texto foram removidas] >> >> __________ Information from ESET NOD32 Antivirus, version of virus signature >> database 3541 (20081021) __________ >> >> The message was checked by ESET NOD32 Antivirus. >> >> http://www.eset.com >> >> [As partes desta mensagem que não continham texto foram removidas] >> >> > > > > -- > Att. > > -- > ____________________________ > José Benedito > Software Developer > [EMAIL PROTECTED] > +55 19 8116-7826 > -- Att. -- ____________________________ José Benedito Software Developer [EMAIL PROTECTED] +55 19 8116-7826