Grundlagen der Tabellen von FoxPro/Windows und Microsoft Visual FoxPro Arbeiten mit Tabellen Grundlagen der Tabellen von FoxPro/Windows und Microsoft Visual FoxPro
Diese Schulung dient zur Angleichung des Basiswissens der Schulungsteilnehmer über die Grundlagen der Programmiersprache Xbase und der DBF- basierenden Datenbanksysteme.
Themenübersicht Tabellen Datensätze Indizes Relationen Codepages Collate-Sequenzen Rushmore-Optimierung Netzwerke Verzeichnisse Low-Level-Dateien
Tabellen und Datensätze Arbeiten mit Tabellen und Datensätzen unter Microsoft Visual FoxPro
Tabellenformat Tabellen (*.DBF) Memodateien (*.FPT) Header mit Strukturinformation Feste Feldlänge (außer Memo/General) und Feste Feldanzahl = Feste Satzlänge Referenz auf Memo- und Index-Datei Memodateien (*.FPT) Mehrfachindexdateien (*.CDX)
Öffnen von Tabellen USE DatabaseName.Table | SQL-View IN nWorkArea | cTableAlias [ONLINE], [ADMIN] (nur für Offline-Views) AGAIN NOREQUERY (nur Remote) / NODATA (nur Views) INDEX / ORDER TAG OF ASCENDING | DESCENDING (für Order) ALIAS EXCLUSIVE, SHARED NOUPDATE
Arbeiten mit Tabellen SKIP, SKIP -1 BOF(), EOF() SELECT() CREATE USE/USE IN/Used() ISREADONLY() APPEND BLANK EDIT / BROWSE DELETE / RECALL GO TOP/ BOTTOM GOTO, RECNO( ) SKIP, SKIP -1 BOF(), EOF() SELECT() DBF( ), ALIAS() EXCLUSIVE: PACK ZAP
Arbeiten mit Datensätzen REPLACE (FOR) SET FILTER TO FILTER( ) LOCATE FOR FOUND( ) APPEND FROM Array COPY TO IMPORT EXPORT SCATTER GATHER
Arbeiten mit Feldern Character / Zeichen Prefix: c (c) Character Binary Numeric / Zahl Prefix: n (n) Date / Datum Prefix: d (d) Logical / Logisch Prefix: l (l) Memofelder (Char) Prefix: m (c) Memo Binary General
Neue Feldarten Integer / Integer Prefix: i (n) Double / Doppelte G. Prefix: b (n) Float / Fließkomma Prefix: f (n) Currency / Währung Prefix: y (y) DateTime / DatumZeit Prefix: t (t) Character Binary / Memo Binary (s.o.) Feldlänge Memo / General von 4 Byte
Leere Felder / Nullwerte EMPTY( ) ISBLANK( ) ISNULL( ) SET NULL NVL( ) Beispiel: Statistik, Logik
Weitere Funktionen Tabelle: Header( ) Reccount( ) Recsize( ) Felder: Fcount( ) Field( ) Namen u.ä.: DBF( ) CDX( ) Lupate( ) (2 B.!) Klauseln: Key( ) For( )
Indizes und Relationen Arbeiten mit Indizes und mit Relationen unter Microsoft Visual FoxPro
Grundlagen Grundlagen: Separate Datei B-Baum Schlüssel 100 B. IDX/240 B. CDX Ausdruck 220 B. Kein Alltrim()! Ausdrücke Benötigt für: Rushmore-Optimierung Suchbefehle Relationen dito persistent Referentielle Integrität
Arbeiten mit Indizes SET ORDER TO ORDER( ) SEEK( ) SET KEY TO INDEX ON <Feldname> TO IDX | TAG [OF] [FOR <Bedingung>] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE] (kein PRIMARY) SET ORDER TO ORDER( ) SEEK( ) SET KEY TO KEYMATCH( ) LOOKUP( )
Indexarten PRIMARY - Primärschlüssel CANDIDATE - Eindeutiger Schlüssel nur in DBC, nicht in freien Tabellen CANDIDATE - Eindeutiger Schlüssel REGULAR - Normaler Schlüssel UNIQUE - „Einmaliger“ Schlüssel niemals NICHT VERWENDEN! Sinnvoll gelegentlich in Views Funktionen: Primary(), Candidate()
Primärschlüssel Real-World-Schlüssel Surrogate / Abstract -Schlüssel meist zusammengesetzt Änderungen immer möglich! Eindeutigkeit letztendlich nicht garantiert RI: Cascading Update notwendig! Surrogate / Abstract -Schlüssel fortlaufend selbst erzeugt (ggf. mit zentraler Tabelle) Datenmodell komplett erstellbar ohne Attribute RI: kein Cascading Update notwendig
Probleme mit Indizes Defekte Dateien: durch Strom-ausfall, Netz-werkproblem oder Abschalten REINDEX bzw. Neuerstellen ! Fehler: 5 - Satz außerhalb des Bereichs 20 - Satz nicht in Indexdatei 1707 - Index-datei fehlt! 114 - Index stimmt nicht mit Tabelle
Weitere Fehler mit Indizes 1884 - Index nicht eindeutig 1886 - .NULL. nicht zulässig 1124 - Schlüssel zu lang 1683 - Index nicht gefunden 1690 - UDF in Index auf Tabelle 1141 - falsche Indexdateiversion 23 - Indexausdruck zu lang 10 - Indexname zu lang (10 B.)
Arbeiten mit Relationen SET RELATION SET SKIP Relation( ) Target( ) Hinweise: Umgebungsfenster SET RELATION TO RECNO( ) Alternatives Anwendungs-beispiel Alternative: SQL-Joins SET KEY RANGE
Collate-Sequenzen/Codepages Arbeiten mit Collate-Sequenzen/Codepages mit Microsoft Visual FoxPro
Arbeiten mit Collate-Sequenzen SET COLLATE TO „<collate>“ Default „GENERAL“ (2 Byte, A=a!) Original „MACHINE“ (schnell!) Alternativ: „GERMAN“, „UNIQWT“ Sonstige: „DUTCH“, „ICELAND“, „NORDAN“, „SPANISH“, „SWEFIN“ Ggf. doppelte Index-Definition mit verschiedenen Collate-Sequenzen!
Probleme mit Collate Datei „FoxPro.Int“ nicht gefunden zukünftig evtl. in VFP eingebunden Collate „General“ und „German“ fehlerhaft Problem mit Integer, Double, Currency, Datetime Keine Rushmore-Optimierung bei gemischten Collate-Sequenzen IDXCOLLATE() für Kontrolle
Arbeiten mit Codepages 437, 850, 1252, 10000 CPCURRENT( ) CPDBF( ) CPCONVERT( ) veraltet: ANSITOOEM() OEMTOANSI() GETCP( ) CODEPAGE=auto SET NOCPTRANS Character Binary Memo Binary SET CPDIALOG SET CPCOMPILE
Fehler mit Collate/Codepage 1914 - Codepage ungültig (oder nicht in FOXPRO.INT-Datei) 1915 - Collate-Sequenz „<Name>“ nicht gefunden (FOXPRO.INT fehlt / fehlerhaft) 1916 - Codepage=AUTO in CONFIG.FPW einstellen
Rushmore-Optimierung und Hardware unter Microsoft Visual FoxPro
Rushmore-Optimierung Indexdefinition vorhanden Keine FOR/NOT-Klausel im Index Identische Indexdefinition zusammengesetzte Felder, Alltrim() Index auf Deleted() (bei SET DELE ON) Passende Collatesequenz (IDXCOLLATE) Keine Sortierung (SET ORDER TO) Keine Abfrage auf Empty( ) / IsBlank( ) Kein exakter Vergleich (SET EXACT/ANSI OFF/==) ==> Kontrolle mit SYS(3054,1/11) <==
Optimierbare Befehle (FOR!) AVERAGE DELETE / BLANK BROWSE CALCULATE CHANGE / EDIT COPY TO (ARRAY) COUNT LIST / DISPLAY EXPORT INDEX LOCATE RECALL REPLACE (ARRAY) LABEL / REPORT SCAN SORT SUM TOTAL
Hardware-Optimierung Festplatte: HD-Controller! Verteilung von DBF und CDX auf versch. Festplatten (nicht Partitionen !) Netzwerk: Mehrere Netzwerk-karten im Server User auf Stränge verteilen (z.B. 10 User/Strang) Userprofil
Multiuser-Programmierung Arbeiten im Netzwerk und Multiuser-Programme mit Microsoft Visual FoxPro
Sperrmöglichkeiten Öffnen im SHARED-Modus RECORD LOCK - Satzsperre Einzelsatz, mehrere Sätze FILE LOCK - Dateisperre HEADER LOCK - Headersperre EXCLUSIVE - exklusives Öffnen
Sperrbefehle im Netzwerk FILE LOCK: FLOCK( ) IsFLocked( ) HEADER LOCK: LOCK RECORD 0 UNLOCK REC 0 RECORD LOCK: RLOCK( ) IsRLocked( ) UNLOCK RECORD EXCLUSIVE: USE EXCLUSIVE IsExclusive( )
Automatisches Sperren FILE LOCK: ALTER TABLE INSERT (xBase) DELETE / REPLACE mit ALL/REST/NEXT x UPDATE (beide) HEADER LOCK: APPEND normal sowie mit BLANK / FOR INSERT (SQL) RECORD LOCK: APPEND MEMO DELETE / REPLACE / RECALL / BLANK so oder mit NEXT 1 DELETE / BLANK REC. GATHER CHANGE / EDIT MODI MEMO, READ BROWSE (Childs!)
Sperren auch beim Lesen Beim Verarbeiten von neben-stehenden Befehlen wird nicht gesperrt! SET LOCK ON oder FLOCK() sinnvoll! Besser: vorher SQL-Select in Cursor AVERAGE CALCULATE COPY TO (ARRAY) LIST / DISPLAY LABEL / REPORT SORT COUNT SUM TOTAL
Sonstige Netzwerkbefehle SET REFRESH - Neuanzeige sehr hohe Netzwerkbelastung bei BROWSE ! SET REPROCESS - Wiederholung SET MULTILOCKS - Mehrfachsperren SYS(3051) - Intervall Sperrversuche SYS(3052) - SET REPRO ausschalten SYS(0) - Rechnernummer im Netz SYS(2011) - alte Funktion wg. Status
Probleme mit Pufferung Problem: Änderung von Daten-sätzen durch andere Netz-User erst sichtbar durch/nach: SET REFRESH (problematisch) SKIP, GOTO, SEEK Satzsperre RLOCK Lösung: Beim Lesen 1x Sperren
Server im Vergleich Novell-Server: Schnelles Dateisystem Transaction Tracking (TTS) Directory Serv. Nur NLM/JVM Client-Fehler! NT-Server: Sicherheit nur mit NTFS (FAT) Server-Anwen-dungen! Remote OLE-Automation Backoffice
Verzeichnisse / LLFF Arbeiten mit Verzeichnissen und Low-Level-Dateien in Microsoft Visual FoxPro
Navigieren in Verzeichnissen HOME( ) CURDIR( ) DISKSPACE( ) DIRECTORY( ) GETDIR( ) GETFILE( ) LOCFILE( ) PUTFILE( ) CD (CHDIR) MD (MKDIR) RD (RMDIR) SET DEFAULT SET PATH
LowLevel-Dateifunktionen FCREATE( ) FOPEN( ) FCLOSE( ) FSEEK( ) FEOF( ) FCHSIZE( ) FFLUSH( ) FGETS( ) FPUTS( ) FREAD( ) FWRITE( ) FILE( ) (FULLP) FDATE/FTIME() (INI in Cursor)
Was ist zu bedenken? Korrekte Indexdefinition Probleme mit Codepages Probleme mit Collate-Sequenz Rushmore-Optimierung
Vielen Dank! Das waren die Themen: Tabellen Datensätze Indizes Relationen Codepages Collate-Sequenzen Rushmore Netzwerke Verzeichnisse Low-Level-Dateien
Wenn Fragen bestehen: Wizards & Builders Frankfurter Str. 21b Methodische Software-Entwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175