1. KAPITEL: EINFÜHRUNG

Willkommen bei Rekall! Rekall ist eine grafische Schnittstelle[1] für eine große Auswahl an Datenbank-Servern.

Dieses Handbuch bezieht sich auf Rekall der Version 2.2.1, jedoch wird Rekall fortlaufend weiterentwickelt. Wenn Sie also ein Ausstattungsmerkmal eingebaut sehen möchten, lassen Sie uns dies bitte wissen!

Die aktuelle Version enthält:

-	Zugriff auf MySQL- und PostgreSQL-Datenbanken. Es kann auch auf XBase-Dateien mit
	einem beschränkten SQL-Befehlssatz zugreifen. Weitere Datenbank-Server werden in
	Zukunft hinzugefügt. Eine einzelne Rekall "Datenbank" kann auf eine oder mehrere
	Datenbanken zugreifen.

-	Zugriff auf die zugrundeliegenden Datenbank-Typen. Ab Version 1.0.5 bietet Rekall
	Zugang zu beinahe allen Typen die der SQL-Datenbank-Server anbietet(in dieser 
	Hinsicht ist XBase eher eingeschränkt).

-	Tabellenentwurf, Entwurfsänderungen zusätzlich zur Fähigkeit die Tabellendaten an-
	zusehen und zu aktuallisieren. Allübliche Funktionen, wie Indizierung einzelner 
	Spalten können ereicht werden.(obwohl dieser Bereich noch erweitert werden muß, um
	z.B. Mehr-Spalten Indizierung anzubieten)

-	Formular- bzw Berichtsentwurf und Ausführung. Formulare und Berichte können mit 
	Hilfe von beliebiger SQL-Sprache Daten direkt aus Datenbanktabellen abrufen(abhängig von
	der Beschränkung, mit der Rekall sie analysieren kann), oder aus Abfragetabellen
	welche in Rekall definiert wurden; beide können beliebig eingebettete Unterformulare
	(oder Unterberichte) enthalten.

-	Skriptprogrammierung unter Verwendung der Phyton-Sprache. Eine Schnittstelle zu Rekall
	und zum SQL-Datenbankserver wird angeboten(damit Skripte Formular- und Berichtsaus-
	führung steuern und auf Daten in der Datenbank zugreifen können). Rekall enthält 
	auch einen interaktiven Python-Debugger. Natürlich haben Sie auch vollständigen Zugriff
	auf jedes Python-Modul das auf Ihrem System verfügbar ist.

-	Import und Export von Tabellendaten in einer großen Auswahl von Formaten. Dies verwirklicht
	Rekall in einem Kopiervorgang(bzw. Dialog), wobei Kopierquelle und Ziel Datenbanktabellen, SQL-Abfragen
	und Textdateien enthalten können.

Das nächste Kapitel bietet einen Überblick über Rekall und nimmt Sie mit auf einen Rundgang über die Besonderheiten zum Abruf von Tabellen, Formularen und Berichten. Die Beispiele wurden der Testdemonstrations-Datenbank entnommen, welche am gleichen Ort wie Rekall vorhanden ist 

Alle Bildschirmphotos in diesem Handbuch stammen aus einem unter KDE laufendem Rekall. Die reine QT3-Version ist identisch, bis auf die Stile der Steuerelemente. Die Zaurus-Version ist auch ähnlich, mit der Ausnahme, das die Dialoge allgemein kompakter sind und verschiedene andere Tricks angewendet werden um den benötigten Anteil an Bildschirmfläche zu verringern. Die Unterschiede zwischen einigen Bildschirmphotos, dem Fensterrand, den Schaltflächenstilen usw. und so fort, spiegeln lediglich die große Auswahl von Stilen und Themata wieder, die unter KDE zur Verfügung stehen.

Beachten Sie bitte: Dieses Handbuch beabsichtigt nicht ein Handbuch oder eine Anleitung für SQL-Datenbanken zu sein, setzt aber zumindest ein Basiswissen über solche Datenbanken voraus. Stellenweise gibt es Beschreibungen wie SQL-Datenbanken arbeiten, aber diese Beschreibung beabsichtigen eher Hintergrund als Information zu vermitteln. Es gibt zahlreiche verfügbare Bücher über Datenbanktechnologien und der SQL-Abfragesprache, viele Quellen stehen im Internet zur Verfügung.

Wir hoffen, das Sie in Rekall ein nützliches und mächtiges Werkzeug finden werden. Wir begrüßen jegliche Rückmeldung, sowohl lobende als auch kritische. Lobende Rückmeldungen sind offensichtlich schön, doch werden uns nur kritische Rückmeldungen  auf die Bahn lenken auf der uns Anwender sehen wollen, eher als auf Bahnen von denen wir glauben das Anwender sie gerne sähen.

[1] nach Art von Microsoft Acces
-----------------------------------------------------------------------------------------------------------------------------

2. KAPITEL: RUNDGANG UND ÜBERBLICK

Dieses Kapitel führt in Rekall ein und zeigt, wie Rekall auf Tabellen, Formulare und Berichte zugreift. Die Beispiele in diesem Kapitel sind der Demontrations-Bestell-Datenbank entnommen Dies ist eine einfache Datenbank, welche Informationen über Kunden, Produkte und Produktbestellungen dieser Kunden enthält.

Der Abschnitt in diesem Kapitel über Tabellen, Formulare usw. zeigt einen Überblick über deren Anwendung der Datenanzeige und der Datenmanipulation in der Server-Datenbank. Die entsprechenden Entwurfsfunktionen von Rekall sind im passenden Kapitel beschrieben und werden hier nicht mit abgedeckt.


AUF EINEN DATENBANK-SERVER ZUGREIFEN

Rekall enthält selbst keinen Datenbankserver. Eher kann es mit Hilfe von Treibern auf SQL Datenbanken - wie MySQL und PostgreSQL - zugreifen. Da Rekall aber tatsächlich als Allzweck-Oberfläche für diese konzipiert wurde, kann es nicht mit Datenbankerzeugung und Zugriffssteuerung umgehen(obwohl Plugins zur Unterstützung bestimmter SQL-Datenbanken verfügbar werden können).

Deswegen ist es notwendig eine Datenbank einzurichten, die von Rekall verwendet werden kann. Die Bestell-Datenbank kann auf MySQL-, PostgreSQL- und XBase laufen; es sind Anweisungen eingebunden, welche beschreiben wie die Datenbank eingerichtet wird. Wenn Sie die XBase-Version verwenden ist kein Zugriff auf gemeinsame Resourcen nötig, doch um MySQL bzw. PostgreSQL-Versionen laufen zu lassen, brauchen Sie Zugang zum entsprechenden Server auf den Sie zugreifen können.

Es sind noch ein paar Worte nötig, um Verwirrung über die Verwendung des Wortes 'Datenbank' zu vermeiden.
Wir werden es auf zwei Arten verwenden:

-	1. Es wird benutzt um sich auf RDBMS zu beziehen(Relationale Datenbank Management Systeme) wie z.B. MySQL;
	hier wird Ausdruck 'Server-Datenbank' verwendet um Zweideutigkeit zu verhindern.

-	2. Es wird angewendet um sich auf die Sache zu verweisen, welche der Rekall-Anwender als eine logisch-einzelne
	Datenbank ansehen wird; hier benutzt man den Ausdruck 'Rekall-Datenbank'.

Beachten Sie, das eine Rekall-Datenbank auf mehrere Server-Datenbanken zugreifen kann.


DIE DATEI DER REKALL-DATENBANK

Rekall benutzt eine einfache Datei um Information über eine Rekall-Datenbank zu speichern. Diese Datei enthält Information über den Aufenthaltsort einer Datenbank(z.B. den Ort, Benutzername und Passwort einer MySQL-Datenbank), aber sie speichert keine aktuellen Daten, noch enthält sie Information über Formular- oder Berichtsdefinitionen. Daten werden immer in der Server-Datenbank gespeichert, wohingegen Formulare, Berichte und dergleichen entweder in der Server-Datenbank oder in Dateien des gleichen Verzeichnisses wie das der Informations-Datei gespeichert werden. 
Diese Datei wird normalerweise die Erweiterung .rkl tragen, aus historischen Gründen wird auch die Erweiterung .kdb verwendet.

Inhaltlich haben die Dateien das gleiche Format und sind austauschbar. Bis Rekall der Version 1.0.4 sind die Daten in einem durch Striche getrennten Format gespeichert; von 1.1.5 an werden sie in XML gespeichert. In beiden Fällen können Sie hineinschauen(oder diese edititeren wenn Sie es sich zutrauen und Sie sich durch Datenbanken bewegen möchten). Nebenbei, alle Rekall-Objekte wie Formulare und Berichte sind als Textdateien - üblicherweise XML - gespeichert und können angesehen und editiert werden. Sie können z.B. ein Programm schreiben das Berichts-Definitionen zur Laufzeit ändert.

Wie oben bemerkt: Formulare und Berichte können entweder in einer Server-Datenbank, oder im gleichen Verzeichnis wie die Informations-Datei gespeichert werden. Im letzten Fall haben die Dateien solche Namen wie 'MeinFormular.xxx.frm' wobei xxx das gleiche wie die Erweiterung der Informations-Datei ist[2].

[2] Wenn es nötig ist, können Sie die Hauptinformations-Datei und jede Formular- oder Berichtsdatei umbenennen, um die Erweiterung dauerhaft zu ändern. 


SDI ODER MDI - DAS IST HIER DIR FRAGE

Anwender welcher aus der WINDOWS-Welt - genauer gesagt Acces - kommen, werden mit dem MDI-Modell vertraut sein. Dort öffnet eine Anwendung mehrfache Dokumentenfenster als Ableger eines Haupt-Anwendungsfensters. Jene der UNIX-Welt sind warscheinlich mit dem SDI-Model vertrauter, das als Anwendung getrennte Dokumente in mehrfachen Haupt-Fenstern öffnet[3].

Rekall kann sowohl in der MDI- als auch in der SDI-Betriebsart laufen, obwohl es bei beiden ein paar Beschränkungen gibt, was die Plazierung der Fenster anbelangt. Rekall kann mit den Argumenten --useMDI für der MDI-Modus, oder --useSDI für den SDI-Modus gestartet werden. Alternativ kann auch mit Hilfe des Menüs Ansicht/Optionen umgeschaltet werden.

[3] Tatsächlich gibt es, genauso wie die religiöse SDI contra MDI-Debatte, auch einen gewissen Grad an Meinungsverschiedenheiten über das was MDI oder SDI ausmacht, oder nicht ausmacht. Die Verwendung hier hat nicht zum Ziel in irgendeiner Weise maßgebend zu sein.


DER REKALL SERVER-DIALOG

Normalerweise wird beim starten von Rekall und Öffnen einer Datenbank der Server-Dialog angezeigt. Dieser listet die Server-Datenbanken auf die von der Rekall-Datenbank abgerufen werden und erlaubt Ihnen die Information einzugeben, welche für deren Zugriff notwendig ist, z.B. Benutzernamen und Passwörter. Abhängig von der laufenden Server-Datenbank kann sich die genaue Interpretation der Werte ein wenig unterscheiden. 

Im MDI-Modus erscheint das Dialogfenster innerhalb des MDI-Hauptanwendungsfensters, im SDI-Modus ist das Hauptfenster mit dem selben Dialog gefüllt. In diesem Handbuch sind alle Bildschirmphotos Rekall entnommen das im SDI-Modus läuft(einfach deswegen, weil es ein wenig einfacher ist sie auf diese Weise zu erzeugen).

Das Bildschirmphoto zeigt diesen Dialog für eine einfache Demontrations-Datenbank an. Die Liste zur Linken hat Einträge für die unterschiedlichen Rekall-Komponenten(Server, Formulare, Berichte usw.). Der Bereich rechts zeigt die Serververbindungen der Datenbank, in diesem Fall eine einfache XBase-Verbindung bei der fomulare usw. im Dateisystem gespeichert werden(mehr dazu später). Der Anwender hat soeben den !Files-Eintrag angewählt. Beachten Sie, das Einträge welche nicht für den einzelnen Server wichtig sind, grau erscheinen.

### BILD: Serverdialog ###

Genauso wie die Einstellungen der der aktuellen Server-Datenbank, gibt es zwei zusätzliche Optionen. Wenn Deaktiviert gesetzt ist, wird Rekall diesen Eintrag nicht antasten. Das kann z.B. dann nützlich sein, wenn die Fern-Datenbank momentan nicht erreichbar ist. Die Option Autostart kann gewählt werden um zu erreichen, das ein Formular(muß MainForm benannt werden)
automatisch geöffnet wird wenn Rekall die Datenbank öffnet. 

