Deutsch English
Blog
Home
Über tdbengine
Newsletter
Download
Helpware
Chat
Dokumentation
Installation
Konfiguration
Erste Schritte
Variablentypen
Laufzeitschalter
Textdateien
Systemfunktionen
Tabellenfunktionen
Indexfunktionen
Volltext-Indizierung
Memos und Blobs
Semaphoren-Konzept
Fehlermeldungen
Tipps für PHP Programmierer
Locking daemon
Einführungskurs
Befehlsreferenz
HOWTO - Wie kann ich...?
Projekte
Links
Benchmarks
Bug Reporting
Supportanfrage
 
Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
Variablentypen
Mit Variablen können während der Laufzeit eines Programmes bzw. dessen Prozeduren Werte gespeichert werden. Dies können Ergebnisse aus Berechnungen sein, Rückgaben von Funktionen oder auch Konstanten, welche bereits zur Entwicklungszeit bekannt sind.
Grundsätzlich gilt das Lokalitätsprinzip, wobei die tdbengine nur zwei Stufen kennt: globale und lokale Variablen.
Also "global" lassen sich alle Variablen bezeichnen, welche ausserhalb einer Prozedur deklariert werden. Als lokal gilt eine Variable, die innerhalb einer Prozedur deklariert wird.
Bei gleichlautenden Variablennamen wird immer die Lokalste angesprochen.

Die Deklaration einer (oder mehrerer) Variablen wird durch das Schlüsselwort VAR eingeleitet.

VAR Variablenname1 [, Variablenname2, ... VariablennameN] : Datentyp [= Initialisierungswert]

Die Angaben in []-Klammern sind optional. Sie sehen also, dass man mehrere Variablen des gleichen Typs zugleich deklarieren und auch mit einem identischen Wert initialisieren kann.


Einfache Datentypen
REAL

In REAL-Variablen können Fließkommazahlen mit einer Genauigkeit von 15-16 signifikanten Stellen gespeichert werden. Im Speicher belegt eine REAL-Variable daher 8 Byte. Der Gültigkeitsbereich geht von -5.0 x 10^324 bis +1.7 x 10^308.

Beispiel-Deklarationen:

VAR nBetrag : REAL = 1234.56
VAR nUhrzeit: REAL = Now



INTEGER

Eine INTEGER-Variable nimmt 32-Bit-grosse Ganzzahlen im Bereich von -2147483648 bis +2147483647 auf. Dieser Datentyp ist optimal geeignet für die Verwendung in den meisten (standard)-Funktionen, die sog. "Handle" entweder als Parameter erwarten oder aber als Ergebnis zurückliefern.

Beispiel-Deklarationen:

VAR iAnzahl : INTEGER = 9999
VAR iTable  : INTEGER = OpenDB("tabelle.dat")


BYTE

Eine Variable des Typs BYTE kann Werte von 0 bis +255 annehmen. Dieser Datentyp ist relativ neu und wurde hauptsächlich zur Verwendung mit (binären) Stream-Operationen eingeführt.


Beispiel-Deklarationen:

VAR byAnzahl : BYTE = 128
VAR byB      : BYTE = Asc("B")


STRING

Eine STRING-Variable kann Zeichenketten mit bis zu 255 Zeichen speichern. Eine STRING-Variable belegt immer nur den Platz im Speicher, den sie tatsächlich für den zu speichernden Inhalt benötigt zzgl. einem Längenbyte. Die tatsächliche Länge des Inhaltes wird im allerersten Byte abgelegt, was auch die Begrenzung auf maximal 255 Zeichen erklärt.

Beispiel-Deklarationen:

VAR cTabelle : STRING = "../database/tabelle.dat"
VAR cName    : STRING = GetQueryString("name")


CHAR

Eine CHAR-Variable kann genau ein Zeichen / Byte aufnehmen. Dieser Datentyp ist (genau so wie BYTE) relativ neu und wurde hauptsächlich zur Verwendung mit (binären) Stream-Operationen eingeführt.

Beispiel-Deklarationen:

VAR chSemikolon : CHAR = ';'
VAR chABC       : CHAR = Chr(65)



Arrays und Array-Typen
Aus den, oben aufgeführten, einfachen Datentypen können ein- und mehrdimensionale Arrays gebildet werden. Ausserdem gibt es zusätzliche Datentypen, die ausschliesslich zur Verwendung als Array gedacht sind.

Für Arrays gilt grundsätzlich: Vor der ersten Wertzuweisung bzw. dem ersten lesenden Zugriff auf ein Array, muss dieses initialisiert werden.
Diese Initialisieriung kann zum einen bei der Deklaration geschehen (und steht somit bereits beim Kompilieren fest)  oder zum anderen erst zur Laufzeit, was es erlaubt, Arrays dynamisch zu dimensionieren.
Die dynamische Initialisierung erfolgt letztlich immer mit Hilfe der Funktion InitArray().

