Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
QUERY BY FORMULA
|
QUERY BY FORMULA ( Tabellenname {; SuchFormel} ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
Tabellenname | Tabelle |
![]() |
Tabelle, in der eine Datensatzauswahl zurückgegeben wird | |||||
SuchFormel | Boolean |
![]() |
Suchformel | |||||
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.
Beide Befehle wenden Formel auf jeden Datensatz der Tabelle bzw. der Auswahl an. SuchFormel ist ein Boolean Ausdruck, der den Wert WAHR oder FALSCH hat. Bei WAHR wird der Datensatz in die neue Auswahl aufgenommen.
SuchFormel 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. SuchFormel 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.
Warnung: Die Parameter ($1...$n) werden in Formel nicht unterstützt.
Wird der Parameter SuchFormel 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 "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 gelten folgende Regeln:
Sind automatische Verknüpfungen zwischen den Tabellen vorhanden, werden sie in der Regel nicht verwendet, sondern nur in folgenden Fällen:
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.
Beispiel: Die Anweisung QUERY BY FORMULA([mytable]);[mytable]myfield=myvariable) läuft auf dem Server, jedoch mit dem Inhalt der Variablen myvariable des Client-Rechners.
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)
` Finde Rechnungen, die im Dezember eingegeben wurden
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)
` Finde Namen, die mehr als 10 Zeichen enthalten
Dieses Beispiel verwendet einen join für die Suche nach allen Zeilen von "ACME" Kundenrechnungen, selbst wenn die Tabellen nicht verknüpft sind:
QUERY BY FORMULA([invoice_line];([invoice_line]invoice_id=[invoice]id&[invoice]client="ACME"))
QUERY
QUERY BY SQL
QUERY SELECTION
QUERY SELECTION BY FORMULA
Produkt: 4D
Thema: Suchen
Nummer:
48
Geändert: 4D v11 SQL Release 2
4D Programmiersprache ( 4D v20 R7)