Einträge auf der linken Seite angeklickt, zeigen Information über die zugehöhrigen Rekall-Komponenten. Server geklickt zeigt dies hier, den Server-Dialog; der Zweite zeigt Tabellen in der Server-Datenbank, usw.


ERWEITERTE EINSTELLUNGEN

Der Erweitert Knopf zeigt ein 'Aufbläh-Dialog' welcher fortschrittlichere Einstellungen enthält. Dieser Pop-up wird einen Reiter zeigen(ganz links), der allgemeine Einstellungen enthält welche Rekall selbst betreffen und möglicherweise andere Reiter, deren Inhalt spezifische zur Server-Datenbank ist. Die allgemeinen Einstellungen sind weiter untern aufgelistet; werfen Sie einen Blick auf den Anhang der Datenbanktreiber für die Einzelheiten der spezifischen Server-Datenbank Einstellungen .


REKALL SPEZIFISCHE TABELLEN NICHT ERZEUGEN

Rekall macht Gebrauch von einigen privaten Tabellen um Information zu speichern. Wenn es standardmäßig eine Server-Datenbank öffnet und diese Tabellen nicht vorhanden sind, wird es zur Frage auffordertn, ob diese Dateien erzeugt werden sollen. Ist diese Option gesetzt, wird diese Überprüfung angehalten und ist nützlich wenn Sie beispielsweise nur Lesezugriff auf eine Datenbank haben oder diese lediglich ansehen möchten.


ALLE TABELLEN ZEIGEN

Außer diese Option ist gesetzt, Rekall wird keine Tabellen auflisten, die es zu eigenen Verwendung benötigt.


TABELLENINFORMATION ZWISCHENPEICHERN

Im normalen Verlauf der Ausführung kann Rekall ziemlich oft Tabelleninformation(Spaltennamen, Typen usw.) benötigen. Es wird diese Information standardmäßig von der Serverdatenbank empfangen wann immer dies notwendig ist. Das hat den Vorteil das solche Informationen immer aktuell sind, sodaß Rekall die Änderungen der Information notfalls sofort sieht, sobald ein anderer eine Tabelle geändert hat. 

Dies kann jedoch einige Zeit auf einer stark ausgelasteten oder ferngelegenen Server-Datenbank in Anspruch nehmen. Wenn der Datenbankentwurf festgelegt ist wird sich diese Tabelleninformation auch dann nicht ändern. Ist diese Option gesetzt, wird das Rekall mitteilen davon auszugehen, das sich Tabellendetails nicht ändern und die Information zwischengespeichert ist.

Beachten Sie: Wenn sie die einzige Person sind, welche Tabellendetails ändert(Hinzufügen oder Entfernen von Spalten, ändern des Spaltentyps und dergleichen), dann ist es sicher diese Option zu setzten, da Rekall mitverfolgt wenn es selbst solche Änderungen durchführt.


LEEREN BENUTZERNAMEN/PASSWORT AKZEPTIEREN

Wenn Sie den Benutzernamen oder das Passwortfeld leer lassen, wird Rekall danach fragen, sobald diese für die Verbindung zu einer Server-Datenbank erforderlich sind.  In manchen Fällen jedoch kann das nicht nötig sein. In diesem Fall zeigt Rekall keinen unnötigen(und irritierenden) Dialog mehr an wenn die Option gesetzt wird.


PRIMÄRSCHLÜSSEL NUR LESEN(READ ONLY)

Manche Server-Datenbanken erlauben dem Benutzter Primärschlüsselwerte zu aktuallisieren, andere jedoch nicht. Wenn möglich, spürt der Datenbanktreiber die Tabellenspalten einschließlich der nicht aktualisierbaren Primärschlüsselspalten auf. Manchmal ist es jedoch nützlich, die Aktuallisierung der Primärschlüssel selbst dann verhindern zu können, wenn die Server-Datenbanken deren Aktuallisierung erlaubt. Setzten dieser Option zwingt Rekall alle Primärspalten als schreibgeschützt zu behandeln, somit als nicht aktuallisierbar.


EINDEUTIGEN SCHLÜSSEL ZUM EINFÜGEN FINGIEREN(VORTÄUSCHEN)

Anhang A diskutiert Versuche bezüglich Primär- und Einheitsschlüsselspalten in Tabellen und deren Auswirkung auf Aktuallisierung und Einfügen von Tabellendaten. Zu Details dieser Option, schauen Sie bitte in diesem Anhang nach.


DATENBANK IST SCHREIBGESCHÜTZT

Setzten dieser Option sollte verhindern, das Rekall jegliche Datenbank-Operation durchführt, die Daten verändert. Beachten Sie, das dies noch nicht einwandfrei ist, beispielsweise die unterstützten Datenbankregeln und Auslösemechanismen, dann könnte ein 'SELECT' eine Aktuallisierung verursachen, über die Rekall mit Wonne hinwegsehen würde.


INITIALE SQL STARTSEQUENZEN

Es kann beliebiges SQL eingegeben werden das ausgeführt wird, sobald Rekall die Verbindung zu einer Datenbank herstellt. Sie können Mehrfachabfragen eingeben welche durch Semicola getrennt sind. Wenn alle Abfragen scheitern wird ein Fehlerbericht ausgegeben und die Verbindung getrennt.

Diese Besonderheit kann nützlich sein, um Verbindungen einer Datebanktabelle zu protokollieren.


DATENVERSCHLÜSSELUNG

Standardmäßig wird Rekall voraussetzten, das Textdaten auf der Server-Datenbank unter Verwendung der UTF8(Unicode)-Codierung gespeichert werden. Es wird Textdaten ausgehend von dieser Codierung empfangen als auch interpretieren und in ähnlicher Weise Daten speichern. Wenn Sie eine andere Codierung kennen oder Rekall eine andere verwenden soll, kann dies hier eingestellt werden. Die vorhandenen Codierungen sind die der QT-Bibliothek.

Bitte zu beachten: Spezifische Datenbanktreiber können die Codierung der Server-Datenbank ermitteln, wenn die Server-Datenbank selbst Codierung unterstützt. Diese Einstellung wird die der Server-Datenbank übergehen.


OBJEKTVERSCHLÜSSELUNG

Diese Einstellung steuert in ählicher Weise die benutzte Codierung beim Speichern von Objekten in der Datenbank, wie z.B. Formulare und Berichte.


SSH TUNNEL

Diese Einstellung(welche nur in Linux-Versionen von Rekall vorhanden ist) erlaubt die Verwendung des SSH-Tunnelverfahrens wenn die Server-Datenbank über TCP/IP verbunden wird. Zu Einzelheiten schauen Sie in Kapitel 14 nach.


TABELLEN BETRACHTEN

Wird der Rubrik 'Tabellen' ausgewählt, wird eine Ansicht der Tabellen in jeder Server-Datenbank gezeigt. Die Ansicht zeigt einen Eintrag für alle Server-Datenbanken und möglicherweise einen des !Files Eintrags. Vergrößert man den Verzeichnisbaum einer Server-Datenbank, werden alle Tabellen dieser Datenbank gelistet.

Wenn Sie das erste Mal den Verzeichnisbaum einer bestimmten Server-Datenbank betreten(vorausgesetzt, das Rekall diese Server-Datenbank nicht zuvor schon abgerufen hat), werden Sie mit der Frage konfrontiert eine Objekttabelle und ein Entwurfsregister zu erzeugen. Die erste wird verwendet um Formulare, Berichte und dgl. eher in der Datenbank als im Dateisystem zu speichern. Die Zweite dient zur Speicherung zusätzlicher Tabelleninformation(wie Standardfeldwerte). Sie müssen diese für die Funktion von Rekall nicht erzeugen, doch wenn Sie das nicht tun, werden keine Formulare u.ä. vorhanden sein. Dieser Überblick setzt voraus, das beides verfügbar ist.

Lässt man die Tabelle auflisten zeigt sich eine Zusammenfassung der Tabellenspalten. Damit kann man die Tabellenstruktur wohl nicht verändern, doch ist es nützlich - wenn nötig - sich die Tabellendetails zu veranschaulichen; Spaltennamen, Spaltengröße und ein paar Grundeigenschaften sind zu sehen. Das nächste Bilschirmphoto zeigt dies; die Verzweigung der Rubrik 'Orders' der MySQL-Server-Datenbank wurde betreten und darin die Tabelle 'Client'. Eine bemerkenswerte Sache ist der Primärschlüssel-Typ. Rekall hat Vorstellungen von einem bevorzugten Spalten-Typ um diesen als Primärschlüssel zu verwenden. Passt eine Spalte zu diesen Vorstellungen wird sie als solche gezeigt. Natürlich kann das nicht Ihr bevorzugter Typ sein und Sie können den Primärschlüssel erzeugen den Sie für passend halten.

### BILD: Verzeichnisbäume ###

Der Doppelklick auf eine Tabelle wird diese in der Datenansicht zeigen, in dieser könne alle Daten in der Tabelle eingesehen werden. Sie können auch dadurch zur Datenansicht gelangen, wenn sie mit dem Rechtsklick auf die Tabelle gehen und den passenden Eintrag selektieren. Im Bilschirmphoto darunter sieht man die Tabelledatenansicht der Tabelle 'Orders'.

### BILD: Tabelledatenansicht ###

Dies sollte meistens ziemlich deutlich sein. Tabellendaten werden in einem Gitter gezeigt, Spalten entsprechend jenen in der Tabellendefinition(sind mit Spaltennamen bezeichnet) und Reihe an Reihe die Tabellendaten. Die Werkzeugleiste hat Schalter zur Datensatznavigation(Erster Datensatz, vorhergehender, ...), zum Einfügen und Löschen und zur Datensuche. Sie können die Spaltenbreite modifizieren und die Reihenfolge abändern(dies ist nur die gezeigte Reihenfolge und verändert die Tabelle selbst nicht).

Werte können wie erwartet durch bearbeiten der Textfelder geändert werden(oder die Auswahl in einem Kombinationsfeld). Navigieren zwischen Textfeldern innerhalb einer Reihe könne mit der Tastatur vollzogen werden durch Verwenden der Enter und Tab tasten(und Shift-Tab um sich rückwärts zu bewegen.) Navigation zwischen Reihen kann ganz ähnlich mit den Auf und Ab Cursortasten bewerkstelligt werden(und Strg+Auf bzw.Strg+Ab geht zum ersten oder letzten Datensatz). Änderungen werden gesichert sobald Sie die Reihen wechseln(oder durch Strg+Enter)

Einige Dinge sind es Wert hervorgehoben zu werden. Alle Werte sind als einfache Textfelder zu sehen, aber sie können angeben(mit Hilfe des Entwurfsregisters) das eine Spalte mit einer anderen Tabelle logisch verknüpft ist und das Werte der anderen Tabelle in dieser Spalte angezeigt werden. In der Tabelle 'Orders' sind die Spalten 'ClientID' und 'ProductID' an die Tabellen 'Client' beziehungsweise 'Product' geknüpft und zeigen den Kundennamen oder Produktbeschreibung. Wenn Sie in eine solche Spalte klicken, wird das Textfeld durch ein Kombinationsfeld ersetzt, welches mögliche Werte anzeigt.

Standardmäßig wird der Text so angezeigt wie ihn die Server-Datenbank zurückgibt, es können jedoch spezifische Formate vorgegeben sein. Hier sind die Datenfelder formatiert mit dd-mmm-yy(zweistellig.Tag-dreistellig.monat-zweistellig.Jahr)[4]

Die Spalte ganz rechts zeigt die Reihennummern und auch eine Markierung der aktuellen Reihe. Wenn Sie in die Linksspalte klicken wird die gesammte Reihe ausgewählt, Sie können auch die Standard Strg-Klick und Shift-KLick Methoden anwenden um Reihen mehrfach anzuwählen, welche dann alle auf einmal gelöscht werden können.

Wenn Sie ein Tabelle mit vielen Spalten haben, können Sie die Spalten in alphabetischer Reihenfolge anzeigen lassen, durch auswählen von 'Order Columns' aus dem Menü 'Ansicht'(und zur Tabellespalten-Reihenfolge zurückschalten durch wiederholen der Aktion).

[4] Rekall kann Datum und Uhrzeit jedem Format anzeigen das von der strftime-Routine der C-Bibliothek unterstützt wird undkann diese auch in den meisten Formaten entschlüsseln.


FORMULARE

Obwohl Daten direkt durch benutzen der Tabellendaten-Ansicht eingegeben, angesehen und aktuallisiert werden können, ist es für den Benutzer viel leichter dies mit Hilfe eines passend entworfenen Formulars zu tun.

