4D v16.3QUERY BY FORMULA |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY FORMULA
QUERY BY FORMULA
Der Befehl QUERY BY FORMULA sucht nach Datensätzen in Tabellenname. QUERY BY FORMULA ändert die aktuelle Auswahl Tabellenname für den aktuellen Prozess. Der erste Datensatz der neuen Auswahl ist nun der aktuelle Datensatz. Der Datensatz wird geladen, falls er nicht bereits dem bisherigen aktuellen Datensatz entspricht. QUERY BY FORMULA und QUERY SELECTION BY FORMULA haben dieselbe Arbeitsweise. Der Unterschied liegt darin, dass QUERY BY FORMULA jeden Datensatz in der Tabelle durchsucht, während QUERY SELECTION BY FORMULA nur die Datensätze der aktuellen Auswahl durchsucht. Formel kann einfach sein, z.B. ein Datenfeld mit einem Wert vergleichen; oder komplex, z.B. eine Berechnung durchführen oder eine Information in einer verknüpften Tabelle bewerten. Formel kann ein 4D Befehl sein oder eine selbst erstellte Methode bzw. ein Ausdruck. Bei Feldern vom Typ Text oder alphanumerisch können Sie auch mit dem Joker-Zeichen @ arbeiten und mit dem Operator "enthält Schlüsselwort" (%) für Volltextsuche. Weitere Informationen dazu finden Sie unter dem Befehl QUERY. Wird der Parameter Formel nicht angegeben, erscheint der Suchdialog. (Um eine Zeile mit Formel hinzufügen, kann der Benutzer die Schaltfläche [+] mit gedrückter Alt-Taste anklicken.) Ist die Suche ausgeführt, wird der erste Datensatz der neuen Auswahl von der Festplatte geladen und zum aktuellen Datensatz. Diese Befehle führen je nach Suchtyp die gleichen Suchläufe wie mit dem Befehl QUERY aus. So führt z.B. die Anweisung QUERY BY FORMULA([mytable]; [mytable]myfield=value) dasselbe aus wie QUERY([mytable]; [mytable]myfield=value), d.h. sie kann auch den Index verwenden. 4D kann auch Suchläufe mit nicht-optimierbaren Teilen optimieren. Dazu werden zuerst die optimierbaren Teile ausgeführt und die Ergebnisse dann mit der restlichen Suche kombiniert. Beispiel: Die Anweisung QUERY BY FORMULA([mytable]; Length(myfield)=value) wird nicht optimiert. Die Anweisung QUERY BY FORMULA([mytable]; Length(myfield)=value1 | myfield=value2) wird dagegen teilweise optimiert. Diese Befehle führen standardmäßig "joins" wie SQL aus, wenn Sie Felder aus unterschiedlichen Tabellen vergleichen. Das heißt, es muss nicht zwingend eine automatische Verknüpfung zwischen den Tabellen existieren. Sie können z.B. eine Anweisung vom Typ QUERY BY FORMULA([Table_A];([Table_A]field_X = [Table_B]field_Y) & ([Table_B]field_Y = "abc")) verwenden (siehe Beispiel 3). Der erste Teil der Formel ([Table_A]field_X = [Table_B]field_Y) definiert die Verbindung (join) zwischen den beiden Feldern, der zweite Teil ([Table_B]field_Y = "abc") definiert die Suchkriterien (es muss mindestens eins gesetzt sein).
4D Server: Dieser Befehl wird auf dem Server ausgeführt, was seine Ausführung optimiert. Beachten Sie jedoch, dass die Suche bei direkt über Formel aufgerufenen Variablen mit dem Wert der Variablen des Client-Rechners berechnet werden. Hinweis zur Kompatibilität: Bis 4D Server v11 wurde QUERY BY FORMULA auf dem Client-Rechner ausgeführt. Zur Wahrung der Kompatibilität wird diese Arbeitsweise für konvertierte Datenbanken beibehalten. Es gibt jedoch eine Einstellung zur Kompatibilität und einen Selektor im Befehl SET DATABASE PARAMETER, um die server-seitige Ausführung für konvertierte Datenbanken zu aktivieren. Dieses Beispiel findet die Datensätze für alle Rechnungen, die - unabhängig vom Jahr - im Monat Dezember eingegeben wurden. Dazu wird die Funktion Month of auf jeden Datensatz angewandt. Diese Suche könnte sonst nur ausgeführt werden, wenn für Monat ein eigenes Feld eingerichtet würde: QUERY BY FORMULA([Invoice];Month of([Invoice]Entered)=12) Dieses Beispiel findet die Datensätze für alle Personen, deren Name mehr als 10 Zeichen enthält: QUERY BY FORMULA([People];Length([People]Name)>10) Dieses Beispiel aktiviert SQL joins für eine spezifische Suche nach Formel: $currentval:=Get database parameter(QUERY BY FORMULA Joins)
Siehe auch
QUERY
|
EIGENSCHAFTEN
Produkt: 4D GESCHICHTE
Geändert: 4D v11 SQL Release 2 ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||