Quando operamos um conjunto de dados, muitas vezes precisamos filtrar os dados. Por exemplo: uma tabela de dados chamada Cliente possui CustNo, CustName, Country, Address, Phone, State, TaxRate e outros campos. Para registros de clientes na China ou números de clientes superiores a 1.000, o conjunto de dados precisa ser filtrado. Em resumo, existem os seguintes métodos de filtragem:
1. Usando as propriedades de filtro de TTable e TQuery
1. Defina a propriedade Filter em tempo de design
Por exemplo, defina Filter como: Country='China' e depois altere a propriedade Filtered para True (observe que a filtragem só é efetiva quando Filtered for True). Então você só poderá ver os registros cujo conteúdo do campo País correspondente seja 'China'.
Os operadores que podem ser usados ao definir o Filtro são: <, >, <=, >=, =, <>, AND, OR, NOT.
Por exemplo, se você definir o Filtro como: CustNo>=1000andCustNo<=5000, só poderá ver registros de clientes com números de clientes entre 1.000 e 5.000.
2. Filtragem dinâmica durante a execução do programa
Para alterar a propriedade Filter enquanto o programa está em execução, isso inclui duas situações:
(1) O lado direito do operador é uma constante, por exemplo: Tabela1Filtro:=′Estado′+′=′+′′′HI′′′;
Nota: As constantes de string devem ser colocadas entre três pares de aspas simples.
(2) O lado direito do operador não é uma constante, pode ser um valor especificado por uma variável ou um valor fornecido por uma caixa de entrada. Neste momento, você precisa usar a função Formatar. A forma do código é: Table1Filter:=Format(′State′+′=′+′′′%S′′′,[StateValue]); onde StateValue é uma variável de string à qual foi atribuído um valor e também pode ser atribuída. estar em outras formas, por exemplo:Edit1Text.
2. Use ApplyRange para filtrar registros no conjunto de dados
Ao executar o código a seguir, você só poderá ver registros de clientes com números de clientes entre 1.000 e 5.000. Os diversos processos que compõem esta rotina são:
ApplyRange,SetRangeStart,SetRangeEnd.
Tabela1SetRangeStart;
Tabela1[′CustNo′]:=1000;
Tabela1SetRangeEnd;
Tabela1[′CustNo′]:=5000;
Tabela1ApplyRange;
Nota: Este processo funciona apenas em campos indexados. Se quiser filtrar com base em campos não indexados, você também pode usar um pequeno truque: crie um índice falso. O método de implementação é: Table1.IndexFieldNames:=nome do campo Delphi também fornece métodos simples de chamada de SetRangeStart, SetRangeEnd e ApplyRange, por exemplo: Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. Use o evento OnFilterRecord para filtrar O evento OnFilterRecord permite criar programas de filtragem com base em campos sem chave, por exemplo:
PRocedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
começar
Aceitar:=DataSet[′Estado′]=′CA′;
fim;
4. Instruções SQL usando controle TQuery
1.As instruções SQL não contêm variáveis e parâmetros
Selecione*doCliente
OndeCustNo>=1000andCustNo<=5000
2.Instruções SQL contêm parâmetros
Selecione*doCliente
WhereCustNo>=:CustNo
O parâmetro CustNo recebe um valor durante o tempo de execução.
3.Instruções SQL contêm variáveis
Neste momento, o código para adicionar instruções SQL ao controle TQuery deve ser escrito assim:
Consulta1.Fechar;
Consulta1.SQL.Clear;
Query1.SQL.Add(Format(′Select*fromCustomer′+′′+′whereState=′+′′′%S′′′,[StateValue]));
Query1.Open; Entre os quatro métodos acima, o quarto é o mais poderoso e mais flexível de usar.