Version 6.0
Vergleichsoperatoren vergleichen zwei Werte miteinander und geben TRUE oder FALSE zurück. Sie können Vergleichsoperatoren bei Ausdrücken vom Typ alphanumerisch, numerisch, Datum, Zeit und Zeiger einsetzen. Es gibt folgende Vergleichsoperatoren:
Alphanumerisch
Operation | Syntax | Ergibt | Ausdruck | Wert |
Gleichheit | String = String | Boolean | "abc" = "abc" | True |
"abc" = "abd" | False | |||
Ungleichheit | String # String | Boolean | "abc" # "abd" | True |
"abc" # "abc" | False | |||
Größer als | String > String | Boolean | "abd" > "abc" | True |
"abc" > "abc" | False | |||
Kleiner als | String < String | Boolean | "abc" < "abd" | True |
"abc" < "abc" | False | |||
Größer als oder gleich | String >= String | Boolean | "abd" >= "abc" | True |
"abc" >= "abd" | False | |||
Kleiner als oder gleich | String <= String | Boolean | "abc" <= "abd" | True |
"abd" <= "abc" | False |
Numerisch
Operation | Syntax | Ergibt | Ausdruck | Wert |
Gleichheit | Zahl = Zahl | Boolean | 10 = 10 | True |
10 = 11 | False | |||
Ungleichheit | Zahl # Zahl | Boolean | 10 #11 | True |
10 # 10 | False | |||
Größer als | Zahl > Zahl | Boolean | 11 > 10 | True |
10 > 11 | False | |||
Kleiner als | Zahl < Zahl | Boolean | 10 < 11 | True |
11 < 10 | False | |||
Größer als oder gleich | Zahl >= Zahl | Boolean | 11 >= 10 | True |
10 >= 11 | False | |||
Kleiner als oder gleich | Zahl <= Zahl | Boolean | 10 <= 11 | True |
11 <= 10 | False |
Datum
Operation | Syntax | Ergibt | Ausdruck | Wert |
Gleichheit | Datum = Datum | Boolean | !1.1.97! =!1.1.97! | True |
!20.1.97! =!1.1.97! | False | |||
Ungleichheit | Datum # Datum | Boolean | !20.1.97! # !1.1.97! | True |
!1.1.97! # !1.1.97! | False | |||
Größer als | Datum > Datum | Boolean | !20.1.97! > !1.1.97! | True |
!1.1.97! > !1.1.97! | False | |||
Kleiner als | Datum < Datum | Boolean | !1.1.97! < !20.1.97! | True |
!1.1.97! < !1.1.97! | False | |||
Größer als oder gleich | Datum >= Datum | Boolean | !20.1.97! >=!1.1.97! | True |
!1.1.97!>=!20.1.97! | False | |||
Kleiner als oder gleich | Datum <= Datum | Boolean | !1.1.97!<=!20.1.97! | True |
!20.1.97!<=!1.1.97! | False |
Zeit
Operation | Syntax | Ergibt | Ausdruck | Wert |
Gleichheit | Zeit = Zeit | Boolean | ?01:02:03? = ?01:02:03? | True |
?01:02:03? = ?01:02:04? | False | |||
Ungleichheit | Zeit # Zeit | Boolean | ?01:02:03? # ?01:02:04? | True |
?01:02:03? # ?01:02:03? | False | |||
Größer als | Zeit > Zeit | Boolean | ?01:02:04? > ?01:02:03? | True |
?01:02:03? > ?01:02:03? | False | |||
Kleiner als | Zeit < Zeit | Boolean | ?01:02:03? < ?01:02:04? | True |
?01:02:03? < ?01:02:03? | False | |||
Größer als oder gleich | Zeit >= Zeit | Boolean | ?01:02:03? >=?01:02:03? | True |
?01:02:03? >=?01:02:04? | False | |||
Kleiner als oder gleich | Zeit <= Zeit | Boolean | ?01:02:03? <=?01:02:03? | True |
?01:02:04? <=?01:02:03? | False |
Zeiger
Bei Zeigern sind nur die Operatoren gleich und ungleich möglich: Wenn gilt
` vPtrA und vPtrB zeigen auf das gleiche Objekt vPtrA:=->EinObjekt vPtrB:=->EinObjekt ` vPtrC zeigt auf ein anderes Objekt vPtrC:=->ein anderes Objekt
ergibt sich folgendes:
Operation | Syntax | Ergibt | Ausdruck | Wert |
Gleichheit | Zeiger = Zeiger | Boolean | vPtrA = vPtrB | True |
vPtrA = vPtrC | False | |||
Ungleichheit | Zeiger # Zeiger | Boolean | vPtrA # vPtrC | True |
vPtrA # vPtrB | False |
Vergleiche vom Typ alphanumerisch
Beachten Sie folgende Regeln:
Strings werden Zeichen für Zeichen miteinander verglichen.
Die Groß- und Kleinschreibung wird nicht berücksichtigt. So gibt "a"="A" TRUE zurück. Wollen Sie die Schreibweise von zwei Zeichen überprüfen, vergleichen Sie deren ASCII Codes. So ergibt z.B. folgender Ausdruck FALSE:
Ascii ("A") = Ascii ("a") ` da 65 ungleich 97 ist
Diakritische Zeichen werden nicht berücksichtigt. 4D verwendet beim Vergleich die Zeichen des Systems auf Ihrem Rechner. So ergibt z.B. folgender Ausdruck TRUE:
"Muller" = "Müller" "u" = "Ü" "A"= "ä", "à", "â" ` usw.
Das Jokerzeichen (@) wird berücksichtigt. @ kann für beliebig viele Zeichen stehen. So ergibt z.B. folgender Ausdruck TRUE:
"abcdefghij" = "abc@"
Sie können das Jokerzeichen nur für den zweiten Operanden (der String auf der rechten Seite) einsetzen. Demnach ergibt folgender Ausdruck FALSE, da @ im ersten Operanden lediglich als 1 Zeichen gewertet wird:
"abc@" = "abcdefghij"
Das Jokerzeichen kann ein Zeichen, viele Zeichen oder gar kein Zeichen ersetzen. Demnach ergeben folgende Ausdrücke TRUE:
"abcdefghij" = "abcdefghij@" "abcdefghij" = "@abcdefghij" "abcdefghij" = "abcd@efghij" "abcdefghij" = "@abcdefghij@" "abcdefghij" = "@abcde@fghij@"
Zwei aufeinanderfolgende Jokerzeichen werden dagegen nicht erkannt. Hier gibt der Ausdruck FALSE zurück:
"abcdefghij" = "abc@@fg"
Tipp: Erhalten Sie aus einer Dateneingabe einen String, kann ein Jokerzeichen darin enthalten seinSie können das Jokerzeichen nicht wie die anderen Zeichen behandeln. Sehen wir uns dazu folgendes Beispiel an:
$vsValue:=Request("Geben Sie den gesuchten Wert ein:") If (OK=1) QUERY ([Customers];[Customers]Name=$vsValue+"@") End if
Es wird ein Wert mit der Funktion Request abgefragt. Dieser Wert wird dann für eine Suche "beginnt mit" verwendet. Treffen hier nun zwei @ aufeinander, gibt der Vergleich den Wert FALSE zurück. Sie können das Jokerzeichen also nur anhängen, wenn das vorige Zeichen kein Jokerzeichen ist.
Überarbeiten Sie das obige Beispiel folgendermaßen:
$vsValue:=Request("Geben Sie den gesuchten Wert ein:") If (OK=1) If (Ascii($vsValue[[Length($vsValue)]])#64) $vsValue:=$vsValue+"@" End if QUERY ([Customers];[Customers]Name=$vsValue) End if
Sie müssen immer den Ascii-Wert verwenden, da der folgende Ausdruck TRUE zurückgibt, außer $vsValue ist leer:
$vsValue[[Length($vsValue)]]="@"
Nehmen wir nun an, der im Suchdialog eingegebene String enthält mehrere @, z.B. "@@D@OE@@@". Folgender Code entfernt alle Jokerzeichen in einem String:
` Projektmethode Keine Jokerzeichen ` Keine Jokerzeichen ( String ) -> String ` Keine Jokerzeichen ( Jeder String ) -> String ohne @ $0:="" For ($vlChar;1;Length($1)) If (Ascii($1[[$vlChar]])#64) $0:=$0+$1[[$vlChar]] End if End for
Diese kleine Projektmethode führt dasselbe aus wie die Funktion Replace string. Sie ist jedoch notwendig (und sie verwendet ASCII Codes), da folgender Ausdruck mit Replace string immer einen leeren String zurückgibt:
Replace String($vsValue;"@";"") ` Alle Zeichen werden entfernt
Das Beispiel sieht nun so aus:
$vsValue:=Request("Geben Sie den gesuchten Wert ein:") If (OK=1) QUERY ([Customers];[Customers]Name=Not at signs ($vsValue)+"@") End if
Mit diesem Code haben Sie immer einen Suchlauf mit "beginnt mit", egal welcher String im Suchdialog eingegeben wird.
Hinweis
Wollen Sie Vergleiche oder Suchläufe mit @ als Zeichen, also nicht als Joker durchführen, gibt es zwei Möglichkeiten:
Sie verwenden die Anweisung Ascii (At sign).
Angenommen, Sie wollen wissen, ob ein String mit dem Zeichen @ endet.
- der folgende Ausdruck ist immer WAHR, außer $vsValue ist leer:
($vsValue[[Length($vsValue)]]="@")
- der folgende Ausdruck wird korrekt interpretiert:
(Ascii ($vsValue[[Length($vsValue)]])#64)
Sie aktivieren im Dialogfenster Datenbankeigenschaften die Option "@ ist normales Zeichen in Suchen und Sortieren". Dann gilt @ als normales Zeichen, wenn es innerhalb eines Zeichenstrings gefunden wird. Mit dieser Option können Sie beeinflussen, wie Vergleichsoperatoren in Such- und Sortierläufen verwendet werden. Weitere Informationen dazu finden Sie im Handbuch 4th Dimension Designmodus.
Referenz
Bildoperatoren, Bit Operatoren, Boolean Operatoren, Datumsoperatoren, Numerische Operatoren, Operatoren, Zeitoperatoren.