Formulare werden unter dem Formular-Reiter aufgelistet. Hier werden Sie einen Eintrag für jede Server-Datenbank sehen und einen zusätzlichen der mit '!Files' bezeichnet ist. Wenn Sie die Verzeichnisstruktur der Server-Datenbank betreten, werden Sie die Formulare sehen die in der Datenbank gespeichert sind(in der Objekttabelle von Rekall); wird der !Files-Zweig aufgeklappt, sieht man die Formulare die im Dateisystem gespeichert sind. Wie schon früher erwähnt, sind Formulare in XML definiert. Somit ist es ziemlich einfach, mit Ihrem Lieblingseditor in eine Formulardefinition hineinzuschauen welche auf dem Dateisystem gespeichert ist. Sie können auch in jene hineinschauen welche in der Datenbank gespeichert sind, doch muß man die Definition in eine Datei exportieren(Rechts-Klick auf das Formular und 'In Datei speichern' auswählen).

Was Formulare(und Berichte usw.) anbelangt sollten Sie an eines denken: Sie müssen in sich stimmig sein. Rekall hat das Vermögen ein Formular durch ein anderes zu öffnen(typischerweise wenn eine Schaltfläche betätigt wird), doch das Formular das momentan geöffnet werden soll muß sich am selben Ort befinden wie das Formular das es öffnet(allgemein, beide müssen im selben Verzeichnis des Dateisystems liegen, oder in dergleichen Server-Datenbank).

Das nächste Bildschirmphoto zeigt das Formular 'MainForm' der Datenbank 'Orders'. Dies ist ein Beispiel für ein Formular, die momentan keinerlei Daten einer Server-Datenbank zeigt. Stattdessen enthält es nur Schaltflächen welche anders Formulare oder Berichte oder Ähnliches öffnen. Das Fomular zeigt einige der visuellen Effekte die erreicht werden können z.B. farbiger Text in verschiedenen Schriftarten und Schriftgrößen und hell unterlegte Bereiche. Die große Auswahl an solchen Effekten die in Rekall vorhanden sind, ist z.Z. noch ziemlich begrenzt, doch sollte es Ihnen möglich sein, ordentlich ansprechende und brauchbare Formulare zu erzeugen.

### BILD: Rekall Orders Database ###

wird auf die 'Orders'-Schaltfläche des Formulars geklickt kommt das 'Orders'-Formular zum Voschein, welches im nächsten Bildschirmphoto zu sehen ist. Dies Formular zeigt Bestellungen nach Kunden gruppiert an. Es ist ein Beispiel für eine Formular-Unterformular-Struktur, wobei das äußere Formular einige Kundendaten zeigt und das eingebetete die Bestellungen diese Kunden. 

### BILD: Formular-Unterformular 'Orders' ###

Das Formular zeigt auch andere Merkmale die in Formularen verfügbar sein können, wie z.B. Rolleisten zur raschen Auffindung von Datensätzen und Schaltflächen die Funktionen wie z.B. Datensatznavigation ausführen. Beachten Sie, das die Schaltflächen in keiner Weise spezialisiert sind, sie rufen einfach Python-Code auf, welcher die geforderte Operation durchführt. Ferner, obwohl Sie es dem Bilsschirmphoto nicht ansehen, sind die Kunden-Felder des äußeren Formulars schreibgeschützt und können nicht durch den Benutzter aktuallisiert werden; dieses Formular wurde darauf ausgelegt den Text jener Textfelder in blau zu zeigen um dies dem Benutzter anzuzeigen.

Die Werkzeugleiste enthält so ziemlich die gleichen Elemente der Tabellendatenansicht. Tatsächlich ist die Tabellendatenanzeige momentan nur ein Formular, eines das Rekall nebenbei erzeugt um exakt die Daten in der Tabelle auszugeben.


REKALL ABFRAGEN

Im Sinne von Rekall ist der Ausdruck Abfrage(eng. query) verschwommen; es gibt wenigstens zwei Arten ihn zu verwenden: Die allgemeinste ist die einer SQL-Abfrage wie 'SELECT a, b FROM A,B WHERE A.i = B.a' . Rekall erzeugt sie intern sooft es Daten aus einer Tabelle wiedergewinnen, oder Daten in einer Tabelle aktuallisieren möchte. Es ist auch möglich rein textbasierte SQL-Abfragen einzugeben um Daten zurück zu erhalten. Die zweite Anwedung ist Rekall bezogen und das Thema diese Abschnitts. So angewendet, ist eine Abfrage ein Objekt das Information darüber enthält, wie es Daten aus der Server-Datenbank zurückerhalten wird. 'Abfrage' wird allgemein üblich in diesem Sinn benutzt, und SQL-Abfrage anderweitig.

Rekall bietet ein GUI-Entwurfswerkzeug an, das Ihnen erlaubt, Tabellen auszuwählen, Beziehungen zwischen Tabellen anzugeben und Spalten zu benennen (oder allgemeiner, Ausdrücke) welche aus den Tabellen gewonnen werden sollen. Aus dieser Information konstruiert Rekall eine SQL-Abfrage welche verwendet wird, laufend Daten zu erneuern. Wir werden hier über die Einzelheiten des Entwurfswerkzeugs hinweggehen und in einem nachfolgenden Kapitel darauf zurückkommen.

Eine Abfrage kann in der Datenansicht ausgegeben werden, in der die SQL-Abfrage ausgeführt und die Daten angezeigt werden, auch für mehr als eine Tabelle. Das Bildschirmphoto weiter unten zeigt das Ergebnis der ablaufenden 'OrdersSummary'-Abfrage in der Datenbank 'Orders'. Spalten welche ausdrückliche Beziehungen zwischen Tabellen einschließen werden grau hinterlegt und können nicht geändert werden; dies ist so, das der Anwender keine Änderungen durchführen kann, welche die Kombination der zurückerhaltenen Reihen modifiziert. Abgesehen davon können Werte auf gewohnte Weise aktuallisiert werden.

In dieser Rekall-Version gibt es einige Einschränkungen bei Abfragen bezüglich des Einfügens und Löschens von Reihen. Diese sind im Kapitel über Abfragen beschrieben.

### BILD: Formular 'OrdersSummary' ###


BERICHTE

Berichte sind in Rekall grundsätzlich genau das gleiche wie Berichte in jeder anderen Datenbank-Benutzerschnittstelle, und bieten Wege an, Information aus der Tabelle anzuzeigen, z.B. irgenwie zusammengefasste Daten und das typischerweise in einem Format, welches zum Drucken geeignet ist.

Im darunterliegenden Bildschirmphoto ist ein einfacher Bericht zu sehen, welcher tatsächlich aus der Abfrage abgeleitet ist, die im zurückliegenden Abschnitts gezeigt wurde. Dieser Bericht ist analog zum vorher beschriebenen Formular 'Orders'. Darin gruppiert er Bestellungen nach Kunden, mit Information über jeden Kunden und gibt dies in einer seperaten Seite aus. Der Bericht zeigt ein paar Besonderheiten der Rekall-Berichte, wie z.B. Ausgabe des Datum an dem der Bericht erzeugt wurde, die Seitennummer und Summenwerte(in diesem Fall die gesamten Spalten).

Behalten Sie im Gedächtniss, das Sie auch Ausgabewerte unter Zuhilfenahme von Python-Skripten erzeugen können, somit ist es möglich, einen großen Bereich von Ausgaben zu produzieren. In diesem Bericht werden Datum und Seitennummer tatsächlich von Bruchstücken dieses Codes generiert.


-----------------------------------------------------------------------------------------------------------------------------

3. MIT DATENBANK-SERVERN VERBINDEN

Rekall selbst beinhaltet keine Datenbank, wie das z.B. Microsoft Acces mit der Jet-Datenbank-Maschine tut. Obwohl Rekall mit einer XBase-Bibliothek geliefert wird(welche eine aktuelle XBase-Bibliothek und eine Wrapper-Bibliothek umfasst die SQL-Schnittstellen anbieten), so ist Sie nicht Teil von Rekall noch ist es ein MySQL- oder PostgreSQL-Server. Daher muß Rekall mitgeteilt werden, wie es an eine Server-Datenbank anbinden soll, bevor es etwas Sinnvolles tun kann.

Von Rekalls aus beginnt alles mit einer einzigen Datei welche die die Erweiterung .rkl trägt[5]. Dies ist eine einfache Textdatei, die ab Rekall 1.0.5 im XML-Format ist(ältere Versionen benutzten eine strich-getrennte Datei, doch das wird automatisch umgestellt). Die Datei enthält lediglich Informationen über Verbindungen zu Server-Datenbanken; in dieser Hinsicht gibt es nichts in der Art einer durch Access erzeugten .mdb-Datei. Sie können die Datei kopieren oder mit einem Texteditor begutachten, sie kann sogar von Hand editiert werden.

Rekall steht auf dem Standpunkt, das diese Datei das ist, was sich der End-Benutzter als Datenbank vorstellt. Ein Anwender kann ebensogut ein Textdokument in einer Textverarbeitung öffnen, wie ein Tabellenblatt in einer Tabellenkalkulation. Diese Datei kann als Datenbankdokument gedacht werden das durch ein Datenbankprogramm geöffnet wird. Selbstverständlich kann die echte Server-Datenbank von vielen Stelle aus abgerufen werden(über ein Netzwerk, durch einen WEB-Server, was auch immer). Tatsächlich kann eine Rekall-Datenbank-Datei von mehreren Rekall-Instanzen abgerufen werden(wenn sie beispielsweise auf einem Datei-Server gespeichert ist), aber alle Anfragen bezüglich zeitgleicher Mehrfach-Zugriffe auf Daten werden durch die Server-Datenbank gehandhabt.

Die Datenbank-Datei enthält Information über eine oder mehrere Server-Datenbanken. Üblicherweise wird sie Information über eine einzige Server-Datenbank enthalten, doch es gibt keine Grenze. Wenn sie tatsächlich mehr als eine Server-Datenbank haben, ist es sogar möglich Formulare zu entwerfen, welche Daten aus mehr als einer Server-Datenbank abrufen(mehr dazu später).


DER SERVER-DIALOG

Beim ersten Start von Rekall werden sie ein leeres Fenster erhalten. Klicken Sie auf das Werkzeug 'Neue Datenbank'[Anmerk: Ist falsch, muß heißen 'Neue Tabelle'](oder Datei/Neue Tabelle aus dem Menü wählen), wählen Sie dann ein Verzeichnis und einen Dateinamen aus, gerade so, als ob Sie ein neues Text- oder Tabellendokument anlegen wollten; Ort und Name der Datenbank werden nun vergeben. Der einzige Unterschied dabei ist, das Sie warscheinlich ein neues Verzeichnis anlegen und die Datenbank-Datei dort fixieren müssen. Warum das so ist wird etwas später erklärt.

Wenn Sie eine Datenbank-Datei erzeugen die 'Orders' heißt, wird ein Dialog im Fenster erscheinen wie im unteren Bildschirmphoto gezeigt. Die Reiter entlang der linken Seite herab, entsprechen den verschiedenen Komponenten von Rekall; Tabellen, Formulare usw. Der erste Reiter 'Server' zeigt Informationen über die Server-Datenbanken, die das sind, was sich in der Datenbank-Datei befindet. 

### BILD: Komponente 'Server' ###

[5] Aus historischen Gründen ist auch die Erweiterung .kdb vorhanden, sollte jedoch nicht vorzugsweise verwendet werden.


DER EINTRAG '!Files'

Wie schon früher erwähnt wurde, kann Rekall Formulare, Berichte usw. entweder in einer Server-Datenbank, oder im Dateisystem speichern(oder beides). Werden sie im Dateisystem gespeichert , dann wird jedes Formular oder jeder Bericht und dgl. in einer separaten Datei abgelegt und diese Dateien im gleichen Verzeichnis wie die Datenbank-Datei geortet(vermutlich müssen Sie deswegen die Datenbank-Datei in ein neues Verzeichnis setzten). Der Dialog wird immer einen mit '!Files' benannten Eintrag zeigen, der Formularen usw. entspricht, welche auf dem Dateisystem gespeichert sind. Wie dem auch sei, wir müssen wenigstens eine Server-Datenbank angeben, andernfalls werden keine Tabellen vorhanden sein auf die Rekall zugreifen kann!

An diesem Punkt haben Sie zwei Wahlmöglichkeiten: Wenn Sie sich dafür entscheiden Formulare usw. in einem Dateisystem zu speichern, dann können Sie eine Server-Datenbank zum Eintrag '!Files' hinzufügen. Um dies zu tun, heben Sie den Eintrag '!Files' hervor(oder klicken Sie doppelt darauf), das aktiviert dann die Text-Felder auf der rechten Seite. Zuerst wählen Sie den erforderlichen Datenbank-Server-Typ aus, dann geben Sie Einzelheiten zur Server-Datenbank ein. Die genauen Details hängen vom jeweiligen Datenbank-Server ab(und Textfelder die nicht sachdienlich sind werden grau eingefärbt), doch allgemein sehen sie folgendermaßen aus:

-	Host ist die Maschine auf der die Server-Datenbank läuft. Wenn das die gleiche Maschine ist, auf der sie Rekall 	laufen lassen, dann kann dieser Eintrag vermutlich leer gelassen oder auf 'localhost' gesetzt werden, ansonsten 	benötigt das Textfeld den Namen oder die IP-Adresse des Servers. 

-	'Datenbank' ist der Datenbankname innerhalb der Server-Datenbank. Server wie MySQL und PostgreSQL mehrfach logische 	Datenbanken, Sie müssen also die angeben die Sie möchten.

-	Benutzer und Passwort müssen gesetzt sein wenn Sie diese für den Zugriff auf die Datenbank vergeben haben.

-	Port, Sockel und Flags sind von der Server-Datenbank abhängig. Das erste wird typischerweise für TCP/IP-Verbindungen 	verwendet, wenn die Server-Datenbank auf einem nicht standardisierten Port aufgelistet ist; das zweite wird in ganz 	ähnlicher Weise für lokale Verbindungen benutzt. Für gewöhnlich werden Sie keines von diesen einstellen müssen.

Die Checkbox 'Deaktiviert' kann gesetzt werden, wenn Sie Rekall dauerhaft von einem Kontaktversuch zur Server-Datenbank abhalten möchten. Das kann nützlich sein, wenn die Datenbank-Datei mehr als eine Server-Datenbank angibt und eine von Ihnen nicht verfügbar ist. Beachten Sie, das Rekall dies automatisch einstellen wird, wenn es sich nicht mit dem Server verbinden kann. Die 'AutoStart'-Funktion wird verwendet um zu veranlassen, das ein Formular automatisch aufgeht sobald Rekall gestartet wird und ist im Kapitel über Formulare erklärt.

Ein spezieller Fall ist die XBase-Server-Datenbank, welche kein seperates Dienstprogramm besitzt und keine Ahnung von Benutztern oder Passwörtern hat. In diesem Fall ist 'Datenbank' der Name des Verzeichnisses in dem die XBase-Tabellen-Dateien gespeichert werden. Im besonderen Fällen kann eine Periode(... Anm: Eine Wiederhohlung) benutzt werden, was bedeutet, dass das gleiche Verzeichnis benutzt wird in dem die Datenbank-Datei lokalisiert ist.

Wenn Sie die Benutzter- und Passworteinstellungen leer lassen(und die Server-Datenbank diese Werte anfordert), dann wird ein Dialogfenster erscheinen sobald Rekall das erste Mal versucht sich mit der Server-Datenbank zu verbinden. Das ist dann sinnvoll, wenn Sie sichergehen wollen, das die Benutzer- und Passworteingaben nicht von jemandem anderen entdeckt werden, da die Werte die Sie eingeben im einfachen Textformat gespeicher sind.

Wenn Sie dann mit den Einstellungeb zufrieden sind, klicken Sie 'Speichern'.

Die zweite Möglichkeit ist, Formulare, Berichte etc. in einer Server-Datenbank zu speichern, in diesem Fall müssen Sie 'Neu' anklicken. Das aktiviert die rechts gelegenen Textfelder ebenfalls mit dem Unterschied, das diesmal auch das Textfeld 'Server' aktiv wird. Der Servername ist jeder Name den Sie gerne zur Identifizierung benutzen möchten; Sie können ihn z.B. auf den gleichen Namen wie den Datenbanknamen einstellen, es wird aber jeder Wert akzeptiert da Rekall nicht kleinlich ist. Wenn Sie diesmal die Einstellungen sichern wird ein neuer Eintrag mit dem Servernamen auftauchen.

Das nächste Bildschirmphoto zeigt den Dialog mit zwei Einträgen, einen für '!Files' und einen Zweiten DemoMySQL genannt, der auf eine Datenbank RekallDemo geheißen zugreift mit Benutzername orders und dem Passwort bigboss auf einer MySQL Server-Datenbank. Das letzte ist in Bearbeitung.

Die Wirkung dieser Optionen werden klarer ersichtlich wenn Sie sich von einem zum anderen Reiter bewegen, beispielweise Formulare und Berichte. Wenn sie etwas weiter schauen wird eine Baumansicht(nach Art eines Dateimanagers) mit zwei Ebenen gezeigt; die oberste enthält den hier definierten Server, die nächste Ebene zeigt das Objekt(Formulare, Berichte etc.) in diesem Server.

Zwei Punkte sollten Sie im Gedächtnis behalten. Erstens, Rekall kann weder Datenbanken noch Benutzer mit MySQL- und PostgreSQL-Datenbank-Servern erzeugen, deswegen müssen Sie dies selbst tun. Die Einzelheiten wie das getan wird sprengen den Rahmen diese Handbuchs. Zweitens, aus Sicherheitsgründen können manche Server-Datenbanken nicht von außerhalb eingerichtet werden um alle Verbindungstypen zu akzeptieren. z.B. ist PostgreSQL allgemein nicht dazu installiert TCP/IP-Verbindungen zuzulassen. Wenn sie also Rekall mit einer PostgreSQL-Datenbank auf einem entlegenen Computer verbinden wollen, so müssen Sie wohl einige Einstellungen auf diesem Computer ändern(Hinweis: schauen Sie mal nach der '/var/lib/pgsql/data/pg_hba.conf'-Datei)


DIE OBJEKTE VON REKALL UND DIE ENTWURFSTABELLEN

Bevor wir weitergehen, sollten zwei besondere Tabellen erwähnt werden die Rekall erzeugt. Rekall wird versuchen diese anzulegen wenn es auf eine Datenbank zugreift und feststellt das sie nicht existieren(nach Absprache mit Ihnen ob Sie erzeugt werden sollten). Die erste Tabelle, '__RekallObjects', wird verwendet um Objekte wie Formulare und Berichte abzulegen sobald sie in einer Server-Datenbank gespeichert werden. Die zweite Tabelle,'__RekallDesign', wird benützt um zusätzlich tabellenbezogene Information wie z.B. Vergleichsausdrücke und rekallgradige Standartwerte und zu sichern[6].

Normalerweise sollten Sie Rekall erlauben, sie zu erzeugen wenn es danach fragt. In einem Fall möchten Sie dies nicht tun, nämlich Rekall nur dazu zu verwenden in Daten zu schauen(vielleicht diese auch zu modifizieren)welche in vorhandenen Tabellen gespeichert sind und keine Formulare und dgl. erstellen möchten. Im Falle das Rekall keine Dateien erzeugen kann(weil Sie eventuell nur Lesezugriff auf die Server-Datenbank haben), wird das Programm Sie warnen aber fortfahren. 

[6] Rekall erzeugt keine '__RekallObject' Tabellen für den '!Files'-Eintrag, da es in diesem Fall keine Objekte in der Datenbank speichert.

[7] Es ist etwas ärgerlich, wenn Rekall Sie bei jedem Start fragt. Es sollte eine Option geben um Rekall davon abzuhalten Sie mit diese Tabellen zu belästigen. 


UND JETZT ZUR SACHE...

Damit sollten Sie mit einer Server-Datenbank verbunden werden und in diesem Fall wird es Zeit, in die richtigen Dinge einzusteigen. Wir beginnen mit ... Tabellen.
----------------------------------------------------------------------------------------------------------------------------


4. KAPITEL: MIT REKALL AUF TABELLEN ZUGREIFEN

Dieses Kapitel beschreibt, wie mit Server-Datenbank-Tabellen umgegangen wird; wie Daten die sie enthalten angesehen und modifiziert werden; und wie diese erzeugt, verändert(und gelöscht) werden. Zu Anfang werden wir sehen wie sich Rekall und die Typen gespeicherter Daten beeinflussen.

DATENTYPEN IN REKALL UND IN SERVERN

Relationale Datenbanken(was die meisten Leute als SQL-Datenbank ansehen)speichern Daten in Tabellen, wobei eine Tabelle alles enthält, was einen Typ besitzt(z.B. 'integer' oder 'varchar'). Rekall bildet sie auf einen Satz interner Typen ab, wenn Daten aus einer Tabelle gelesen werden, und wieder zurück, wenn die Daten in der Tabelle aktuallisiert werden. Die Tabelle darunter ist eine Liste solcher Typen.

Rakall Type		Anwendung
------------------------------------------------------------------------------------
Integer			Für ganze Zahlen, wie 42 oder 1066.
			Diese werden durch die spezifischen Integer-
			werte der Hardware repräsentiert und 
			deswegen wird es mit großer Wahrschein-
			lichkeit eine vorzeichenbehaftete 32-bit
			Ganzzahl sein, die einen Bereich von 
			ungefähr +/- 2 Billionen(2.000.000.000) hat.

Float			Für Zahlen mit Dezimalpunkten verwendet. 
			Nochmals: Diese werden unter Verwendung der
			hardwarespezifischen  Langwort-Gleitkommazahl
			(long floating point) dargestellt; meistens
			64 Bit. Beachten Sie, das Rekall z.Z. keine
			spezielle Unterstützung für Festkommazahlen 
			besitzt.

Date			Dieser Typ behält Daten wie Jahr/Monat/Tag. 
			Gültige Daten beginnen mit Einführung des 
			gregorianischen Kalenders in England 1752
			und geht, was Rekall anbelangt, bis das Universum
			um 8000 n.Chr. endet. Wenn Ihre Datenbank
			erst nach diesem Datum aufhört zu arbeiten, 
			dann würden wir gerne eine Nachricht von Ihnen  
			bekommen!

Time			Enthält Zeitangaben wie Stunde, Minute und
			Sekunde

DateTime		Kombiniert Datum und Zeit

String			Dieser Typ wird verwendet um Werte zu handhaben,
			welche von der Datenbank als Textzeichen zurück-
			gegeben werden. Typischerweise sind das Sachen die
			als druckbar angesehen werden können, obwohl es 
			nicht(besonders) erforderlich sein muß. Es ist auch 
			nicht erforderlich, das die Zeichenketten durch(das Zeichen)
			NULL terminiert sind(obgleich das Leben oft einfacher sein könnte,
			wenn sie´s wären). Es gibt keine Längenbeschränkungen.

Binary			Der Binary-Typ entspricht eher dem String-Typ, wird aber 
			für Daten verwendet die typisch als druckbar angesehen 
			werden z.B. Bilder. Nochmals: Es gibt keine Längen-
			beschränkungen(anders als gewöhnliche Dinge wie der
			zur Verfügung stehende Speicher).

Boolean			'Wahr' oder 'Falsch'. Dies ist ein eindeutiger Wahrheitswert
			obwohl andere Typen als 'wahr' oder 'falsch' interpretiert
			werden können(z.B. Zahlen 'ungleich 0' als 'wahr', und Zeichen-
			ketten werden in Zahlen konvertiert).

Wenn Rekall auf eine Tabelle in einer Server-Datenbank zugreift, identifiziert es den Typ jeder zurückerhaltenen Spalte(Oder allgemein: Jeden Ausdruck den es zurückerhält; das ist für Formulare und Berichte wichtig), und bildet die Typen der Server-Datenbank in einen der oben beschriebenen internen Typen ab. Die exakte Abbildung hängt von der jeweiligen Server-Datenbank ab(und dem Datenbank-Treiber der die Schnittstelle der Server-Datenbank zu Rekall bildet). Die Tabelle untern zeigt jedoch typische Abbildungen für allgemeingültige SQL-Typen(beide SQL92/SQL3-Typen und einige server-Datenbank spezifische Typen):

Rekall-Typ		SQL-Typen
---------------------------------------
Integer			smallint, int, integer
Float			float(p), real, double precision
Date			date
Time			time
DateTime		timestamp
String    		char(n), varchar(n) 
Binary    		blob 
Boolean    		boolean, logical

Zusätzlich definiert Rekall noch zwei Pseudo-Typen: 'Primary Key' und 'Foreign Key'. Der Erste Typ an den Rekall denkt, ist der Typ welcher einer Primärschlüssel-Spalte am besten entspricht, für MySQL ist das z.B. eine (32-Bit)Integer-Spalte welche mit der MySQL-Primärschlüssel- und der 'auto-increment'-Eigenschaft(für automatisches Hochzählen) versehen ist. Der Zweite ist einem Fremdschlüssel ähnlich und ist typscherweise eine(32-Bit)Ganzzahl größer als 0. Dieser Typ ist nützlich, wenn Sie sich nicht noch mit Typen herumschlagen möchten welche für Primärschlüssel verwendet werden und zufrieden damit sind, das Rekall Ihnen die Entscheidung darüber abnimmt[8].

