420 likes | 488 Views
Datenbankcontainer. Datenbankcontainer in Microsoft Visual FoxPro. Diese Schulung dient zur Einführung der Schulungsteilnehmer in die Arbeit mit Datenbankcontainer (im Vergleich zu Einzeltabellen) in Visual FoxPro. Themenübersicht. Datenbankcontainer (Sinn/Struktur)
E N D
Datenbankcontainer Datenbankcontainer inMicrosoft Visual FoxPro
Diese Schulung dient zur Einführung der Schulungsteilnehmer in die Arbeit mit Datenbankcontainer (im Vergleich zu Einzeltabellen) in Visual FoxPro
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)
Datenbankcontainer Datenbankcontainer fassen „freie Tabellen“ zu einer Datenbank zusammen und verwalten die Metadaten
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
Logische Bestandteile rules / triggers tables relations connections local views stored procedures remote views indexes
Physische Bestandteile FPT1 DBF1 CDX1 DBC DCT DCX CDXn DBFn DBF2 FPTn FPT2 CDX2
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)
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 () Tabellen im DBC
FORMAT MASK CAPTION VALID RULE VALID TEXT DEFAULT CLASS CLASSLIBS COMMENT Optionen beachten! (Klassenzuordnung) Felder im DBC
Feld-Ebene: VALID-Funktion Fehlermeldung Wahlweise Funktion oder Konstante Default-Wert dazu! Satz-Ebene: für Validierung über mehrere Felder ansonsten siehe Feld-Validierung Trigger kommen als separates Thema Validierungen
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
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!
Felder (Ausdrücke) Verknüpfung Filter Sortierung Gruppierung Aktualisierung Verschiedenes Schlüssel setzen Felder setzen SQL-Update setzen Where-Klausel Schlüssel änderbar! Feldeigenschaften! Views im DBC
OBJECTID PARENTID OBJECTTYPE => OBJECTNAME PROPTERY (M) CODE (M) RIINFO USER (M) Objekt-Typen: DATABASE TABLE FIELD INDEX VIEW CONNECTION Struktur des DBC
CREATE DATA OPEN DATA MODIFY DATA CLOSE DATA DELETE DATA PACK DATA sortiert Schlüssel neu! VALIDATE DATA Zeigt manche Fehler nur! SET DATA TO Achtung: Projektmanager kann DBC offenhalten! Info-Funktionen: DBC() DBUSED() Grundbefehle DBC (1)
Anzeigefunktionen: LIST DATABASE LIST TABLES LIST VIEWS LIST CONNECTIONS LIST PROCEDURE Sonstige Funktionen: ADATABASES( ) ADBOBJECTS( ) Eigenschaften ändern: DBGETPROP( ) DBSETPROP( ) Grundbefehle DBC (2)
DbGetProp( ) / DbSetProp( ) • Datenbanken • Tabellen • Felder in Tabellen • Ansichten • Felder in Ansichten • Verbindungen
Eigenlösungen: Neuen DBC mit geänderten Tabellen versenden SQL Alter Table-Befehl versenden Keine Primary Keys in VFP 3.0 / VFP 5.0 ! Fremdlösungen: XCASE-Zusatztool SDT-Zusatztool (Stonefield Database Toolkit) Strukturänderungen
Hinweise zum DBC • Separates Datadictionary notwendigfü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!
Buffering Buffering dient zur Zwischenspeicherung von Änderungen
Prinzip des Buffering Methode zum automatischen Puffern von Daten zwischen einer Eingabe-Maske und der DBF-Datei auf der Festplatte OLDVAL- Puffer DBF- Datei Eingabe- Maske Daten- Puffer
TABLEREVERT() TABLEUPDATE() CURSOR-GETPROP() CURSOR-SETPROP() CURVAL() OLDVAL() GETNEXT-MODIFIED() GETFLDSTATE() SETFLDSTATE() Tablebuffering
Parameter für Tableupdate( ) --- Einzelsatz .T. bis 1. Fehler 2 alle die gehen .T. Forced Update Parameter für Tablerevert( ) Einzelsatz Alle Änderungen Schließen = Revert! Tableupdate / Tablerevert
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() Buffermode
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!
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
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
Allgemeine Probleme: GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld verlassen! SetFldState( ) bei Views mit Requery() Table changedim 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! Vorsicht Falle!
Transaktionen Transaktionen dienen dem vollständigen Abspeichern einer Gruppe von Datensätzen
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! Transaktionen
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!
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
Referentielle Integrität RI dient zur Wahrung der inhaltlichen Konsistenz Beziehungen zwischen Tabellen
Programmatisch: CREATE TRIGGER DELETE TRIGGER _TRIGGERLEVEL Arten von Triggern: DELETE UPDATE INSERT Bedeutung der Referentiellen Integrität einer Datenbank Arbeiten mit dem Referential Integrity Builder Referentielle Integrität (RI)
Auslöser: DELETE-Befehl Nicht bei ZAP (!) Gefährlich!!! Nicht bei PACK(da Sätze gelöscht) Verhalten: CASCASE Cascading Delete RESTRICT sofern Parent vorh. IGNORE DELETE-Trigger
Auslöser: APPEND FROM APPEND BLANK IMPORT INSERT-SQL RECALL (!) Verhalten: RESTRICT Child nur zu Parent IGNORE INSERT unzulässig INSERT-Trigger
Auslöser: GATHER REPLACE REPLACE FROM UPDATE-SQL nicht bei DELETED() (!) Verhalten: CASCADE Schlüssel zu Childs RESTRICT Parentschlüssel gesperrt IGNORE UPDATE-Trigger
Im Gegensatz zu Feld-Valid 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 Probleme mit Triggern
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 ODBC-Fehlermeldungen Fehlermeldungen
Vielen Dank! Das waren die Themen: • Datenbankcontainer • Arbeiten mit DBC • Grundbefehle DBC • Tabellen und Felder • Buffering • Transaktionen • Referentielle Integrität • Trigger
Wenn Fragen bestehen: Wizards & Builders Methodische Software-Entwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175