4D v16.3

QUERY BY FORMULA

Home

 
4D v16.3
QUERY BY FORMULA

QUERY BY FORMULA 


 

QUERY BY FORMULA ( Tabellenname {; Formel} ) 
Parameter Typ   Beschreibung
Tabellenname  Tabelle in Tabelle, in der eine Datensatzauswahl zurückgegeben wird
Formel  Boolean in 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. Formel ist ein Boolean Ausdruck, der den Wert WAHR oder FALSCH hat. Bei WAHR wird der Datensatz in die neue Auswahl aufgenommen.

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).

Sind automatische Verknüpfungen zwischen den Tabellen vorhanden, werden sie in der Regel nicht verwendet, sondern nur in folgenden Fällen:

  • Wenn SuchFormel sich nicht in der Form {Feld; Vergleichsoperator; Wert} aufschlüsseln lässt.
  • Wenn zwei Felder der gleichen Tabelle miteinander verglichen werden.

    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: 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 aktiviert SQL joins für eine spezifische Suche nach Formel:

 $currentval:=Get database parameter(QUERY BY FORMULA Joins)
 SET DATABASE PARAMETER(QUERY BY FORMULA Joins;2) `SQL joins aktivieren
  `Alle Zeilen der Kundenrechnungen "ACME" suchen,
  `auch wenn die Tabellen nicht verknüpft sind.
 QUERY BY FORMULA([invoice_line];([invoice_line]invoice_id=[invoice]id & [invoice]client="ACME"))
 SET DATABASE PARAMETER(QUERY BY FORMULA Joins;$currentval)#
  `Die aktuellen Einstellungen wiederherstellen



Siehe auch 

QUERY
QUERY BY SQL
QUERY SELECTION
QUERY SELECTION BY FORMULA

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Suchen
Nummer: 48

Dieser Befehl ändert den aktuellen DatensatzDieser Befehl ändert die aktuelle AuswahlThis command can be run in preemptive processesIm remote Modus anderes Verhalten

 
GESCHICHTE 

Geändert: 4D v11 SQL Release 2

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)