Einige Server-Datenbanken bieten serverspezifische Typen an. PostgreSQL ist ein bemerkenswertes Beispiel. Dies hat Typen für solche Dinge wie geometrische Objekte(Punkte, Liniensegmente usw.) und Computernetzwerke(wie Internet-Adressen). Rekall wird diese allgemein als Stringwerte(Zeichenkettenwerte) behandeln und aus der Server-Datenbank erneuerte Werte genauso zurückreichen wie sie von der 'SELECT'-Abfrage der Datenbank zurückgegeben werden. Wird in ähnlicher Weise einer dieser Werte in einer Tabelle aktuallisiert, wird die Textzeichenkette als Teil der Aktuallisierungs-Abfrage durchgereicht.

Rekall wird sein bestes hergeben um Werte intern zu prüfen. Wenn es z.B. weiß, dass eine Spalte eine Ganzzahl enthält, wird es garantieren, dass nur Ziffern eingegeben werden können. Das bedeutet, dass Fehler deutlich früher aufgespürt und gemeldet werden. Im Falle von serverspezifischen Typen wird ein solcher Test nicht gemacht, sodass nur dann Fehler gemeldet werden, wenn die Server-Datenbank einen Fehler berichtet sobald eine Abfrage auf sie angewendet wird. Beispielsweise wird PostgreSQL einen Punkt-Wert im Format 10,20 akzeptieren, Rekall wird sie jedoch nicht davon abhalten 10.20 anzugeben und es wird keine Fehlermeldung zurückgegeben, bis Rekall ver sucht die Tabelle zu aktuallisieren. Es gibt einen Weg dies zu umgehen, da Eingabenfelder in Formularen beliebige Gültigkeitsausdrücke beinhalten können, die mit diesen verbunden sind. Sie können Gültigkeitsausdrücke auch mit Tabellenspalten verknüpfen(wie darunter erklärt)nur müssen Sie dies selbst tun.

[8] Diese Typen sind besonders mit XBase nützlich, das keinen Begriff von Primärschlüsseln hat. Der Rekall-XBase-Treiber behandelt Primärschlüssel indem er eine  erzeugt und Werte die sicherlich einheitlich sind. Aus einem Fremdschlüssel wird ebenfalls eine Spalte mit 22 Zeichen. Beachten Sie: Damit das läuft, muss die Primärschlüssel-Spalte die erste Spalte in der Tabelle sein.

[9] Tatsächlich könnten solche Überprüfungen gemacht werden, da Rekall Mechanismen enthält, um treiberspezifische Typinformation rundum Datenwerte zu übergeben. Dies wird momentan jedoch nicht zur Typ-Überprüfung genutzt.


TABELLEN ENTWERFEN UND ABÄNDERN

Der Reiter 'Tabellen' im Hauptfenster der Datenbank presentiert einen Überblick der Tabellen in jeder Server-Datenbank. Es sollte ein Ersteintrag für jede Serverdatenbank vorhanden sein(einschließlich einer für '!Files'). Wenn die Datenbank Tabellen enthält, kann dies durch Öffnen des Verzeichnissbaums eingesehen werden. Wenn Sie hingegen eine neue Datenbank auf dem Server angelegt haben, wird sich der Verzeichnisbaum auf einen einzelnen Eintrag ausdehnen, 'Create new Table'. Der Doppelklick darauf wird das Tabellen-Entwurfsfenster aufrufen.

Die obere Hälfte des Tabellen-Entwurfsfensters enthält Felder in die der Spaltename der Tabelle eingegeben werden kann, der Spaltentyp, ob es der Primärschlüssel ist oder nicht und ein Kommentar. Die untere Hälfte enthält Felder welche Information über die ausgewählten Spalten der oberen Hälfte zeigt. Von diesen sind 'lenght', 'precision', 'null OK', 'indexed' und 'unique' die Eigenschaften der jeweiligen Tabellen-Spalte. Der Rest sind zusätzliche Informationen welche Rekall über die Spalte speichert(in der Tabelle '__RekallDesign').

Die Standard-Tastenkombinationen können benutzt werden um sich im Entwurfsfenster zu bewegen. Auf- und Ab-Tasten bewegen zwischen Reihen hin und her; 'Enter'; 'Tab' und 'Shift+Tab' bewegt zwischen Feldern(und zwischen Reihen, wenn das erste oder letzte Feld eine Reihe ist).Die grau gefärbte Leiste links der oberen Hälfte zeigt den Staus jeder Reihe an(welche in diesem Fall einer Tabellenspalte entspricht), wie unten, könne sie auch rechts auf diese Leiste klicken, um Zugriff auf Einfüge- und Löschoperationen zu gewinnen.

Markierung	Bedeutung
-----------------------------
1		Aktuelle Spalte
2		Daten geändert
3		Spalte zum löschen markiert
4		Reihe eingesetzt
5		Aktuelle Spalte, doch Mausfokus im anderen Block

Die Tabelle unten zeigt die drei Datenbanktabellen die in der Datenbank 'Orders'. 'Client' enthält Einzelheiten über jeden Kunden; 'Products' enthält Information zu jedem Produkt und 'Orders' listet Produktbestellungen der Kunden.

Tabellen	Spalten		Type		Länge	Null
Name		Name
-------------------------------------------------------------
Client		ClientID	Primärschlüssel
		Company		VarChar		64	No
		Salutation	VarChar		8	Yes
		Contact		VarChar		64	No
		Department	VarChar		64	No
		Adress1		VarChar		64	No
		Adress2		VarChar		64	Yes
		Adress3		VarChar		64	Yes
		TownOrCity	VarChar		64	No
		Postcode	VarChar		12	No
		Telephone	VarChar		20	No
		DataRegisteres	Date			No
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Products	ProductsID	Primärschlüssel		
		Description	VarChar		80	No
		UnitCost	Double			No
		Stock		Integer			No
		DeliveryDate	Date			Yes
		Image		Blob			Yes
		Notes		Blob			Yes
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Orders		OrderID		Primary Key		No			
		ClientID	Foreign Key		No
		ProductID	Foreign Key		No
		Quantity	SmallInt		No
		DatePlaced	Date			No
		DateDispatched	Date			No

Das Bild darunter zeigt den Tabellenentwurfsbildschirm für die Tabelle 'Orders', kurz bevor der Tabellenentwurf abgespeichert wird(durch klicken des Floppy-Disk-Symbols). Sie können sich die Verwendung der 'Primary Key' und 'Foreign Key' Pseudo-Typen anschauen. Wird der Tabellenentwurf einmal abgespeichert, erscheint er unter dem Reiter 'Tabellen'; wird der Tabelleneintrag aufgeklappt sieht man eine Zusammenfassung der Tabellenspalten.

Wenn Sie eine bestehende Tabelle in der Entwurfsansicht öffnen(oder wenn sie soeben einen Tabellenentwurf gesichert haben) dann wird Rekall die Spalten begutachten um festzustellen, ob etwas zu seiner Vorstellung von einem Primärschlüssel passt und wenn das so ist diese Typ als Primärschlüssel zeigen. Dies stimmt jedoch nicht für Fremdschlüssel(Foreign Key), wenn Sie also eine Spalte mit diesem Pseudo-Typ erzeugt haben, wird dieser typischerweise wieder als Ganzzahl(integer) auftreten. 'Foreign Key' ist eine reine Entwurfskonvention und es wird tatsächlich keine Information über Fremdschlüssel der Server-Datenbank übergeben, selbst wenn sie diesen Begriff unterstützt.

Sie können Änderungen am Tabellenentwurf vornehmen und diese speichern. Rekall wird versuchen Tabelleninhalte zu bewahren. Deutlicher, alle Daten die in Spalten - welche wegfallen - gespeichert sind, werden verloren sein, ansonsten werden Werte umgewandelt(wenn möglich)sobald der Spaltentyp geändert wird[10].

Vielleicht haben Sie auch am Fensterboden des vorigen Bildes etwas Text in einem mit 'Link' bezeichneten Feld bemerkt. Wir werden später darauf zurückkommen. Indessen ist das Symbol ganz links auf der Werkzeugleiste dazu da, von der Entwurfsansicht zur Tabellendatenansicht um zu schalten. In der Datenansicht wird es durch ein kleines Datensatz-Symbol ersetzt welches in die Entwurfsansicht zurückschaltet.

[10] z.Z. hat Rekall keine Kenntnisse über die Fähigkeiten der Server-Datenbank, Tabellen direkt unter Anwendung des SQL-Befehls 'ALTER' zu verändern. Deswegen werden die Daten durch kopieren aufbewahrt. So seien Sie darauf bedacht, das Änderungen am Enturf einer Tabelle welche eine große Anzahl von Datenreihen enthält keine gute Idee sein dürfte!


ANSICHT UND AKTUALLISIERUNG VON TABELLENDATEN

In der Entwurfsansicht klicken Sie auf das Datenansichtssymbol und schalten in die Datenansicht(oder gehen Sie mit Hilfe des Menüs 'Datenansicht' dorthin). Wenn Sie nicht in der Entwurfsansicht sind, können Sie unmittelbar zur Datenansicht gehen indem Sie auf die Tabelle im Reiter 'Tabellen' doppelklicken oder durch Rechtsklick auf die Tabelle und Auswahl von 'Datenansicht'. In der Datenansicht können Sie in Daten hineinschauen und üblicherweise einfügen und aktuallisieren(Schauen Sie in Anhang 1 nach einer Erörterung zu sachbezogenen Fragen). Hier genügt es zu sagen: Haben Sie eine Spalte mit dem Pseudotyp Primärschlüssel('Primary Key') erzeugt, dann werden Aktuallisierung und Einfügen möglich sein.

Daten können auf gewöhnliche Art und Weise eingegeben werden. Die Datenansicht wird so eingerichtet, dass wann immer Sie sich zwischen Reihen bewegen und Änderungen die Sie in der Reihe gemacht haben welche Sie gerade verlassen, in der Datenbank gesichert werden. Der Inhalt eines Feldes wird auf Gültigkeit geprüft wenn Sie dieses verlassen(aber erinnern Sie sich bitte an die Bemerkungen oben über serverspezifische Typen). Der Inhalt aller Felder in einer Reihe wird geprüft, wenn Sie die Reihe verlassen. Es gibt Werkzeuge für die verschiedenen Operationen zur Datensatz-Navigation: 'Erster', 'Vorhergehender', 'Nächster', 'Letzter' usw.

Werkzeugsymbol		Funktion
---------------------------------
1			zum ersten Datensatz gehen
2			Zum vorhergehenden Datensatz gehen
3			Zum nächsten Datensatz gehen
4			Zum letzten Datensatz gehen
5			Neuen Datensatz einfügen
6			Datensatz löschen
7			Aktuellen Datensatz sichern
8			Suche beginnen
9			Suche ausführen
10			Suche stornieren
11			Tabelle erneut laden

Beim Klicken der Schaltfläche 'Suche beginnen' wird die aktuelle Reihe gelöscht. Sie können dann Suchkriterien eingeben und die Schaltfläche 'Suche ausführen' drücken, wobei Rekall jene Reihen suchen und anzeigen wird welche mit den Kriterien übereinstimmen. Genauso wie exakte Werte(z.B. 42 oder Fred) können Sie auch Ausdrücke wie >12 in Zahlenspalten und F% in Textspalten eingeben[11].

Die Tabelle darunter zeigt drei Datenbanktabellen die in der Datenbank 'Orders' verwendet werden. 'Client' enthält Einzelheiten über jeden Kunden; 'Products' über jede Ware und 'Orders' listet Warenbestellungen der Kunden auf.

Die Abbildung darunter zeigt die Tabelle 'Client' nachdem ein paar Reihen an Daten hinzugefügt wurden. Wie auf dem Tabellenentwurfs-Formular gibt es eine Rolleiste welche die aktuellen Reihen markiert usw. Beachten Sie: Da die erste Spalte als Primärschlüssel definiert wurde, müssen Sie keinen Wert eingeben. Beim Einfügen eines Datensatzes wird ein Wert erzeugt(in diesem Beispiel durch MySQL über das Autoincrement-Attribut)

Eine Reihe kann durch Rechtsklick auf die Spalte ganz links und durch Auswahl von 'Löschen' entfernt werden, oder durch Klicken in ein Feld der Reihe und durch drücken des Symbols 'Löschen' in der Werkzeugleiste. Sie können Spalten auch unter Verwendung der Strg- und Shift-Klick-Methoden zum Löschen auswählen.

[11] Dies ist die zugrundeliegende Standard-SQL-Bezeichnung für eine Teilübereinstimmung. Eine Option zur Verwendung der UNIX-üblichen *-Platzhalter werden zu einem späteren Zeitpunkt hinzugefügt sein.


ANDERE EINSTELLUNGEN ZUM TABELLENENTWURF

