430 likes | 614 Views
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
E N D
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) • 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) • Header mit Strukturinformation
Ö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
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 Tabellen
REPLACE (FOR) SET FILTER TO FILTER( ) LOCATE FOR FOUND( ) APPEND FROM Array COPY TO Array IMPORT EXPORT SCATTER GATHER Arbeiten mit Datensätzen
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
Tabelle: Header( ) Reccount( ) Recsize( ) Felder: Fcount( ) Field( ) Namen u.ä.: DBF( ) CDX( ) Lupate( ) (2 B.!) Klauseln: Key( ) For( ) Weitere Funktionen
Indizes und Relationen Arbeiten mit Indizes und mit Relationen unter Microsoft Visual FoxPro
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 Grundlagen
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( ) Arbeiten mit Indizes
Indexarten • PRIMARY - Primärschlü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 • 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
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 Probleme mit Indizes
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.)
SET RELATION SET SKIP Relation( ) Target( ) Hinweise: Umgebungsfenster SET RELATION TO RECNO( ) Alternatives Anwendungs-beispiel Alternative: SQL-Joins Alternative: SET KEY RANGE Arbeiten mit Relationen
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
Optimierung 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 mitSYS(3054,1/11) <==
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 Optimierbare Befehle (FOR!)
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 Hardware-Optimierung
Multiuser-Programmierung Arbeiten im Netzwerk und Multiuser-Programme mitMicrosoft Visual FoxPro
Sperrmöglichkeiten • Öffnen im SHARED-Modus • RECORD LOCK - Satzsperre • Einzelsatz, mehrere Sätze • FILE LOCK - Dateisperre • HEADER LOCK - Headersperre • EXCLUSIVE - exklusives Öffnen
FILE LOCK: FLOCK( ) IsFLocked( ) HEADER LOCK: LOCK RECORD 0 UNLOCK REC 0 RECORD LOCK: RLOCK( ) IsRLocked( ) UNLOCK RECORD EXCLUSIVE: USE EXCLUSIVE IsExclusive( ) Sperrbefehle im Netzwerk
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!) Automatisches Sperren
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 Sperren auch beim Lesen
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
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 Server im Vergleich
Verzeichnisse / LLFF Arbeiten mit Verzeichnissen und Low-Level-Dateien in Microsoft Visual FoxPro
HOME( ) CURDIR( ) DISKSPACE( ) DIRECTORY( ) GETDIR( ) GETFILE( ) LOCFILE( ) PUTFILE( ) CD (CHDIR) MD (MKDIR) RD (RMDIR) SET DEFAULT SET PATH Navigieren in Verzeichnissen
FCREATE( ) FOPEN( ) FCLOSE( ) FSEEK( ) FEOF( ) FCHSIZE( ) FFLUSH( ) LowLevel-Dateifunktionen • 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 Methodische Software-Entwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175