Beachten Sie, wenn Sie Arrays als Abbild einer Tabelle verwenden (als temporäre Markierungslisten zum Beispiel), dass physikalische Satznummern immer bei 1 anfangen, Arrays jedoch bei 0. Lassen Sie dann am besten einfach das erste Element im Array leer. Das erlaubt eine Referenzierung anhand der Satznummer , als Beispiel:

VAR aAutoID : INTEGER[9999]
GetAuto(db,aAutoID)
x := aAutoID[RecNo(db)] // x mit Laufender Nr. des akt. Datensatzes befüllen,


TBITS[]

Ein Array des Typs TBITS entspricht einer Aneinanderreihung von einzelnen Bits, welche einen der beiden Zustände 0 oder 1 annehmnen können. Damit lässt sich sehr leicht die interne Markierungsliste einer Tabelle abbilden, in eine Datei speichern und wieder laden. Auch das Kombinieren von Suchergebnissen anhand binärer UND und ODER Operationen (siehe BitAnd(), BitNot(), BitOr() und BitAndNot()) ist damit leicht und vor allen Dingen schnell möglich.
Die Initialisierung eines TBITS-Arrays erfolgt durch Angabe der Anzahl zu verwendender Bits.

Beispiel-Deklarationen:

VAR aMarks : TBITS[100]

VAR aRecs   : TBITS[]
InitArray( aRecs[FileSize(db)] )



MARKS[]


Der Typ MARKS hat mittlerweile nahezu völlig an Bedeutung verloren. Ursprünglich wurden in MARKS-Arrays die phys. Datensatznummern von Datensätzen gespeichert, wenn z.B. mit den Funktionen GetMarks() und PutMarks() gearbeitet wurde. Da dies heute mit TBITS-Arrays wesentlich eleganter und auch viel Platz sparender gelöst wird ist von der Benutzung von MARKS[] abzusehen. Allzumal MARKS[] letztlich identisch zu INTEGER[] ist.

Beispiel-Deklarationen:

VAR aMarks : MARKS[999]

VAR aMarkierungen : MARKS[]
InitArray( aMarkierungen[FileSize(db)] )



INTEGER[]

Ein INTEGER[]-Array speichert beliebig viele Integer-Werte in einer oder mehreren Dimensionen. Der Speicherbedarf lässt sich daher leicht ermitteln, nämlich mittels der Formal "Anzahl Dimensionen * Maximaler Index * 4 Byte".

Beispiel-Deklarationen:

VAR aAutoIDs : INTEGER[100]

VAR aKoordinaten : INTEGER[,]
InitArray( aKoordinaten[FileSize(db) ,2]  )
aKoordinaten[1,1] := 10; aKoordinaten[1,2] := 40
...



REAL[]

Ein Array vom Typ REAL[] speichert, genauso wie es ein INTEGER[]-Array mit Ganzzahlen macht, beliebig viele REAL-Werte,also Flieskommazahlen, ab. Der benötigte Speicher ergibt sich aus "Anzahl Dimensionen * Maximaler Index * 8 Byte".

Beispiel-Deklaration:

VAR aBeitraege : REAL[20]

VAR aBruttoNetto : REAL[,]
InitArray( aBruttoNetto[FileSize(db) ,2]  )
aBruttoNetto[1,1] := 1.50; aBruttoNetto[1,2] := 1.50 * 1.16
...



CHAR[] und BYTE[]

EIn CHAR[]- bzw. BYTE[]-Array belegt für jeden Wert genau 1 Byte Speicherplatz. Eindimensionale Byte-Arrays werden im Zusammenhang mit den Socket- sowie den Stream-Funktionen sehr interessant. Sie dienen dort als Zwischenpuffer für die ein- bzw. ausgehenden Datenströme.
Ein CHAR[]-Array kann ähnlich wie ein String mit ganzen Zeichenketten befüllt werden. Dazu muss der Index, ab dem der String eingefügt werden soll, angegeben werden.
Sowohl BYTE[] als auch CHAR[]-Arrays werden mit Chr(0) initialisiert.

Beispiel-Deklaration:

VAR aKiloString : CHAR[1024]

VAR aIncoming  : BYTE[]
InitArray( aIncoming[12345] )
...
aKiloString[0] := "Dies ist ein STRING, der direkt IN einem CHAR[] abgelegt wird"








tdbengine Anwendungen im Web:

Open-Source Web CMS


Open-Source Bug-Tracking


Free wiki hosting

Open-Source Wiki-System

Kostenloses Foren-Hosting

Diät mit tdbengine 8-)

tdbengine chat
irc.tdbengine.org
#tdbengine

   Copyright © 2003-2004 tdb Software Service GmbH
   Alle rechte vorbehalten. / All rights reserved
   Letzte Änderung: 13.05.2004
{Fehler für :execmacro{execmacro="sessionspy"}


ranking-charts.de

Programmers Heaven - Where programmers go!