4D v14.3

Variablen

Home

 
4D v14.3
Variablen

Variablen  


 

 

Eine Variable ist eine Speicheradresse. Sie sprechen sie mit ihrem Namen an und weisen ihr einen Wert zu.
Die einem Datenfeld zugewiesenen Werte werden auf der Festplatte gespeichert, die Werte einer Variablen werden dagegen nur für die Laufzeit im Speicher gehalten. Diese sind nicht Teil eines Datensatzes oder einer bestimmten Tabelle.

Beispiel: Sie haben zwei Datenfelder: Nettobetrag ohne MwSt. und MwSt.-Betrag. Sie benötigen nun kein drittes Datenfeld mehr, um den Bruttobetrag mit Mehrwertsteuer zu speichern. Es genügt eine Variable, in der der Brutto-Betrag immer neu berechnet wird.

Ein Variable kann von folgendem Datenfeldtyp sein:

  • String (*) oder Text: Alphanumerischer String bis max. 2 GB Text
  • Ganzzahl von -32 768 bis 32 767
  • Lange Ganzzahl von -2 147 483 647 bis 2 147 483 648
  • Zahl mit Fließkomma bis auf 15 Stellen genau
  • Datum von 1.1.100 bis 31.12.32767
  • Zeit von 00:00:00 bis 596000:00:00 (Sekunden ab Mitternacht)
  • Boolean: Wahr oder Falsch
  • Bild: Windows- oder Macintosh-Bild
  • BLOB (Binary Large OBject): Reihe von Bytes bis zu 2 GB Größe
  • Zeiger auf eine Tabelle, Datenfeld, Variable, Array oder Array-Element

(*) Im Unicode Modus sind Variablen vom Typ String oder Text identisch. Im ASCII-Kompatibilitätsmodus ist ein String eine feste alphanumerische Zeichenkette bis zu 255 Zeichen.

Sie können Variablen (außer Zeiger oder BLOB) auf dem Bildschirm darstellen, Daten darin eingeben und sie in Berichten drucken. Variablen mit eingebbarem oder nicht-eingebbarem Bereich verhalten sich wie Datenfelder. So sind auch dieselben Eingabekontrollen verfügbar:

  • Anzeigeformate
  • Datenbestätigung, wie Eingabefilter und Standardwerte
  • Zeichenfilter
  • Auswahllisten (hierarchische Listen)
  • Eingebbare bzw. nicht eingebbare Werte

Variablen können auch folgende Aktionen ausführen:

  • Schaltflächen steuern (Schaltflächen, Kontrollfelder, Optionsfelder, 3D Schaltflächen, usw.)
  • Schieberegler steuern (Thermometer, Lineale und Halbkreisskalen)
  • Listenfelder, PopUp-Menüs und DropDown-Bereiche steuern
  • Hierarchische Listen und hierarchische PopUp-Menüs steuern
  • Schaltflächenraster, Registerkarten, Bildschaltflächen, usw. steuern
  • Ergebnisse aus Berechnungen anzeigen, die nicht gesichert werden müssen.

Sie können eine Variable einfach durch Benutzen erzeugen. Sie müssen sie nicht formal wie bei Datenfeldern anlegen. Beispiel: Für eine Variable, die das aktuelle Datum plus 30 Tage angibt, schreiben Sie:

 vDate:=Current date+30

4D erstellt vDate und gibt das entsprechende Datum an. Der Code liest “vDate gibt das aktuelle Datum plus 30 Tage an”. Sie können diese Variable in Ihrer Datenbank beliebig verwenden, also z.B. in einem Datenfeld vom gleichen Typ speichern:

 [MyTable]MyField:=vDate

In einigen Fällen benötigen Sie Variablen, die als ganz bestimmter Typ definiert sind. Weitere Informationen zu Variablen in einer Datenbank finden Sie im Kapitel Compiler.

