4D v14.3QUERY BY FORMULA |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.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 das Dialogfenster Suche nach Formel. Ist die Suche ausgeführt, wird der erste Datensatz der neuen Auswahl von der Festplatte geladen und der aktuelle 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 Teilen, die nicht-optimierbar sind, 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. Das heißt, es muss nicht zwingend eine automatische Verknüpfung zwischen Tabelle A und Tabelle B existieren, um eine Anweisung vom Typ QUERY BY FORMULA([Tabelle_A];[Tabelle_A]Feld_X = [Tabelle_B]Feld_Y zu verwenden (siehe Beispiel 3).
Hinweis: Zur Wahrung der Kompatibililät ist es möglich, die "joins" Mechanismen zu deaktivieren, entweder global über die Voreinstellungen (nur konvertierte Datenbanken) oder pro Prozess über den Befehl SET DATABASE PARAMETER. 4D Server: Die Befehle laufen ab Version 11 auf dem Server, was ihre Ausführung optimiert. Beachten Sie jedoch, dass die Suche bei direkt über Formel aufgerufenen Variablen mit den Werten der Variablen des Client-Rechners berechnet werden. Diese Vorgehensweise gilt jedoch nicht für Formeln mit Methoden, die ihrerseits Variablen aufrufen. Der Wert dieser Variablen wird auf dem Server berechnet. In diesem Kontext ist die Verwendung der Option Auf Server ausführen sinnvoll, denn sie ermöglicht, dass eine Methode während der Übergabe von Parametern (Variablen) auf dem Server ausgeführt wird. 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) |
EIGENSCHAFTEN
Produkt: 4D
GESCHICHTE
Geändert: 4D v11 SQL Release 2 SIEHE AUCH
QUERY ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v12.4) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||