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

Responder a