Sie können Daten in Variablen einsetzen oder herauskopieren. Im ersten Fall weisen Sie Daten einer Variablen zu. Dafür verwenden Sie den Zuordnungsoperator (:=). Mit diesem Operator weisen Sie auch Daten einem Datenfeld zu.

Schreiben Sie den Namen der zu erstellenden Variablen auf die linke Seite des Zuordnungsoperators. Die Anweisung

 vNumber:=3

erstellt die Variable vNumber und setzt die Zahl 3 ein. Existiert die Variable vNumber bereits, wird nur die Zahl 3 eingetragen.

Natürlich sollten Sie aus Variablen auch Daten entnehmen können. Wieder verwenden Sie den Zuordnungsoperator. Wollen Sie den Wert von vNumber in das Datenfeld [Products]Size, einsetzen, schreiben Sie die Variable vNumber auf die rechte Seite des Zuordnungsoperators:

[Products]Size:=vNumber

In diesem Fall ist [Products]Size gleich 3. Das Beispiel ist recht einfach, zeigt jedoch, wie diese Information über die Programmiersprache von einem Platz zu einem anderen übertragen wird.

Wichtig: Verwechseln Sie nicht den Zuordnungsoperator (:=) mit dem Vergleichsoperator (=). Zuordnen und Vergleichen sind ganz unterschiedliche Vorgänge. Weitere Informationen dazu finden Sie im Abschnitt Operatoren.

Der Geltungsbereich einer Variablen bestimmt die Ebene(n), in denen ihr Wert sinnvoll ist. 4D kennt drei unterschiedliche Variablen:

  • Lokale Variablen
  • Prozessvariablen
  • Interprozessvariablen

Eine lokale Variable gilt nur für die Methode, in der sie benutzt wird.

Sie verwenden eine lokale Variable, um:

  • Konflikte mit den Namen anderer Variablen zu vermeiden
  • Daten vorübergehend zu nutzen
  • Die Anzahl der Prozessvariablen zu verringern

Der Name der lokalen Variablen beginnt immer mit einem $-Zeichen und kann bis zu 30 Zeichen lang sein. Längere Namen werden entsprechend gekürzt.

In einer Datenbank mit vielen Methoden und Variablen benötigen Sie eine Variable oft nur in der gerade benutzten Methode. Sie können eine lokale Variable in der Methode erstellen und einsetzen, ohne prüfen zu müssen, ob Sie denselben Variablennamen schon anderweitig verwendet haben.

Ein Benutzer benötigt in einer Datenbank oft nur eine ganz bestimmte Information. Das ist z.B. über den Befehl Request möglich. Dieser zeigt eine Meldung an, die der Benutzer beantworten muss. Der Befehl gibt dann die vom Benutzer eingegebene Information zurück. Diese Information muss normalerweise nicht sehr lange in der Methode verbleiben. Das ist eine typische Anwendung für eine lokale Variable. Hier ein Beispiel:

 $vsID:=Request("Geben Sie Ihre Kennung ein:")
 If(OK=1)
    QUERY([People];[People]ID =$vsID)
 End if

Diese Methode fordert den Benutzer auf, eine Nummer einzugeben, setzt die Antwort in eine lokale Variable, $vsID und sucht dann nach der eingegebenen Nummer. Die lokale Variable $vsID wird aus dem Speicher entfernt, sobald die Methode endet. Das ist korrekt, denn die Variable wird nur einmal und nur in dieser Methode verwendet.

Eine Prozessvariable ist nur dem Prozess bekannt, in dem sie geschrieben wurde. Sie ist für die Prozessmethode und alle Methoden verfügbar, die von diesem Prozess aus aufgerufen werden.

Eine Prozessvariable hat kein Zeichen vor dem Namen und kann bis zu 30 Zeichen lang sein.

Im interpretierten Modus werden Variablen dynamisch verwaltet, d.h. sie werden im Speicher “on the fly” erstellt und wieder entfernt. Im kompilierten Modus teilen sich alle erstellten Prozesse (Benutzerprozesse) dieselbe Definition der Prozessvariablen, wobei jeder Prozess für jede Variable eine andere Instanz hat. So ist die Variable myVar eine Variable im Prozeß P_1 und eine andere im Prozess P_2.