Genauso wie die aktuelle Tabelle in der Server-Datenbank gespeichert wird, kann Rekall auch Information zum Tabellenentwurf speichern - wie Standardwerte und Gültigkeitsprüfungen. Diese werden in Objekten mit der .inf-Erweiterung gespeichert[12]. Beachten Sie, dass sie sich auf die Datenansicht und die Dateneingabe in der Tabellenansicht beziehen; sie werden der Server-Datenbank nicht übergeben und werden nicht verwendet wenn ein Formular erzeugt wird das auf eine Tabelle zugreift. Die Tabelle unten listet diese auf:

Legende
-------------------------------
Validator	Gültigkeitsausdruck zur Dateneingabe
		Dies ist ein regulärer nicht verankerter Ausdruck

Ignore		Fallinsensitive Gültigkeitsprüfung der Eingabe
case

Default		Wert der verwendet wird wenn keine Eingabe gemacht wurde
value

Format		Daten zur Anzeige formatieren. Siehe unten

Link		Datenanzeige einer verknüpften Tabelle. Siehe unten

Wenn Sie die Format- oder Linkfelder klicken, erscheint eine kleine Schaltfläche. Wird diese gedrückt erscheint ein Hilfsdialog, der ihnen beim Setzen beliebiger Werte zur Seite steht. Mit dem Dialog welcher beliebige Typen und Testformate zeigt ist die Formateinstellung recht unkompliziert. Zahlen werden unter Verwendung der Format-Zeichenketten 'fprintf' der C-Bibliothek formatiert, wärend Datum und Zeit die 'strftime'(C-Bibliothek) Zeichenketten benützen. Schlagen Sie bitte in einem beliebigen Handbuch nach, um weiterführende Details zu erhalten.

Die Einstellung 'Link' benötigt mehr Erklärung. Gesetzt den Fall, Sie haben eine Spalte, sagen wir 'ClientID', die enthält (Fremd-)Schlüsselwerte welche auf Kunden verweisen die in der Tabelle 'Clients' gespeichert sind. Sie möchten aber lieber den Kundennamen als den Schlüsselwert anzeigen. 

Um das zu tun würde die 'Link'-Einstellung so etwas sein wie: Client:ClientID:Name. Das bedeutet, dass die Spalte 'Name' aus der Tabelle 'Client' angezeigt wird, wobei der Wert 'ClientID' in jener Tabelle der gleiche ist wie der Spaltenwert in dieser Tabelle. Um dies zu vereinfachen, erlaubt Ihnen der Hilfsdialog die Auswahl der Tabelle die Sie verknüpfen möchten, die Spalte in dieser Tabelle welche zum (Fremd-)Schlüsselspalte passt und einen anzuzeigenden Ausdruck. Das Bilschirmphoto unten zeigt die Tabelle 'Orders', die Spalten 'ClientID' und 'ProductID' wurden mit den Tabellen 'Client' und 'Product' verknüft und die Datumsspalten mit dd-mmm-yy formatiert. Der Mausfokus ist in der Spalte 'ClientID' sodaß eine Reihe ein Kombinationsfeld zeigt.

### BILD: TABELLE 'Orders' betrifft Links ###

Was über verknüpfte Tabellenfelder noch gesagt werden sollte ist, dass diese als Kombinationsfeld erscheinen, wenn sie den Mausfokus besitzten, andernfalls als einfaches Textfeld. Dies ist ein Beispiel für ein Steuerelement das seine Gestalt ändert. Tatsächlich sind alle Steuerelemente in der Tabellendaten-Ansicht wandlungfähig, obwohl dieser Unterschied zu einfachen Textfeldern viel weniger auffallend ist. Dies wird in erster Linie dazu gemacht, um Bilschirm-Aktuallisierungen ausreichend schnell zu gestalten wenn es viele Spalten in einer Tabelle oder viele Reihen in der Anzeige gibt. Egal wie, der Schalter zu oder aus einem  Kombinationsfeld kann nützlich sein, um Bilschirmplatz zu sparen. Schauen Sie nochmal weiter, einige Typen der Steuerelemente in jedem Formular das Sie entwerfen, sind ebenfalls wandlungsfähig. Die Tabellendaten-Ansicht ist tatsächlich ein vollkommenes Rekall Standardformular, obwohl es ganz nebenbei passend zur Tabelle erzeugt wird.

[12] Vor Rekall Version 2.0.0 wurde diese Information in einer Tabelle der Server-Datenbank - __RekallDesign genannt -  gespeichert. Die Änderung ermöglicht, dass viel mehr Information gespeichert wird, wie alles andere in Rekall ist sie in XML formatiert. Wenn Sie einer Version vor 2.0.0  von Rekall benützt haben, werden diese Einstellungen automatisch zu den .inf-Dateien übertragen. Die '__RekallDesign'-Tabelle wird nicht gelöscht im Falle das Sie darauf zurückgreifen müssen, aber Sie wird bei fortlaufenden Entwurfsänderungen nicht aktuallisiert. 


SCHNELLFILTER IN TABELLEN

Endlich: Sie können nun bestimmen was Sie sehen oder Ihr Anwender sieht wenn er Formulare verwendet, die im nächsten Kapitel beschrieben sind. Oft gibt es aber Fälle, in denen Sie nun gerne eine Teilmenge der Tabellenspalten sehen möchten(die Tabelle kann sehr,sehr viele Spalten besitzen), oder eine Teilmenge der Reihen(eine Tabelle hat u.U. tausende, ja millionen von Datensätze); oder Sie möchten die Reihen vielleicht gerne in einer bestimmten Weise ordnen. Was das betrifft, kann das Zweite duch Anwendung der Suchfunktion erreicht werden und das Dritte duch klicken auf die Spaltenköpfe(vorrausgesetzt, dass Sie nur eine einzelne Spalte anordnen möchten). Wie auch immer, Schnellfilter in Tabellen ermöglichen Ihnen einen Weg solche Bedingungen im voraus festzulegen und bequem hin und her zu schalten.

Rekall biete drei Typen von Schnellfiltern(wie unten aufgezählt) an. Sie sind von einander unabhängig und so können Sie gleichzeitig einen von jedem Filtertyp auswählen. 

-	Sortierfilter: Diese werden verwendet um die Reihenfolge anzugeben in der Reihen angezeigt werden.

-	Auswahlfilter: Diese geben an, welche Reihen angezeigt werden, durch Angabe der Bedingungen für Tabellenwerte.

-	Spaltenfilter: Diese geben an, welche Spalten angezeigt werden sollen und die Reihenfolge in der die Spalten 		erscheinen

Schnellfilter können eingestellt werden, wenn die Tabelle in der Datenansicht zu sehen ist. Das Filter-Menü enhält vier Einträge. Der erste öffnet einen Dialog zur Gestaltung der Schnellfilter; die anderen drei werden benützt um auszuwählen, welcher Filter angewendet wird. Der Konfigurationsdialog ist im Bildschirmphoto unten gezeigt. Dieser wird in drei Abschnitte unterteilt. Alle drei sind grunsätzlich gleich, zeigen Filterlisten und eine Schaltfläche einen bestehenden Filter zu bearbeiten, einen neuen zu erzeugen oder einen vohandenen zu löschen.

### BILD: Filter (1) ###

ANORDNUNG VON REIHEN

Der Sortierdialog ist unten gezeigt. Der Dialog zeigt den Filternamen oben an, unterhalb davon ist die aktuelle Konfiguration zu sehen. Diese benennt eine oder mehrere Spalten und jede Spalte entweder in aufsteigender oder absteigender Reihenfolge. Spalten können hinzugefügt werden durch Auswahl einer Spalte und der Reihenfolge in einem Kombinationsfeld und durch drücken von 'Hinzufügen'. Entfernt werden sie durch Auswahl eines Eintrags und klicken der Schaltfläche 'Entfernen'. Zusätzlich können die Einträge durch Betätigung der Schaltflächen 'Nach oben'/'Nach unten' neugeordnet werden.

### BILD: Filter (2) 'Sorting' ###

In diesem Bildschirmphoto sind die Reihen zuerst nach der Spalte 'pc_dealershipid' sortiert, dann nach 'pc_surname' und schließlich nach 'pc_firstname'. Alle drei Spalten sind aufsteigend sortiert[13].

REIHENAUSWAHL

Das nächste ist der Reihenauswahldialog. Das ist so ziemlich das gleiche wie der Sortierdialog, außer das drei Werte festgelegt werden müssen, Der Spaltenname, ein Operator und ein Wert(mit Ausnahme der Operatoren 'is NULL' und 'is not NULL', diese brauchen keine Werte). Die Einträge sind miteinander derart kombiniert, das alles 'Wahr' ergeben muß, damit eine Spalte zur Anzeige ausgewählt wird.

### BILD: Filter (3) 'Selection' ###

Bedenken Sie, das die Reihenfolge in der die Ausdrücke auftauchen nicht wichtig ist, außer Sie wissen das sich die Reihenfolge auf die Leistungsfähigkeit auswirkt mit der die Server-Datenbank passende Datenreihen zürückgewinnt.

SPALTEN

Zum Abschluß: Der Spaltendialog ist nochmals ziemlich gleich, jedoch nur mit einem einzigen Wert für jeden Eintrag, der Spalte. Die gewählten Spalten werden in der Tabellen-Datenansicht in der Reihenfolge(von links nach rechts) sowie sie im Dialog(von oben nach unten) aufgelistet sind.

### BILD: Filter (4) 'Sorting' ###

SCHNELLFILTER ANWENDEN

Schnellfilter werden durch Auswahl aus dem Menü 'Filter' angewendet. Es gibt für jeden Filtertyp drei Untermenüs. Jedes Untermenü zeigt jeden Filter des entsprechenden Typs. Zusätzlich gibt es einen Standardeintrag der den angewendeten Filter entfernt. Wie oben bemerkt, können die drei Filtertypen unabhängig von eineander angewendet werden.

Sie sollte auch im Gedächtniss behalten, das jede Änderung der angewendeten Sortier- oder Auswahlfilter Rekall zu einem Wiederabruf der Daten aus der Server-Datenbank veranlassen wird. Die Änderung des Spaltenfilters  wird die Server-Datenbank jedoch nicht erneut abfragen. Definitiv sind unsichbare Spalten wirklich noch da und sind nur versteckt.

[13] Dies würde den Ausdruck 'ORDER BY pc_dealershipid ASC, pc_surname ASC, pc_firstname ASC.' erzeugen und zur SQL-Abfrage hinzufügen um Daten zurück zu gewinnen.

VERSCHIEDENENS

Dieses Kapitel endet mit verschiedenen Funktionen die in der Tabellendaten-Ansicht vorhanden sind.

Durch Klicken auf die Spaltenüberschrift können die Reihen nach den Werten in einer Spalte sortiert werden. Wiederholtes Klicken schaltet zwischen aufsteigender und absteigender Reihenfolge um. Beachten Sie das diese Anordnung innerhalb von Rekall ausgeführt wird und nicht durch Erteilung einer neuen Abfrage auf der Server-Datenbank. Das ergibt einen Geschwindigkeitsvorteil kann aber eine unterschiedliche Anordnung ergeben.(vielleicht wegen einer Abweichung zwischen alphabetischer und lexikalischer Reihenfolge).

Die Spaltenbreite kann durch Verschieben der Grenzen zwischen den Spaltenüberschriften geändert werden und die Reihenfolge der Spalten durch Verschieben der gesamten Überschriften nach links oder nach rechts. Diese Änderungen werden bis zum nächsten Öffnen der Tabelle in der Datenansicht beibehalten. Zusätzlich hat das Menü 'Ansicht' einen Menüpunkt 'Order Columns', der dazu benützt werden kann, die Spaltenreihenfolge zwischen der in der Tabelle bestehenden und der lexikalisch nach Spaltennamen geordneten, umzuschalten. Das ist nützlich wenn sie eine Tabelle mit einer großen Anzahl von Spalten haben und es schwierig ist eine besondere Spalte zu orten! Tritt dieses Problem regelmäßig auf, legen Sie einen Spaltenfilter fest.


-----------------------------------------------------------------------------------------------------------------------------
5. KAPITEL: ENTWURF UND ANWENDUNG VON FORMULAREN

Obwohl Daten unter Verwendung der Tabellendaten-Ansicht direkt eingegeben, angesehen und aktuallisiert werden können, ist es für Anwender viel leichter dies mit einem geeigneten Formular zu tun. Desweiteren gibt es viele zusätzliche Dinge die Formularen getan werden können, wie Datenansicht aus mehr als einer Tabelle im gleichen Formular oder durch hinzufügen von Funktionen durch Verwendung von Phyton-Skripten.

Dieses Kapitel beschreibt die Technik des Formularaufbaus, wie Sie diese strukturieren können und welche Sorte von Daten-Steuerelementen zur Verwendung in diesen vorhanden sind. Es umfasst nicht ausdrücklich die Python Skriptsprache, obwohl es einige Dinge beschreibt, wie z.B. Navigations-Schaltflächen die von den Skript-Fähigkeiten Rekalls Gebrauch machen.
in einem späteren Kapitel kehren wir zu Einzelheiten der Skriptsprache zurück.


