[ 1 ] [ 2 ]

Der Database-Designer

Der Database-Designer sollte eigentlich die Datenmodellierungs-Zentrale von VFP sein, doch leider wird er dieser Anforderung nur sehr wenig gerecht. Eine nicht allzu übersichtliche Darstellung und mangelnde Datenbank-Design-Fähigkeiten fallen deutlich hinter den Möglichkeiten zurück, die die VFP-Datenbank-Engine bietet. Die beste Empfehlung an dieser Stelle ist der Einsatz des Datenbank-Case-Tools "xCase" (siehe Vendor-Room), welche eine komplette Entity-Relationship-Modellierung erlaubt und und keine redundanten Definitionsschritte erfordert.

Die wichtigste Neuerung im Datenbankdesigner gegenüber VFP 3.0 ist die Multuser-Fähigkeit. Ein Datenbank-Container kann jetzt SHARED geöffnet und damit von mehreren Entwicklern zugleich bearbeitet werden (siehe auch Session E-TEAM). Allerdings kann ein konkretes Objekt (Tabelle, View, Connection) immer nur von einem Entwickler verändert werden. Außerdem können einige Eigenschaften weiterhin nur geändert werden, wenn der DBC exklusiv geöffnet ist (z.B. der RI-Code).

Zur Verbesserung des Überblicks im Datenbank-Designer sind einige Funktionen zum "Ordnung machen" auf der Designer-Arbeitsfläche eingebaut worden:

Außerdem wurden die einzelnen Objekte (Tabellen, Views usw.) mit spezifischen Icons versehen, die die Unterscheidung der Objekt-Arten erleichtert.

Auf die Veränderungen der anderen zum Datenbankdesigner gehörenden Tools (Tabellen-, View- und Connection-Designer) wird in separaten Punkten eingegangen.

Eine äußerst wichtige Neuerung betrifft die Arbeit mit den Validation Rules (siehe Abschnitt "Table-Designer").

Für detaillierte Informationen zum Database-Designer sei auf die Session D-DATA verwiesen.

Ein vergleichbares Tool hat in FoxPro für Windows 2.6 nicht existiert.

Der Table-Designer

Der Table-Designer dient dem Erstellen und Verändern von Tabellen (DBF-Dateien). Visual FoxPro 5.0 unterscheidet "free tables" (DBF-Dateien der herkömmlichen Manier) und "database related tables" (DBF-Dateien, die zu einem Datenbank-Container gehören). Die meisten neuen Features der VFP-Datenbank-Engine stehen nur für "database related tables" zur Verfügung (siehe auch Punkt "Die Datenbank-Engine" des vorliegenden Dokuments).

Als Datentypen stehen zur Verfügung:

>Field type >Description >Size >Range
Character Any text 1 byte per character to 254 Any characters
Currency Monetary amounts 8 bytes  – 922337203685477.5808 to 922337203685477.5807
Date Chronological data consisting of month, year, and day 8 bytes 01/01/100 to 12/31/9999
DateTime Chronological data consisting of month, year, day, and time 8 bytes 01/01/100 to 12/31/9999, plus 00:00:00 a.m. to 11:59:59 p.m.
Logical Boolean value of true or false 1 byte True (.T.) or F
Numeric Integers or fractions 8 bytes in memory;

1 to 20 bytes in table

– .9999999999E+19 to .9999999999E+20
Double A double-precision floating-point number 8 bytes +/–4.94065645841247E-324 to +/–8.9884656743115E307
Float Same as Numeric 8 bytes in memory;

1 to 20 bytes in table

– .9999999999E+19 to .9999999999E+20
General Reference to an OLE object 4 bytes in table Limited by available memory
Integer Integer values 4 bytes –2147483647 to 2147483646
Memo Reference to a block of data 4 bytes in table Limited by available memory
Character (Binary) Any character data you want to maintain without change across code pages 1 byte per character to 254 Any characters
Memo (Binary) Any memo field data you want to maintain without change across code pages 4 bytes in table Limited by available memory

Neben den eigentlichen Feldeigenschaften wie Name, Datentyp und Feldlänge können eine ganze Reihe weiterer Eigenschaften bestimmt werden:

>Bezeichnung >Bemerkungen
Caption Klartextbezeichnung des Feldes (darf auch Leerzeichen enthalten): findet als Spaltenüberschrift im BROWSE-Fenster Verwendung kann über GETPROP() programmatisch abgefragt und weiterverarbeitet werden
Format,

InputMask

Format-Einstellungen (Nachkommastellen usw., bei Drag&Drop-Operationen automatisch übernehmbar)
DisplayClass,

