Datenbankcontainer Datenbankcontainer in Microsoft Visual FoxPro Wizards & Builders GmbH Diese Schulung dient zur Einführung der Schulungsteilnehmer in die Arbeit mit Datenbankcontainer (im Vergleich zu Einzeltabellen) in Visual FoxPro Wizards & Builders GmbH Themenübersicht Datenbankcontainer (Sinn/Struktur) Arbeiten mit dem Datenbankcontainer Grundbefehle des Datenbankcontainers Tabellen und Felder im DBC Buffering und Buffermode Transaktionen Referentielle Integrität Trigger (Insert, Update, Delete, Fehler) Wizards & Builders GmbH Datenbankcontainer Datenbankcontainer fassen „freie Tabellen“ zu einer Datenbank zusammen und verwalten die Metadaten Wizards & Builders GmbH Datenbankcontainer Ein DBC ist kein Data-Dictionary! Tabellenstrukturen im DBF-Header Indexstrukturen im CDX-Header Verwaltet Zusatzinformationen zu Feldern und Tabellen (nicht „freie“ Tabellen) Verwaltet persistente Relationen Verwaltet referentielle Integrität Wizards & Builders GmbH Logische Bestandteile rules / triggers tables relations connections local views stored procedures remote views indexes Wizards & Builders GmbH Physische Bestandteile FPT1 DBF1 CDX1 DBC DCT DCX CDXn DBFn DBF2 FPTn FPT2 CDX2 Wizards & Builders GmbH Arbeiten mit dem DBC Anlegen einer Tabelle Feldeigenschaften Anlegen einer Relation (Drag & Drop) Anlegen einer Ansicht (View) Feldeigenschaften Anlegen einer Verbindung (Connection) Anlegen einer Remote Ansicht (View) Wizards & Builders GmbH Tabellen im DBC CREATE TABLE ALTER TABLE ADD TABLE REMOVE TABLE FREE TABLE (!) CLOSE TABLE INDBC( ) VALID RULE VALID TEXT CAPTION COMMENT UPD TRIGGER () INS TRIGGER () DEL TRIGGER () Wizards & Builders GmbH Felder im DBC FORMAT MASK CAPTION VALID RULE VALID TEXT DEFAULT CLASS CLASSLIBS COMMENT Optionen beachten! (Klassenzuordnung) Wizards & Builders GmbH Validierungen Feld-Ebene: VALID-Funktion Fehlermeldung Wahlweise Funktion oder Konstante Default-Wert dazu! Satz-Ebene: für Validierung über mehrere Felder ansonsten siehe FeldValidierung Trigger kommen als separates Thema Wizards & Builders GmbH Gespeicherte Prozeduren (1) Gehören imanent zu den Tabellen und wird als Prozedur-Datei gesetzt! Werden auch über ODBC ausgeführt! Verwendet für: Feld-Validierung, Feld-Fehlermeldung Satz-Validierung, Satz-Fehlermeldung Feld-Default-Wert Trigger-Aufrufe Wizards & Builders GmbH Gespeicherte Prozeduren (2) Kompilate in DBC-Datensatz sind versionsabhängig (VFP 3.0, 5.0 / 6.0) - d.h. Neukompilieren (!) ggf. ausgelagerte Prozedurdatei verwenden Tabellen/Felder finden „richtige“ Prozedurdatei - eigene Anwendung verwendet aber nur aktiven DBC! Set database to Namenskonventionen für DBC-Funktionen! Wizards & Builders GmbH Views im DBC Felder (Ausdrücke) Verknüpfung Filter Sortierung Gruppierung Aktualisierung Verschiedenes Schlüssel setzen Felder setzen SQL-Update setzen Where-Klausel Schlüssel änderbar! Feldeigenschaften! Wizards & Builders GmbH Struktur des DBC OBJECTID PARENTID OBJECTTYPE => OBJECTNAME PROPTERY (M) CODE (M) RIINFO USER (M) Objekt-Typen: DATABASE TABLE FIELD INDEX VIEW CONNECTION Wizards & Builders GmbH Grundbefehle DBC (1) CREATE DATA OPEN DATA MODIFY DATA CLOSE DATA DELETE DATA PACK DATA sortiert Schlüssel neu! VALIDATE DATA SET DATA TO Achtung: Projektmanager kann DBC offenhalten! Info-Funktionen: DBC() DBUSED() Zeigt manche Fehler nur! Wizards & Builders GmbH Grundbefehle DBC (2) Anzeigefunktionen: LIST DATABASE LIST TABLES LIST VIEWS LIST CONNECTIONS LIST PROCEDURE Sonstige Funktionen: ADATABASES( ) ADBOBJECTS( ) Eigenschaften ändern: DBGETPROP( ) DBSETPROP( ) Wizards & Builders GmbH DbGetProp( ) / DbSetProp( ) Datenbanken Tabellen Felder in Tabellen Ansichten Felder in Ansichten Verbindungen Wizards & Builders GmbH Strukturänderungen Eigenlösungen: Neuen DBC mit geänderten Tabellen versenden SQL Alter TableBefehl versenden Fremdlösungen: XCASE-Zusatztool SDT-Zusatztool (Stonefield Database Toolkit) Keine Primary Keys in VFP 3.0 / VFP 5.0 ! Wizards & Builders GmbH Hinweise zum DBC Separates Datadictionary notwendig für Reindizierung od. Neuerzeugung wahlweise Eigenbau, XCase oder Stonefield wahlweise GENDBCX als Minimal-Lösung Tabellen und DBC sind eine Einheit Immer zusammen sichern / ändern FREE TABLE mit Vorsicht! Wizards & Builders GmbH Buffering Buffering dient zur Zwischenspeicherung von Änderungen Wizards & Builders GmbH Prinzip des Buffering Methode zum automatischen Puffern von Daten zwischen einer Eingabe-Maske und der DBF-Datei auf der Festplatte OLDVALPuffer DBFDatei EingabeMaske DatenPuffer Wizards & Builders GmbH Tablebuffering TABLEREVERT() TABLEUPDATE() CURSOR-GETPROP() CURSOR-SETPROP() CURVAL() OLDVAL() GETNEXT-MODIFIED() GETFLDSTATE() SETFLDSTATE() Wizards & Builders GmbH Tableupdate / Tablerevert Parameter für Tableupdate( ) --.T. 2 .T. Einzelsatz bis 1. Fehler alle die gehen Forced Update Parameter für Tablerevert( ) Einzelsatz Alle Änderungen Schließen = Revert! Wizards & Builders GmbH Buffermode Buffermodes: 1-None 2-Pessimistic Row 3-Pessimistic Table 4-Optimistic Row 5-Optimistic Table Row: Skip = Update (!) Optimistic: Record changed! Curval/Oldval() GetFldState() Table-Buffering: Getnextmodified() Wizards & Builders GmbH Funktionen im Einsatz Beispiele: ? GetFldState(-1) != Repl(„1“,Fcount()+1) ? Left( GetFldState(-1),1) != „1“ Goto ( GetNextModified( Recno() ) ) ? Field( At( „2“, GetFldState(-1) ) ) ? SetFldState( „Feld“, 1 ) && Views! Achtung: Negative Record-Nummern! Wizards & Builders GmbH Reihenfolge Tabellenfeld-Valid (alle Felder) Masken-Valid (aktuelles Element) Datensatz-Valid(ierung) Primary/Candidate-Schlüssel Trigger kaskadierend über alle Childs Achtung: _TRIGGERLEVEL kann hoch werden Wizards & Builders GmbH CursorGetProp( ) / CSetProp( ) Allgemein: Buffering (ein- /ausschalten, abfragen, Wert 1-5) Caption (Auslesen Text für Feldlabel zur Laufzeit) nur für Views (Auch im View-Designer): CompareMemo Updatable Updatable Field List Where Type Wizards & Builders GmbH Vorsicht Falle! Allgemeine Probleme: GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld verlassen! SetFldState( ) bei Views mit Requery() Table changed im View-Designer sofern alle Felder gewählt wurden (*) Sonderfall: Buffered Views auf Buffered Tables! Row: Fehler erst beim nächsten Satz! Tablerevert: Revert im View versagt Primary Key doppelt: Letzter gilt! Wizards & Builders GmbH Transaktionen Transaktionen dienen dem vollständigen Abspeichern einer Gruppe von Datensätzen Wizards & Builders GmbH Transaktionen BEGIN TRANS *-- Datenzugriff END TRANS ROLLBACK Absturz = Rollback Rollback bei Öffnen! TXNLEVEL() bis 5 Ebenen tief! Äußerste Ebene zählt! Experimente mit Transaktionen: 1 Tabelle 2 Tabellen aus DBC Verschiedene DBCs Freie Tabellen Geschachtelt Task-Manager! Wizards & Builders GmbH Probleme bei Transaktionen Buffering eingeschaltet = Transaktion läuft nur auf Buffer und nicht auf Platte! Buffering ausgeschaltet = Transaktion läßt Einschalten Buffering nicht zu! Dadurch ggf. neue Sätze nicht anlegbar (Valid) Lösung möglicherweise Buffering mit Tableupdate und dann END TRANS Freie Tabellen ohne Meldung! Deadlocks möglich - Zugriffsreihenfolge! Wizards & Builders GmbH Zugriffsreihenfolge (Deadlocks!) Tabellen nach Parent->Child Immer erst den Parent sperren notfalls per SQL-Select erst die Parents holen Datensätze nach Primärschlüssel notfalls per SQL-Select umsortieren Mehrere Parents ggf. alphabetisch sofern Parents nicht in Parent-Child-Beziehung Wizards & Builders GmbH Referentielle Integrität RI dient zur Wahrung der inhaltlichen Konsistenz Beziehungen zwischen Tabellen Wizards & Builders GmbH Referentielle Integrität (RI) Bedeutung der Referentiellen Integrität einer Datenbank Arbeiten mit dem Referential Integrity Builder Programmatisch: CREATE TRIGGER DELETE TRIGGER _TRIGGERLEVEL Arten von Triggern: DELETE UPDATE INSERT Wizards & Builders GmbH DELETE-Trigger Auslöser: DELETE-Befehl Verhalten: CASCASE Cascading Delete Nicht bei ZAP (!) sofern Parent vorh. Gefährlich!!! Nicht bei PACK (da Sätze gelöscht) RESTRICT IGNORE Wizards & Builders GmbH INSERT-Trigger Auslöser: APPEND FROM APPEND BLANK IMPORT INSERT-SQL RECALL (!) Verhalten: RESTRICT Child nur zu Parent IGNORE INSERT unzulässig Wizards & Builders GmbH UPDATE-Trigger Auslöser: GATHER REPLACE REPLACE FROM UPDATE-SQL Verhalten: CASCADE Schlüssel zu Childs Parentschlüssel gesperrt RESTRICT IGNORE nicht bei DELETED() (!) Wizards & Builders GmbH Probleme mit Triggern Im Gegensatz zu FeldValid und Satz-Valid ist ein Triggerfehler ein endgültiger Fehler! Das heißt: VFP macht Rollback über alle Ebenen Probleme: Ändern von Daten! Update-Endlosschleife... Compound Keys Verschiedene DBCs Kein „Nullify“ für Delete von Parent Builder nicht ändern Wizards & Builders GmbH Fehlermeldungen 1539 Trigger failed 1=Ins, 2=Upd, 3=Del 1581 Field no NULL 1582 Field Rule 1583 Record Rule 1585 Change by A. 1700 Used by A. 1884 Unique index AERROR( ) Error() Message() Sys(2018) Select() Trigger-Art .NULL. .NULL. Weitere Elemente für ODBCFehlermeldungen Wizards & Builders GmbH Vielen Dank! Das waren die Themen: Datenbankcontainer Arbeiten mit DBC Grundbefehle DBC Tabellen und Felder Buffering Transaktionen Referentielle Integrität Trigger Wizards & Builders GmbH Wenn Fragen bestehen: Wizards & Builders Methodische SoftwareEntwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175 Wizards & Builders GmbH