EIN FORMULAR ERSTELLEN

Formulare werden im Reiter 'Formulare' aufgelistet. Hier werden Sie Unterverzeichnisse jeder Server-Datenbank und üblicherweise den Eintag '!Files' sehen. Wie zuvor bemerkt, erlaubt Ihnen Rekall Formulare entweder in der Server-Datenbank(innerhalb der Tabelle '__RekallObjects')oder im Dateisystem zu speichern. Für alle erscheinen Einträge im entsprechenden Unterverzeichnis. Das Unterverzeichnis hat auch einen Eintrag 'Create new form' welcher durch Doppelklick betätigt wird um ein neues Formular zu erstellen.

An eines sollten Sie denken: Seien sie konsequent. Rekall kann ein Formular durch ein anders öffnen(typisch durch Drücken einer Schaltfläche)und auch Berichte und Kopiervorgänge aus einem Formular ausführen. Doch muß mommentan das zu öffnende Objekt am gleichen Ort sein wie das Formular das es öffnet(d.h. beide im gleichen Verzeichnis des Dateisystems oder in der gleichen Server-Datenbank).

Dieser Abschnitt beschreibt die Erzeugung des Formulars 'Clients' aus der Demonstrations-Datenbank 'Orders'. Halten Sie im Gedächtnis fest, das es Rekall z.Z. an Formular-Assistenten mangelt, wie sie z.B. in Microsoft Acces vorhanden sind. Sie sind eingeplant aber jetzt nicht da.


EIN NEUES FORMULAR ERZEUGEN: Der Formulardialog

Durch Doppelklick auf das entsprechende Element 'Create new form' wird ein Formulareigenschafts-Dialog erscheinen.

Eigenschaftsdialoge der Rekallobjekte Formulare, Berichte usw. haben die gleiche Struktur. Eigenschaften sind nach Typen grob eingeteilt und werden durch diesen Typ organisiert. Diese Typen sind:

Display	:	Dieser umfasst Eigenschaften zur Anzeige wie Position und Schriftart
Daten	:	Umfasst datenbezogene Eigenschaften wie z.B. Tabellenspalten und Formate
Aktionen:	Bezieht sich auf die Skriptsteuerung(in diesem Handbuch später behandelt)
Sonstiges:	Für alles das zum darüberliegenden passt
(Notes	:	für Notizen -- ANM. des Übersetzers)	

Wenn Sie möchten können Sie die Verzweigung 'Alle' öffnen um alle Eigenschaften auf einmal zu sehen.

Um eine Eigenschaft zu bearbeiten klappen Sie den entsprechenden Zweig auf(Sie werden bald gewohnt sein, welche Eigenschaft wo liegt) und klicken auf den Eigenschaftsnamen(die Spalte links). Die Spalte rechts wird durch einen Dialogbereich ersetzt, welcher der Eigenschaft angehört die zu bearbeiten ist(Sie können auch einfach klicken und danach die Schaltfläche 'Bearbeiten' drücken). Sie können Änderungen einer Eigenschaft durch drücken von Schaltfläche 'Übernehmen' speichern oder mit 'Igorieren' darüber hinweg gehen. Änderungen am Formular werden jedoch erst dann wirksam, wenn sie die 'OK'-Schaltfläche drücken(so wird 'Verwerfen' jede individuelle Änderung löschen)[14].

Abhängig von den zu bearbeitenden Eigenschaften können die Schaltflächen 'Löschen' oder 'Überprüfen' aktiv sein. Ersterer wird benützt, um die Eigenschaft auf ihren Ursprungszustand zu setzen(der Zustand, den das Objekt hatte, als es das erste Mal erzeugt wurde). Der letztere wird - wenn zutreffend - verwendet um zu prüfen, ob eine Eigenschaft gültig ist, z.B. der Test, ob ein Python-Skript sauber übersetzt wird, oder ob eine Gültigkeitsregel selbst regulär gültig ist. Des Weiteren wird Rekall daran gehen, alle Tests zu versuchen um einer Garantie dafür zu geben, das Eigenschaften nur auf vernüftige Werte gesetzt sind. Zuletzt noch: Sollten KDE-Versionen von Rekall laufen, kann eine Schaltfläche 'Hilfe' aktiv sein. Wenn ja, wird ein Klick darauf ein kontextsensitives Hilfsfenster zum Vorschein bringen(beachte, dieses Fenster ist kein typspezifischer Dialog, es ist also nicht nötig ihn zu schließen um zum Eigenschafts-Dialog zurück zu gehen).

Das Bildschiemphoto darunter zeigt den Eigenschafts-Dialog teilweise dabei, verschiedene Einstellungen zu setzten. Die folgende Tabelle listet die Eigenschaften auf, deren Bedeutung und Werte. Der Dialog fragt hauptsächlich nach Eigenschaften die das Formular selbst betreffen. Kurzgesagt: Eigenschaften die hier unerheblich oder leergelassen sind werden nicht aufgelistet.

### BILD: Formular (1) 'Formeigenschaften' ###

Eigenschaft		Bedeutung			Einstellung
....................................................................
Scripting language	im Formular verwendete		py
			Skriptsprache. Dies sollte
			immer py für Python sein

Form caption	 	Überschrif für die		'Clients'
			Formular-Titelleiste

Top-level		Formulare werden aus 		table	
block type		eingebeteten Blöcken
			gebaut. Dies ist der
			Typ des Anfangsblocks
			(wird später genauer
			erklärt)

Modal			Führt ein Formular		No
			modal aus(wie einen
			typspezifischen
			Dialog).Siehe unten

Die Eigenschaftsdialoge aller Objekte zeigen eine Einstellung 'Notes'. Diese wird von Rekall übersehen, kann jedoch für beliebige Notizen verwendet werden, wie z.B. für Dokumentationen. 

Ist die Eigenschaft 'Modal' gesetzt, dann wird das Fenster wie ein modaler(typspezifischer) Dialog ausgeführt. Das heißt, einmal geöffnet, kann der Anwender nur diese Formular verwenden und kein anderes, das schon zuvor geöffnet wurde. Das ist z.B. dann sinnvoll, wenn Sie sichergehen wollen, dass der Anwender keine Änderungen in anderen Formularen durchführt solange dieses Fenster offen ist. Beachten Sie jedoch, dass die Änderung der 'Modal'-Eigenschaft sich nicht auswirkt bis das Fenster geschlossen und erneut geöffnet wird.

Ein Formular modal zu setzen ist besonders nützlich, wenn Sie tckRekall verwenden. Auf dem Zaurus von Sharp, verwaltet die Qtopia-Umgebung  MDI-Anwendungen(die mehrfach Fenster öffnen können) nicht besonders gut. Wenn Sie ein Formular ausführen das nicht modal ist und dann in ein anderes Programm schalten(und zurück) werden Sie feststellen, dass das Formular nicht länger sichtbar ist. Es befindet sich jetzt "hinter" dem Datenbank-Hauptfenster von Rekall. Mit Hilfe der Menüs 'Fenster' kann es nach vorn geholt werden, doch das ist bestenfalls unbequem.

Eine weitere Warnung: Nachher wird das Handbuch erläutern, wie Sie ein Formular mit Hilfe eines anderen öffnen können(typisch durch eine Schaltfläche). Angenommen Sie haben zwei Formulare A und B und Formular B wird durch Klick auf eine Schaltfläche in Formular A geöffnet. Wenn A dann modal ist, sollte B genauso modal sein. Wenn nicht, dann wird Formular B nach dem Öffnen sofort hinter Formular A gesetzt und nicht zugänglich sein!


EINE NEUES FORMULAR ERSTELLEN: DER DIALOG 'ANFRAGE'

Durch Drücken von 'OK' erscheint ein zweiter ähnlicher Dialog. Dieser fragt Information darüber ab, woher das Formular seine Daten holt, in diesem Fall, aus welcher Tabelle.

### BILD: Formular (2) 'Anfrage' ###
	
Eigenschaft	Bedeutung										Einstellung
.......................................................................................................................
Server name: Name der Server-Datenbank welche die Tabelle enthält					Self(Siehe unten)
table name : Name der Tabelle in der Server-Datenbank							'ClientID'
Unique key : name der tabellenspalte die einen Einheitsschlüssel anbietet				Auto
	     dies ist vorzugsweise eine Primärschlüsselspalte. Die Einstellung 'Auto' wird Rekall
	     anweisen es selbst herauszufinden
Row order  : SQL-Ausdrücke geben die Reihenfolge vor welche die erzeugte Anfrage zurückgibt.(Später)	'Company', 														'Contact'	Where      : Gültiger Ausdruck wie z.B. der 'WHERE'-Teil einer SQL-Anfrage(Siehe unten)			${Filter}
condition

Setzten des Feldes 'Server Name' auf 'Self' wird gedeutet, das die benutzte Server-Datenbank die gleiche ist wie diejenige, in der das Formular gespeichert ist(wenn das Formular jedoch im Dateisystem gespeichert ist, muß der Eintrag '!Files' im  Serverdialog eine Datenbank identifizieren damit es läuft). Diese Einstellung ist nützlich und bedeutet, dass Sie ein Formular in eine andere Server-Datenbank kopieren können sofern die zweite Server-Datenbank kompatible Tabellen besitzt, usw., das Formular also unverändert läuft[15].

Das nächste Bild zeigt den Dialog beim Bearbeiten der Eigenschaft 'Unique key'. Die 'Auto'-Einstellung wird üblicherweise in Ordnung sein. Manchmal jedoch möchten Sie Rekall zwingen etwas besonderes zu tun. Dies ist wahrscheinlich die schwierigste Einstellung. Das ist sie deshalb, da Rekall zuerst entworfen wurde, mit einer möglichst großen Auswahl an Server-Datenbanken zu arbeiten und zweitens, so gut wie möglich mit bereits bestehenden Server-Datenbanken(nicht nur mit einer die von Rekall eingerichtet wurde). Wenn Sie sich über diesen Abschnitt nicht im Klaren sind, dann ist die Auswahl der Option 'Auto' der beste Weg und sie können weiter zum nächsten Abschnitt springen.

### BILD: Formular (3) 'Anfrage: Unique key' ###

Das obere Kombinationsfeld(zeigt 'Any unique column' im Bild)wird benutzt um die Spaltensorte auszuwählen, die von Interesse ist wobei die Optionen unten aufgelistet sind. Darunter kann ein zweites Kombinationsfeld erscheinen.

Auto: Ist diese Option gewählt, wählt Rekall das aus was es als die beste verwendbare Spalte ansieht, entweder eine Primäschlüssel- oder eine Einheitsschlüssel-Spalte.

Primary Key: In diesem Fall wird Rekall nur die Verwendung einer Primäschlüssel-Spalte zulassen. Es wird ein zweites Kombinationsfeld erscheinen, das wenn vorhanden, nur die Primäschlüssel-Spalte enthält. läuft das Formular, überprüft Rekall ob die Spalte ein Primäschlüssel ist.

Unique key: In diesem Fall wird Rekall die Verwendung jeder Einheitsschlüssel-Spalte zulassen. Ein zweites Kombinationsfeld wird alle Einheitsschlüsselspalten in der Tabelle zeigen, und wenn vorhanden, die Primäschlüssel-Spalte einbeziehen. Läuft das Formular, überprüft Rekall ob die Spalte tatsächlich eindeutig ist.

Any single column: Wird diese Option gewählt, erscheint ein zweites Kombinationsfeld, das alle Spalten der Tabelle zeigt. Dann geht Rekall davon aus, das die selektierte Spalte eindeutig ist. Ob oder ob nicht scheint an der Datenbank zu liegen. Es wird auch vorraussetzten, das ein eingefügter oder aktuallisierter Wert von Auslösemechanismen der Datenbank nicht verändert wird.

Pre-expression : Verwendet einen SQL 'SELECT'-Ausdruck um einen Schlüsselwert zu erzeugen.
Post-expression: Verwendet einen SQL 'SELECT'-Ausdruck um einen Schlüsselwert zurückzuerhalten.

Die Einstellung 'any single column' ist nützlcih wenn Sie wissen, das eine bestimmte Spalte immer eindeutig ist. Seien Sie jedoch auf der Hut! Rekall wird den Werte dieser Spalten verwenden um Reihen in der Tabelle zu aktuallisieren oder zu löschen. Wenn sich die Tabelle als nicht eindeutig herausstellt, können unerwartete Ergebnisse auftreten[16].