DisplayLibrary

Klasse, die beim Drag&Drop automatisch für die Darstellung des Controls verwendet werden soll
Field validation rule logischer Ausdruck oder userdefined function (UDF) zur Validierung des betreffenden Feldes
Field validation message Zeichenketten-Ausdruck oder userdefined function (UDF) zur Erzeugung des anzuzeigenden Fehlertextes, wenn die Validierung verletzt wird
Default value Ausdruck oder userdefined function (UDF) zur Ermittlung der Standardwertes des betreffenden Feldes (wird z.B. bei APPEND BLANK benutzt)

In Visual FoxPro existieren vier Arten von Indizies:

>Index-Typ >Bemerkungen
regular normaler Index (wie bisher unter FoxPro für Windows 2.6 üblich)
unique dieser Indextyp existiert auch schon in FoxPro für Windows, hatte aber schon damals einen heftigen Bug (keine automastische Erneuerung beim Löschen von Datensätzen) und sollte deshalb heftig gemieden werden
candidate dieser Index ist ein eindeutiger Index, dessen Eindeutigkeit von VFP überwacht wird
primary analog dem candidate-Index (genau einer der candidate-Indizies einer Tabelle kann zu Organisationszwecken zum primary-Index erklärt werden)

Die Länge eines Index-Schlüssels ist auf maximal 240 Zeichen begrenzt (INDEX ON LEFT( xyz, 255 ) ist also nicht zulässig). Die Länge des Index-Schlüssel halbiert sich auf 120, wenn mit DoubleByte-Collate-Sequenzen gearbeitet wird.

Zusätzlich zu den feldbezogenen Eigenschaften und den Indizies existieren einige wichtige datensatz-bezogene Eigenschaften:

>Bezeichnung >Bemerkungen
Record validation rule logischer Ausdruck oder userdefined function (UDF) zur Validierung des betreffenden Datensatzes
Record validation message Zeichenketten-Ausdruck oder userdefined function (UDF) zur Erzeugung des anzuzeigenden Fehlertextes, wenn die Validierung verletzt wird
Insert trigger userdefined function (UDF), die automatisch immer beim Anlegen eines Datensatzes abgearbeitet wird (unabhängig davon, auf welchem Weg der Datensatz entstanden ist)
Update trigger userdefined function (UDF), die automatisch immer beim Ändern eines Datensatzes abgearbeitet wird
Delete trigger userdefined function (UDF), die automatisch immer beim Löschen eines Datensatzes abgearbeitet wird

In die Trigger trägt auch Visual FoxPro auf Wunsch Aufrufe von Funktionen ein, die die "refential integrity" einer Datenbank überwachen und z.B. verhindern können, daß ein Kunde gelöscht wird, zu dem noch offene Rechnungen existieren. Die hierzu notwendigen Programm-Quelltexte werden entweder durch den Referential-Integrity-Builder von nVFP oder z.B. durch xCase (siehe oben) erzeugt und in den sogenannten "stored procedures" abgelegt.

Die "stored procedures" sind direkt in der Datenbank gespeicherter FoxPro-Quelltext, der in jeder beliebigen Programmsituation zur Verfügung steht (unabhängig von gesetzten Prozedur- und Klassenbibliotheks-Dateien).

Neu in Visual FoxPro 5.0 ist das sogenannte "field mapping". Diese Funktionalität wird über die Page "Field mapping" unter "Tools \ Options" gesteuert. Dort kann man generelle Festlegungen für solche Drag&Drop-Operationen treffen:

Legt man im Table-Designer für ein Datenbankfeld explizit eine selbstdefinierte Klasse fest, so wird dadurch die allgemeinere Einstellung aus "Tools \ Options" überschrieben.

Außerdem wird bei den Drag&Drop-Operationen auch die unterschiedliche Zeichenanzahl der Datenbankfelder beachtet und in unterschiedliche Breiten der jeweiligen Controls umgesetzt.

Der optischen Umgestaltung des Tabledesigners ist leider die eigentlich wichtige Anzeige zum Opfer gefallen, welches Datenbankfeld gerade aktiv ist. Deshalb ist zu noch größerer Aufmerksamkeit zu raten bei der Vergabe von Feld-Eigenschaften, damit diese dann auch dem richtigen Feld zugeordnet sind.

Ein wesentliche Neuerung ist die Tatsache, daß in den Validations Rules jetzt auch Veränderungen an den zu prüfenden Daten vorgenommen werden können!

