Wenn wir einen Datensatz bearbeiten, müssen wir die Daten häufig filtern. Beispiel: Eine Datentabelle mit dem Namen „Kunde“ enthält die Felder „Kundennummer“, „Kundenname“, „Land“, „Adresse“, „Telefon“, „Bundesstaat“, „Steuersatz“ und andere. Für Kundendatensätze mit China oder Kundennummern über 1000 muss der Datensatz gefiltert werden. Zusammenfassend gibt es folgende Filtermethoden:
1. Verwendung der Filtereigenschaften von TTable und TQuery
1. Legen Sie die Filtereigenschaft zur Entwurfszeit fest
Legen Sie beispielsweise „Filter“ auf „Land='China“ fest und ändern Sie dann die Eigenschaft „Gefiltert“ auf „True“ (beachten Sie, dass die Filterung nur wirksam ist, wenn „Gefiltert“ den Wert „True“ hat). Dann können Sie nur die Datensätze sehen, deren entsprechender Feldinhalt „Land“ „China“ ist.
Die Operatoren, die beim Festlegen des Filters verwendet werden können, sind: <, >, <=, >=, =, <>, AND, OR, NOT.
Wenn Sie den Filter beispielsweise auf „CustNo>=1000andCustNo<=5000“ einstellen, können Sie nur Kundendatensätze mit Kundennummern zwischen 1000 und 5000 sehen.
2. Dynamische Filterung während des Programmablaufs
Um die Filtereigenschaft während der Ausführung des Programms zu ändern, sind zwei Situationen erforderlich:
(1) Die rechte Seite des Operators ist eine Konstante, zum Beispiel: Table1Filter:=′State′+′=′+′′′HI′′′;
Hinweis: String-Konstanten müssen in drei Paar einfache Anführungszeichen eingeschlossen werden.
(2) Die rechte Seite des Operators ist keine Konstante, sondern kann ein durch eine Variable angegebener Wert oder ein durch ein Eingabefeld angegebener Wert sein. Zu diesem Zeitpunkt müssen Sie die Formatierungsfunktion verwenden. Die Codeform ist: Table1Filter:=Format(′State′+′=′+′′′%S′′′,[StateValue]); wobei StateValue eine Zeichenfolgenvariable ist, der ein Wert zugewiesen wurde, und dies auch tun kann in anderen Formen vorliegen, zum Beispiel:Bearbeiten1Text.
2. Verwenden Sie ApplyRange, um Datensätze im Datensatz zu filtern
Wenn Sie den folgenden Code ausführen, können Sie nur Kundendatensätze mit Kundennummern zwischen 1000 und 5000 sehen. Die verschiedenen Prozesse, aus denen diese Routine besteht, sind:
ApplyRange,SetRangeStart,SetRangeEnd.
Table1SetRangeStart;
Table1[′CustNo′]:=1000;
Table1SetRangeEnd;
Table1[′CustNo′]:=5000;
Table1ApplyRange;
Hinweis: Dieser Vorgang funktioniert nur bei indizierten Feldern. Wenn Sie nach nicht indizierten Feldern filtern möchten, können Sie auch einen kleinen Trick anwenden: Erstellen Sie einen gefälschten Index. Die Implementierungsmethode lautet: Table1.IndexFieldNames:=Feldname; Delphi bietet auch einfache Methoden zum Aufrufen von SetRangeStart, SetRangeEnd und ApplyRange, zum Beispiel: Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. Verwenden Sie das OnFilterRecord-Ereignis zum Filtern. Mit dem OnFilterRecord-Ereignis können Sie Filterprogramme erstellen, die auf nicht verschlüsselten Feldern basieren, zum Beispiel:
PROcedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
beginnen
Accept:=DataSet[′State′]=′CA′;
Ende;
4. SQL-Anweisungen mit TQuery-Steuerung
1.SQL-Anweisungen enthalten keine Variablen und Parameter
Wählen Sie*ausKunde
WobeiCustNo>=1000 und CustNo<=5000
2.SQL-Anweisungen enthalten Parameter
Wählen Sie*ausKunde
WhereCustNo>=:CustNo
Dem Parameter CustNo wird zur Laufzeit ein Wert zugewiesen.
3.SQL-Anweisungen enthalten Variablen
Zu diesem Zeitpunkt sollte der Code zum Hinzufügen von SQL-Anweisungen zum TQuery-Steuerelement wie folgt geschrieben werden:
Abfrage1.Schließen;
Query1.SQL.Clear;
Query1.SQL.Add(Format(′Select*fromCustomer′+′′+′whereState=′+′′′%S′′′,[StateValue]));
Query1.Open; Von den vier oben genannten Methoden ist die vierte die leistungsfähigste und flexibelste.