Die Einstellung 'pre-expression' erlaubt Ihnen eine beliebige SQL 'SELECT'-Abfrage anzugeben, welche Rekall zur Erzeugung von Schlüsselwerten nutzt, die dann in einer Einfügeabfrage verwendet wird.

Die Einstellung 'post-expression' ist ähnlich, außer das der Ausdruck nach dem Einfügen ausgewertet wird und den Schlüsselwert zurückgeben sollte. Das kann beim Einfügen durch eine Ansicht benützt werden, wobei eine Datenbankregel den Schlüssel erzeugt. Beispielweise würde bei Verwendung von PostgreSQL mit der unten definierten Regel(welche Einfügungen in der Ansicht 'v_NoPKey_insert' abfängt, um diese in die zugrundeliegende Tabelle 'NoPKey' einzusetzten) der Ausdruck für 'post-expression' lauten: 'SELECT CURRVAL('NoPKey_Seq').'
..........
create rule
       "v_NoPKey_insert"
       as on insert to "v_NoPKey"
       do instead
           insert into "NoPKey" (i, t) values (nextval('NoPKey_Seq'), new.t)
...........
Beachten Sie: Das jede Datenbank die vor Ausgabe 1.1.0-beta3 entworfen wurde, die angegebene eindeutige Spalte nach dem gleichen Verfahren verwendet wie in früheren Ausgaben. Sie wird wie benannt verwendet, wenn sie genügend Information liefert, das Reihen eingefügt, aktuallisiert und gelöscht werden können. Wenn nicht, wird Rekall den 'Auto'-Modus verwenden und die beste Spalte wählen. 

Der Wert der 'WHERE'-Bedingung welcher auf '${Filter}' gesetzt wurde, wäre als Teil einer SQL 'SELECT'-Anfrage wirklich nicht gültig! Dieser ist ein Beispiel für parameterisierte Eigenschaften , wie sie an einigen Stellen der Demonstrations-Datenbank 'Orders' verwendet werden. Kurzum, wird ein Formular(oder Bericht) ausgeführt, die Text der Form '${name}' enthalten, werden diesen Text durch den Werte des Parameters 'name' ersetzen, wenn dieser definiert ist. In diesem Beispiel zeigt er die Möglichkeit, ein Formular mit einem Filter auszuführen, um nur die Kunden auszusuchen, die den Kriterien entsprechen. Wir kommen im Handbuch nachher noch auf das ganze Gebiet der Parameter zurück. 


EIN NEUES FORMULAR ERZEUGEN: DER BLOCK-DIALOG

Der dritte und letzte Dialog fragt nach Information darüber, wie Daten angezeigt und behandelt werden, dies ist der Block-Dialog. Kurzgesagt, Formulare werden aus verschachtelten Blöcken konstruiert, wobei jeder Block Daten anzeigt, die aus irgeneiner Stelle in der Server-Datenbank gewonnen wurden. Beispielsweise ist die klassische Formular/Unterformular-Anordnung durch einen Äusseren und einen inneren Block dargestellt. Das Formular ist selbst ein Block, der Block-Dialog erscheint.

### BILD: Formular (4) 'Block' ###

Eigenschaft		Bedeutung			Einstellung
....................................................................
Width			Formular(block)breite			500
			in pixel

Height			Formular(block)höhe			400
			in pixel

Row count		Anzahl der anzuzeigenden 		1
			Datenreihen; 0 wird abhängig 
			von der Blockgröße mehrfache 
			Reihen anzeigen

x-delta			X-Offset zwischen Daten-		0
			steuerelementen wenn mehr 
			als eine Reihe angezeigt wird. 
			Nicht wichtig, wenn nur eine 
			Reihe angezeigt

Y-delta			Y-Offset zwischen Daten-		20
			steuerelementen wenn mehr 
			als eine Reihe angezeigt wird. 
			Nicht wichtig, wenn nur eine 
			Reihe angezeigt

Control			Blockname zur Skript-		UnnamedForm
name			steuerung, hier nicht 
			von Belang

Show Scroll		Es gibt vier Möglichkeiten		Yes
Bar			eine Rollleiste und/oder ein 
			kleines Navigationswerkzeug 
			zu zeigen(oder zu verstecken) 

Automatic		Wenn auf 'Yes' gesetzt(standard)	Yes 
			dann werden Änderungen automatisch 
			gespeichert, wenn Sie zu einer 
			neuen Reihe gehen

Bis zu diesem Stadium wird in einem Eigenschafts-Dialog durch Drücken von Schaltfläche 'Verwerfen' die Formularerzeugung abgebrochen. Wird zum dritte Mal 'OK' geklickt, werden Sie zu der Stelle weitergeführt, an der ein leeres Formular erscheint.


STEUERELEMENTE ZUM FORMULAR HINZUFÜGEN

Ab diesem Stadium erscheint ein leerer Formularentwurf, auf dem Steuerelemente plaziert werden können. Rekall verwendet keine Werkzeugbox. Sämtliche Steuerelemente werden durch zeichnen einer Fläche mit der Maus hinzugefügt(d.h. das heißt Mauszeiger an einen Punkt setzen, linke Maustaste drücken und halten, an einem anderen Punkt bewegen und loslassen) und dann durch Verwendung des erscheinenden Popup-Menüs wenn die rechte Maustaste gedrückt wird. Lassen Sie uns beginnen für jede Tabellenspalte - außer dem Primärschlüssel(den der Anwender nicht sehen muß) - ein Steuerelement einzufügen.

Eine vollständige Liste aller verfügbaren Steuerelemente und deren Eigenschaften wird im Handbuch später gezeigt, die Tabelle unten ist eine Basisliste.

Steuerelement		Beschreibung
...................................................
Button			Drückbare Schaltfläche. Zum auslösen 
			von Pythonskripten um Aktionen durchzuführen

Label			Festgelegtes Textfeld, kann (nur) durch ein 
			Skript verändert werden

Field			Einfaches Textfeld zur Anzeige und zum eintragen

Choise			Pickt einen Wert aus einer Liste heraus.
			Als Kombinationsfeld angezeigt.

Link			Pickt einen Wert aus einer Liste heraus,
			ist mit Werten einer anderen Tabelle verknüpft.

Check			Auswahl 'Ein'/'Aus', wird als Checkbox gezeigt

Pixmap			Verwendet um Bilder anzuzeigen. Zeigt allgemeine 
			Formate wie  .bmp, .jpg und .png

Row Mark		Verwendet um Reihennummern und laufende 
			Reihenmarkierungen zu zeigen, wie in der 
			Tabellendaten-Ansicht

Memo			Steuerelement zur Mehrzeilenbearbeitung von Text

Rich Text		Zeigt Text im QT Rich Text Format an
			(ein stark abgespecktes HTML-Format)

Spin Box		Zeigt ein numerisches Drehfeld-Steuerelement an
			z.Z. auf einfache Zahlenanzeige beschränkt

Graphic			Das zeigt eine Grafik wie z.B. ein Pixmapbild an.
			Das Bild ist statisch und dient nur als Augenschmaus

Tab Control		Bietet Möglichkeiten ein Mehrseiten-Steuerelement
			zu basteln, also ein Element das mit einzelnen Reitern zeigt

Wird das Gitter-Werkzeug rechts auf der Werkeugleiste eingeschaltet, werden die Steuerelemente auf ein Raster springen, was im allgemeinen deren Entwurf erleichtert. Sie sollten auch beachten das Formulare als Vorgabe festgelegte Layouts verwenden.
Dennoch kann Rekall Größenänderungen beschränkt unterstützen(was Sie vielleicht im Tabellenentwurfs- und Anzeigefeld[17] bemerkt haben) dies wird später erläutert.

Wenn das Popup-Menü erscheint, können Sie den gewünschten Typ des Steuerelements auswählen. Der jeweilige Menüinhalt wird genau davon abhängig sein, welche Sorte von Steuerelementen hinzugefügt werden können(es gibt Beschränkungen). Das Menü wird auch ein Untermenü 'Neuer Block' enthalten, das bei diesem Formular ignoriert werden kann.

Hier fügen wir nun Felder(die einfache Steuerelemente zu Zeilenbearbeitung sind) für jede Spalte hinzu; außer 'Salutation', das ein Combofeld sein wird. Zusätzlich gibt es zwei Bezeichnungsfelder die zu den Feldern gehören. Die zwei Tabellen unten zeigen Einstellungen für das erste Steuerelemente 'Feld' und des Combofelds.

Eigenschaft	Bedeutung				Einstellung
.............................................................
X-position	X-Koordinate des Felds 			140
Y-position    	Y-Koordinate des Felds   		20
Width		Feldbreite in Pixel			280
Height		Feldhöhe in Pixel			20

Comtrol name	Ein Name der das Steuerelement		Company
		im einschließenden Block identifiziert.
		Kann in Skripten benutzt werden.

Display		verwendeter Ausdruck in der SQL-Abfrage	Company
expression	der Daten für dieses Feld holt

Tab order	Wert der Aktivierungsreihenfolge, 	1
		wenn mit der Tab-Taste zwischen 
		Feldern gesprungen wird

Text		Textausrichtung im Feld			links
alignment		

Eigenschaft	Bedeutung				Einstellung
.............................................................
X-position	X-Koordinate des Combofelds		140
Y-position    	Y-Koordinate des Combofelds		50
Width		Combofeldbreite in Pixel		100
Height		Combofeldhöhe in Pixel			20

Comtrol name	Ein Name der das Steuerelement		Salutation
		im einschließenden Block identifiziert.
		Kann in Skripten benutzt werden.

Column	name	Ein Name der die Spalte			Salutation
		in der Tabelle identifiziert.
		deren Inhalt angezeigt wird.

Tab order	Wert der Aktivierungsreihenfolge, 	2
		wenn mit der Tab-Taste zwischen 
		Feldern gesprungen wird

Values		Eine Wertereihe die angeboten wird	Mr|Mrs|Miss
							Dr|Sir|Lord

Das folgende Bilschirmphoto zeigt das Formular nachdem alle diese Steuerelemente hinzugefügt wurden. Die Fangpunkte an den Ecken jedes Steuerelements dienen zu dessen Größenänderung oder Verschiebung(es können auch Elementgruppen auf diese Art verändert werden, wie ein wenig später näher erklärt wird). Die Rollleisten rechts und am Fenster unten können verwendet werden um den Fensterinhalt zu schwenken, im Falle das Sie ein Formular entwerfen möchten das tatsächlich größer als das Fenster ist. Die vertikale Rollleiste im Entwurfsbereich erscheint, wenn dies über die Eigenschaft 'Show Scroll Bar' gewählt wurde und kann in der Datenansicht nützlich sein(d.h. wenn das Formular tatsächlich läuft)um sich durch Datensätze zu bewegen. Das Rechteck im Entwurfsbereich unten links erscheint auch wenn das kleine Navigationswerkzeug ausgewählt wird und zeigt eine Datensatznummer, Datensatzzeile 42 von 126, plus Schaltfächen um das Bewegen zwischen Datensätzen zu erlauben.

### BILD: Formular (5) 'Form:Script:Client - Rekall' ###

Beim Doppelklicken auf ein Steuerelement kommt der zugehörige Eigenschaftsdialog zum Vorschein[18]. Rechtsklicken im Steuerelement(oder auf den Blockhintergrund) lässt ein Popup-Menü entsprechend dem Steuerelement oder was auch immer erscheinen, einschließlich Optionen um das Element auszuschneiden, zu kopieren oder zu löschen. Der Eigenschaftsdialog kann auch von diesem Menu aus erreicht werden. Falls es der Hintergrund ist, schließt dies auch Optionen ein um Steuerelement einzufügen.


STEUERELEMENTE POSITIONIEREN

Es gibt zwei Tastenkürzel mit denen man das Hinzufügen von Steuerelementen beschleunigen kann. Nach dem Einsetztn eines Steuerelements werden sein Fangpunkte rot(aktiv)sein. Wenn Sie auf den Hintergrund rechtsklicken und ein neues Steuerelement beim Halten der Shift-Taste auswählen, dann wird das neue Element die gleiche Größe haben und sich ein wenig unterhalb des aktiven Elements befinden(ohne Shift wäre es rechts davon). Das neu erstellte Steuerelement wird dann aktiv werden und das bisherige wird grün markiert sein(der Nachfolger). Wenn Sie jetzt rechts klicken und ein Element auswählen ohne sich mit der Shift-Taste zu plagen, wird es mit einem Abstand positioniert, der gleich dem der vorhergehenden Steuerelemente ist. Das erlaubt Ihnen sich ziemlich schnell an einer Spalte hinunter zu hangeln(oder quer zu einer Reihe).

Größenänderung und Ausrichtung der Steuerelements können entweder mit Hilfe der Maus ausgeführt werden, oder Sie können durch Öffnen ihrer Eigenschafts-Dialoge Position und Größe explizit bearbeiten. 