In der Satz-Validierung der Customer-Tabelle kann z.B. die Zeile "REPLACE Title WITH UPPER(Title)" stehen, welche dazu führt, daß im Feld "Title" unabhängig von der Eingabe oder von anderen REPLACE-Befehlen immer nur Großbuchstaben gespeichert werden. Plaziert man den Befehl "REPLACE Title WITH UPPER(Title)" allerdings in der Validation-Rule des Feldes "Title", dann muß man sich mit zusätzlichen Maßnahmen gegen die dabei auftretende Rekursion absichern.

Zu beachten ist allerdings, daß dieses Verhalten nur für Validation Rules gilt, nicht für Trigger!

Alles in allem ist der Table-Designer eine folgerichtige Weiterentwicklung des bekannten MODIFY-STRUCTURE-Dialogs.

Zur Verarbeitung von FPW2.6-DBF-Dateien ist folgendes zu beachten:

Diese Dateien können ohne jedwede Konvertierung von Visual FoxPro gelesen und auch geschrieben werden, ohne daß sie dadurch für FoxPro für Windows 2.6 unbenutzbar werden.

FPW2.6-DBF-Dateien werden dann automatisch und ohne Warnung unbenutzbar:

wenn eine solche Tabelle in einen Datenbank-Container integriert wird

wenn Strukturänderungen vorgenommen werden, die auf Möglichkeiten zurückgreifen, die in FoxPro für Windows noch nicht vorhanden waren (neue Daten- oder Index-Typen, Nullwertunterstützung usw.)

Die View-Designer

Die View-Designer in VFP 5.0 bieten eine Reihe von Erweiterungen, die schon in anderen Zusammenhängen erwähnt wurden:

Desweiteren wurde der VIEW-Typ "OFFLINE-View" eingeführt, der ein zeitweiliges von der eigentlichen Datenquelle unabhängiges Arbeiten erlaubt (siehe Sessions der Sektion DATA).

Wie schon VFP 3.0 unterstützt auch VFP 5.0 das ODBC-Level 3, auch für VFP 5.0 - Datenbanken existiert ein ODBC-Treiber.

Der View-Designer von Visual FoxPro 5.0 hat große Ähnlichkeit mit dem Query-Designer von FoxPro für Windows 2.6. Im Gegensatz zu diesem wird aber in VFP5.0 kein Quelltext generiert, sondern in der Datenbank ein updatable View angelegt, der wie eine DBF-Datei mit USE geöffnet und mit (fast) allen für Tabellen verfügbaren Befehlen verarbeitet werden kann (also auch mit REPLACE, INSERT, DELETE, APPEND usw.!).

Der Editor

Der Programm-Editor von Visual FoxPro 5.0 hat eine ganze Menge an Funktionalität hinzugewonnen, die sich zum Teil auch bei verwandten Fenstern (Command Window, Methoden-Editor) wiederfindet.

Die auffälligste Neuerung ist das Syntax Coloring, welches automatisch bestimmte Quelltext-Teile in verschiedenen Farben darstellt (die Einstellungen dazu kann man unter "Tools / Options" auf der Page "Syntax Coloring" vornehmen).

Alle anderen Neuerungen beziehen sich auf das Kontext-Menü, welches jetzt auch in Editorfenstern zur Verfügung steht:

Ingesamt ist der Editor durch diese Erweiterungen erheblich aufgewertet worden, sodaß kaum noch die Notwendigkeit besteht, einen externen  Editor einzusetzen.

Der Form-Designer

In diesem Abschnitt sollen sowohl die Neuerungen im Formdesigner als auch die neuen Möglichkeiten der programmtechnischen Arbeit mit Forms kurz erläutert werden.

Die wichtigen Neuerungen im Formdesigner betreffen alle die Verbesserung der Handhabung dieses Werkzeuges:

Alles in allem unterscheidet sich der Formdesigner in seiner Grundphilosophie nicht wesentlich von dem Äquivalent aus FoxPro für Windows 2.6. Hinzugekommen sind lediglich die OOP-Spezifika sowie eine Unmenge von Methoden und Properties für die einzelnen Objekte (für den Umgang mit diesen Dingen sei auf die Sessions der Sektionen OOP und SOFT sowie auf die Session D-EINS verwiesen!).

Im programmatischen Umgang mit Forms ergeben sich drei wesentliche Neuigkeiten:

Mit dem Single Document Interface SDI hat man die Möglichkeit, vom VFP-Desktop unabhängige Fenster zu definieren, die dann als selbständige Desktops agieren können. Die Leistungsfähigkeit solcher SDI-Fenster geht weit über den Effekt des "Desktop"-Property von VFP 3.0 hinaus. SDI-Fenster können andere Fenster beinhalten, können ein eigenes Menü und eigene Toolbars haben.