Ein Prozess kann mit den Befehlen GET PROCESS VARIABLE und SET PROCESS VARIABLE Prozessvariablen aus einem anderen Prozess “peek and poke”. Verwenden Sie diese Befehle beim Programmieren nur für die von 4D dafür vorgesehenen Situationen:

  • Interprozesskommunikation an spezifischen Stellen Ihres Codes.
  • Drag und Drop auf Interprozessebene anwenden
  • Im Client/Server-Betrieb Kommunikation zwischen Prozessen auf Client-Rechnern und Serverprozeduren auf Server-Rechnern.

Weitere Informationen finden Sie im Kapitel Prozesse und in der Beschreibung dieser Befehle.

Interprozessvariablen sind allen Prozessen der Datenbank mit ihrem Wert bekannt. Sie dienen hauptsächlich zum Informationsaustausch zwischen den einzelnen Prozessen.

Ihr Name beginnt mit den Symbol <>, ein “kleiner als” Zeichen gefolgt von einem “größer als” Zeichen. Er kann bis zu 30 Zeichen lang sein.

Hinweis: Diese Syntax gilt für Windows und Macintosh. Auf Macintosh kann auch das Zeichen ◊ benutzt werden, dieses erhalten Sie mit der Tastenkombination Umschalt-/Wahltaste + v.

Im Client/Server-Betrieb greifen alle Rechner (Client und Server) auf dieselbe Definition der Interprozessvariablen zu, aber jeder Rechner hat für jede Variable eine andere Instanz.

Im Formulareditor werden beim Benennen von aktiven Objekten — Schaltfläche, Optionsfeld, Kontrollkästchen, rollbarer Bereich usw. — automatisch Variablen mit demselben Namen angelegt. Erstellen Sie z.B. eine Schaltfläche mit dem Namen MyButton, wird eine Variable mit Namen MyButton angelegt. Verwechseln Sie bitte nicht den Namen der Schaltfläche mit deren Inhalt.

Mit Variablen für Formularobjekte steuern und verwalten Sie die Objekte. Wurde z.B. die Schaltfläche angeklickt, wird die dazugehörige Variable auf 1 gesetzt; ansonsten hat sie den Wert 0. Über eine einem Thermometer zugeordnete Variable können Sie die aktuellen Einstellungen ablesen und ändern. Ziehen Sie z.B. ein Thermometer auf eine neue Einstellung, ändert sich der Wert der Variablen, um die neue Einstellung anzuzeigen. Genauso wird, wenn eine Methode den Wert der Variablen ändert, das Thermometer neu gezeichnet, um den neuen Wert anzuzeigen.

Weitere Informationen zu Variablen und Formularen finden Sie im Handbuch 4D Designmodus und im Kapitel Formularereignisse.

Sie können es 4D überlassen, Variablen zu Ihren Formularobjekten (Schaltflächen, eingebbare Variablen, Optionsfelder, etc.) dynamisch und gemäß Ihren Bedürfnissen zu erstellen. Dafür lassen Sie in der Eigenschaftenliste das Feld "Variablenname" für das Objekt leer:


Ist beim Laden des Formulars eine Variable nicht benannt, erstellt 4D eine neue Variable für das Objekt, mit einem berechneten Namen, der im Bereich der Prozessvariablen des Interpreters einmalig ist (d.h. diese Funktionsweise ist sogar im kompilierten Modus verwendbar). Diese temporäre Variable wird beim Schließen des Formulars zerstört.
Damit dieses Prinzip im kompilierten Modus funktioniert, müssen dynamische Variablen explizit typisiert werden. Dafür gibt es zwei Möglichkeiten:
  • Sie können den Typ über das Menü "Variablentyp" der Eigenschaftenliste setzen
    Hinweis: Das Menü "Variablentyp" typisiert eine benannte Variable nicht, sondern ermöglicht nur, die Optionen der Eigenschaftenliste zu aktualisieren (Bildvariablen ausgenommen). Zur Typisierung einer benannten Variablen müssen Sie die Befehle im Kapitel Compiler verwenden.
  • Sie können beim Laden des Formulars einen spezifischen Initialisierungscode verwenden, z.B. den Befehl VARIABLE TO VARIABLE:
     If(Form event=On Load)
        C_TEXT($init)
        $Ptr_object:=OBJECT Get pointer(Object named;"comments")
        $init:=""
        VARIABLE TO VARIABLE(Current process;$Ptr_object->;$init)
     End if
Hinweis: Definieren Sie eine dynamische Variable, d.h. eine Variable ohne Namen und wählen im Menü "Variablentyp" den Wert Nichts aus, gibt der Compiler einen Typisierungsfehler zurück.

Im 4D Code ist der Zugriff auf dynamische Variablen durch einen Zeiger möglich, der über den Befehl OBJECT Get pointer aufgerufen wird. Zum Beispiel:

  // Der Variablen für das Objekt "tstart" die Zeit 12:00:00 zuweisen
 $p :=OBJECT Get pointer(Object named;"tstart")
 $p->:=?12:00:00?

Diese Funktionsweise hat zwei Vorteile:

  • Sie erlaubt einerseits, Komponenten vom Typ "Unterformular" zu entwickeln, die sich im selben Host-Formular mehrmals verwenden lassen. Nehmen wir z.B. ein Unterformular datepicker , das zweimal in das Host-Formular eingefügt wird, um ein Anfangs- und Enddatum zu setzen. Dieses Unterformular verwendet Objekte, um das Datum des Monats und des Jahres zu wählen. Dafür müssen für das Anfangs- bzw. das Enddatum verschiedene Variablen verwendet werden. Eine Möglichkeit zur Lösung dieses Problems ist, 4D ihre Variable mit einem einmaligen Namen erstellen zu lassen.
  • Sie erlaubt andererseits, die Speichernutzung zu begrenzen. Formularobjekte arbeiten nur mit Prozess- oder Interprozessvariablen. Im kompilierten Modus wird jedoch in allen Prozessen, einschließlich Serverprozessen, für jede Prozessvariable eine Instanz erstellt. Diese Instanz beansprucht Speicherplatz, selbst wenn das Formular während der Sitzung nicht verwendet wird. Deshalb kann Speicherplatz eingespart werden, wenn 4D die Variablen beim Laden der Formulare dynamisch erstellt.

Hinweis: Gibt es keinen Variablennamen, wird der Objektname in im Formulareditor in Anführungszeichen angezeigt (wenn das Objekt standardmäßig einen Variablennamen anzeigt).

Einige Variablen legt 4D selbst an. Sie dürfen nicht neu definiert oder neu typisiert werden. Sie sind beim ersten Öffnen der Datenbank noch nicht angelegt. Sie werden erst beim ersten Aufruf der Aktion, die die Variable erzeugt, von 4D definiert.

Die wichtigste Systemvariable ist OK. Diese Variable aktualisiert 4D laufend. Mit ihr fragen Sie ab, ob eine Eingabe bestätigt oder abgebrochen wurde, also ob der Datensatz gesichert wurde oder ob der Importvorgang abgeschlossen wurde. Wurde ein Vorgang erfolgreich abgeschlossen, hat die Systemvariable OK den Wert 1, ansonsten den Wert 0.

Weitere Informationen über Systemvariablen finden Sie im Abschnitt Systemvariablen.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Grundbegriffe

 
SIEHE AUCH 

Ablaufsteuerung
Datentypen
Einführung in Arrays
Konstanten
Konventionen
Methoden
Operatoren
Zeiger

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v12.4)
4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)

Geerbt von : Variablen ( 4D v11 SQL Release 6)
Gesplittet : Variablen ( 4D v14 R3)