Daraus ergeben sich folgende neue Möglichkeiten:

Die Programmierung von SDI-Forms ist allerdings nicht ganz ohne Hürden, da man eine genau abgestimmte Einstellung der Properties "ShowWindow", "DeskTop", "MDIForm" und "WindowType" sowie von _SCREEN.Visible benötigt, um die gewünschten Effekte zu erreichen; wie der nachfolgende Ausschnitt aus der README.HLP zeigt:

Creating Modal and Modeless SDI and MDI Forms

To create modal or modeless SDI and MDI forms, you must set three properties; the documentation discusses only two.

The following table illustrates the combination of form properties you set to arrive at different types of forms: modal and modeless forms, as both MDI and SDI windows. In the table, “Traditional” refers to an application like that created in Visual FoxPro 3.0, in which the Visual FoxPro main window serves as the desktop. In an MDI application, the form is a child window of a form called WindMain, which serves as the desktop. An SDI application features a floating form.

Application Style Modal form Modeless form Desktop
Traditional ShowWindow = 0

DeskTop = .F.

WindowType = 1

ShowWindow = 0

DeskTop = .F.

WindowType = 0

_SCREEN.Visible = .T.

(_SCREEN serves as the desktop)

MDI ShowWindow = 1

DeskTop = .F.

WindowType = 1

ShowWindow = 1

DeskTop = .F.

WindowType = 0

_SCREEN.Visible = .F.

WindMain.ShowWindow = 2

WindMain.WindowType = 0

(The custom form WindMain serves as the desktop)

SDI (TopLevel) ShowWindow = 1

DeskTop = .T.

WindowType = 1

ShowWindow = 2

WindowType = 0

_SCREEN.Visible = .F.

(No desktop form; the Windows desk­top is the dekstop for the application)

Zitat Ende

Auch der Umgang mit Menüs in SDI-Forms ist etwas trickreich, da der Menügenerator für solche Menüs z.B. die Option "Anfügen" bzw. "Einfügen" urspünglich nicht unterstützte (mittlerweile gibt es einen aktuelleren GENMENU.PRG).

ShortCut-Menüs sind eine neue Option im Menüdesigner. Damit erstellt man Popups, die über den RightClick-Event als Kontextmenüs aktivierbar sind (im WIN95 - Look & Feel).

Wichtige neue Properties im Zusammenhang mit der Arbeit mit Forms sind:

Weitere Neuerungen sind der Übersicht "Neue und erweiterte Sprachelemente von Visual FoxPro 5.0" am Ende dieses Artikels bzw. der Begleitdiskette zu entnehmen.

Der Debugger

Der Debugger in Visual FoxPro 5.0 ist nicht mehr wiederzuerkennen. Statt des alten DEBUG- bzw. TRACE-Fensters existieren jetzt fünf Fenster, die man entweder als Toolbars innerhalb seiner Applikation oder in einem separaten, von der Applikation unabhängigen Fenster sichtbar machen kann (welches dann auch als eigenständige Task zu erreichen ist):

Außerdem wurden die Möglichkeiten der BreakPoint-Definition wesentlich erweitert (auch im Programmquelltext!). Weiterhin sind EventTracking (erlaubt das Verfolgen und Protokollieren der Abarbeitung von Events) und Coverage-Logging (Protokollierung der Programm-Abarbeitung zur Analyse der Performance eines Programms) hinzugekommen.

Einmal definierte Einstellungen können in sogenannten Debugging Sessions gespeichert und bei Bedarf wieder restauriert werden.

Desweiteren wird innerhalb des Debuggers ein weitreichendes Drag&Drop unterstützt (z.B. vom Trace- zum Watch-Fenster).

Erweiterungen der VFP-Programmiersprache im Zusammenhang mit dem Debugger sind _COVERAGE, ASSERT, CLOSE DEBUG, DEBUG, DEBUGOUT, SET ASSERTS, SET COVERAGE, SET DEBUGOUT, SET EVENTLIST, SET EVENTTRACKING.

Für ausführliche Informationen zu diesem Thema sei auf die Session D-BUG verwiesen.

Alle hier beschriebenen Neuerungen sind auch für Aufsteiger von FoxPro für Windows 2.6 relevant, da der Debugger aus VFP3.0 immer noch dem von FPW2.6 entsprach!

Neue und verbesserte Wizards

Neue Wizards in Visual FoxPro 5.0 sind:

Erweitert oder verbessert wurden folgende Wizards: