Upload
koloman-germann
View
108
Download
1
Embed Size (px)
Citation preview
Wizards & Wizards & Builders GmbH Builders GmbH
DatenbankcontainerDatenbankcontainer
Datenbankcontainer inDatenbankcontainer inMicrosoft Visual FoxProMicrosoft Visual FoxPro
Wizards & Wizards & Builders GmbH Builders GmbH
Diese Schulung dient zur Einführung der Schulungsteilnehmer in die Arbeit mit Datenbankcontainer (im Vergleich
zu Einzeltabellen) in Visual FoxPro
Wizards & Wizards & Builders GmbH Builders GmbH
ThemenübersichtThemenübersicht
Datenbankcontainer (Sinn/Struktur)Datenbankcontainer (Sinn/Struktur) Arbeiten mit dem DatenbankcontainerArbeiten mit dem Datenbankcontainer Grundbefehle des Grundbefehle des
DatenbankcontainersDatenbankcontainers Tabellen und Felder im DBCTabellen und Felder im DBC Buffering und BuffermodeBuffering und Buffermode TransaktionenTransaktionen Referentielle IntegritätReferentielle Integrität Trigger (Insert, Update, Delete, Fehler)Trigger (Insert, Update, Delete, Fehler)
Wizards & Wizards & Builders GmbH Builders GmbH
DatenbankcontainerDatenbankcontainer
Datenbankcontainer fassen Datenbankcontainer fassen „freie Tabellen“ zu einer „freie Tabellen“ zu einer
Datenbank zusammen und Datenbank zusammen und verwalten die Metadatenverwalten die Metadaten
Wizards & Wizards & Builders GmbH Builders GmbH
DatenbankcontainerDatenbankcontainer
Ein DBC ist kein Data-Dictionary!Ein DBC ist kein Data-Dictionary! Tabellenstrukturen im DBF-HeaderTabellenstrukturen im DBF-Header Indexstrukturen im CDX-HeaderIndexstrukturen im CDX-Header Verwaltet ZusatzinformationenVerwaltet Zusatzinformationen
zu Feldern und Tabellen (nicht „freie“ zu Feldern und Tabellen (nicht „freie“ Tabellen)Tabellen)
Verwaltet persistente Relationen Verwaltet persistente Relationen Verwaltet referentielle IntegritätVerwaltet referentielle Integrität
Wizards & Wizards & Builders GmbH Builders GmbH
Logische BestandteileLogische Bestandteile
tables tables
local views local views
remote views remote views
connections connections
indexes indexes
relations relations
rules / triggers rules / triggers
stored procedures stored procedures
Wizards & Wizards & Builders GmbH Builders GmbH
Physische BestandteilePhysische Bestandteile
DBC DCTDCX
DBC DCTDCX
DBF1 DBF1
FPT1 FPT1
CDX1 CDX1
DBFn DBFn
FPTn FPTn
CDXn CDXn
DBF2 DBF2
FPT2 FPT2 CDX2 CDX2
Wizards & Wizards & Builders GmbH Builders GmbH
Arbeiten mit dem DBCArbeiten mit dem DBC
Anlegen einer TabelleAnlegen einer Tabelle FeldeigenschaftenFeldeigenschaften
Anlegen einer Relation (Drag & Drop)Anlegen einer Relation (Drag & Drop) Anlegen einer Ansicht (View)Anlegen einer Ansicht (View)
FeldeigenschaftenFeldeigenschaften
Anlegen einer Verbindung (Connection)Anlegen einer Verbindung (Connection) Anlegen einer Remote Ansicht (View)Anlegen einer Remote Ansicht (View)
Wizards & Wizards & Builders GmbH Builders GmbH
Tabellen im DBCTabellen im DBC
CREATE TABLECREATE TABLE ALTER TABLEALTER TABLE ADD TABLEADD TABLE REMOVE TABLEREMOVE TABLE FREE TABLE (!)FREE TABLE (!) CLOSE TABLECLOSE TABLE INDBC( )INDBC( )
VALID RULEVALID RULE VALID TEXTVALID TEXT CAPTIONCAPTION COMMENTCOMMENT UPD TRIGGER ()UPD TRIGGER () INS TRIGGER ()INS TRIGGER () DEL TRIGGER ()DEL TRIGGER ()
Wizards & Wizards & Builders GmbH Builders GmbH
Felder im DBCFelder im DBC
FORMATFORMAT MASKMASK CAPTIONCAPTION
VALID RULEVALID RULE VALID TEXTVALID TEXT DEFAULTDEFAULT
CLASSCLASS CLASSLIBSCLASSLIBS
COMMENTCOMMENT
Optionen Optionen beachten!beachten!(Klassenzuordnung)(Klassenzuordnung)
Wizards & Wizards & Builders GmbH Builders GmbH
ValidierungenValidierungen
Feld-Ebene:Feld-Ebene: VALID-FunktionVALID-Funktion FehlermeldungFehlermeldung
Wahlweise Wahlweise Funktion oder Funktion oder KonstanteKonstante
Default-Wert Default-Wert dazu!dazu!
Satz-Ebene:Satz-Ebene: für Validierung für Validierung
über mehrere über mehrere FelderFelder
ansonsten siehe ansonsten siehe Feld-ValidierungFeld-Validierung
Trigger kommen als Trigger kommen als separates Themaseparates Thema
Wizards & Wizards & Builders GmbH Builders GmbH
Gespeicherte Prozeduren (1)Gespeicherte Prozeduren (1)
Gehören imanent zu den Tabellen Gehören imanent zu den Tabellen und wird als Prozedur-Datei gesetzt!und wird als Prozedur-Datei gesetzt!
Werden auch über ODBC ausgeführt!Werden auch über ODBC ausgeführt! Verwendet für:Verwendet für:
Feld-Validierung, Feld-FehlermeldungFeld-Validierung, Feld-Fehlermeldung Satz-Validierung, Satz-FehlermeldungSatz-Validierung, Satz-Fehlermeldung Feld-Default-WertFeld-Default-Wert Trigger-AufrufeTrigger-Aufrufe
Wizards & Wizards & Builders GmbH Builders GmbH
Gespeicherte Prozeduren (2)Gespeicherte Prozeduren (2)
Kompilate in DBC-Datensatz sind Kompilate in DBC-Datensatz sind versionsabhängig (VFP 3.0, 5.0 / versionsabhängig (VFP 3.0, 5.0 / 6.0) - d.h. Neukompilieren (!)6.0) - d.h. Neukompilieren (!) ggf. ausgelagerte Prozedurdatei verwendenggf. ausgelagerte Prozedurdatei verwenden
Tabellen/Felder finden „richtige“ Tabellen/Felder finden „richtige“ Prozedurdatei - eigene Anwendung Prozedurdatei - eigene Anwendung verwendet aber nur aktiven DBC!verwendet aber nur aktiven DBC! Set database toSet database to Namenskonventionen für DBC-Funktionen!Namenskonventionen für DBC-Funktionen!
Wizards & Wizards & Builders GmbH Builders GmbH
Views im DBCViews im DBC
Felder Felder (Ausdrücke)(Ausdrücke)
VerknüpfungVerknüpfung FilterFilter SortierungSortierung GruppierungGruppierung AktualisierungAktualisierung VerschiedenesVerschiedenes
Schlüssel setzenSchlüssel setzen Felder setzenFelder setzen SQL-Update setzenSQL-Update setzen Where-KlauselWhere-Klausel
Schlüssel Schlüssel änderbar!änderbar!
Feldeigenschaften!Feldeigenschaften!
Wizards & Wizards & Builders GmbH Builders GmbH
Struktur des DBCStruktur des DBC
OBJECTIDOBJECTID PARENTIDPARENTID OBJECTTYPE =>OBJECTTYPE => OBJECTNAMEOBJECTNAME PROPTERY (M)PROPTERY (M) CODE (M)CODE (M) RIINFORIINFO USER (M)USER (M)
Objekt-Typen:Objekt-Typen: DATABASEDATABASE TABLETABLE FIELDFIELD INDEXINDEX VIEWVIEW CONNECTIONCONNECTION
Wizards & Wizards & Builders GmbH Builders GmbH
Grundbefehle DBC (1)Grundbefehle DBC (1)
CREATE DATACREATE DATA OPEN DATAOPEN DATA MODIFY DATAMODIFY DATA CLOSE DATACLOSE DATA DELETE DATADELETE DATA
PACK DATAPACK DATA sortiert Schlüssel neu!sortiert Schlüssel neu!
VALIDATE DATAVALIDATE DATA Zeigt manche Fehler Zeigt manche Fehler
nur!nur!
SET DATA TOSET DATA TO
Achtung: Achtung: Projektmanager kann Projektmanager kann DBC offenhalten!DBC offenhalten!
Info-Funktionen:Info-Funktionen: DBC()DBC() DBUSED()DBUSED()
Wizards & Wizards & Builders GmbH Builders GmbH
Grundbefehle DBC (2)Grundbefehle DBC (2)
Anzeigefunktionen:Anzeigefunktionen: LIST DATABASELIST DATABASE LIST TABLESLIST TABLES LIST VIEWSLIST VIEWS LIST LIST
CONNECTIONSCONNECTIONS LIST PROCEDURELIST PROCEDURE
Sonstige Sonstige Funktionen:Funktionen:
ADATABASES( )ADATABASES( ) ADBOBJECTS( )ADBOBJECTS( )
Eigenschaften Eigenschaften ändern:ändern:
DBGETPROP( )DBGETPROP( ) DBSETPROP( )DBSETPROP( )
Wizards & Wizards & Builders GmbH Builders GmbH
DbGetProp( ) / DbSetProp( )DbGetProp( ) / DbSetProp( )
DatenbankenDatenbanken TabellenTabellen Felder in Felder in
TabellenTabellen AnsichtenAnsichten Felder in Felder in
AnsichtenAnsichten VerbindungenVerbindungen
Wizards & Wizards & Builders GmbH Builders GmbH
StrukturänderungenStrukturänderungen
Eigenlösungen:Eigenlösungen:
Neuen DBC mit Neuen DBC mit geänderten geänderten Tabellen Tabellen versendenversenden
SQL Alter Table-SQL Alter Table-Befehl versendenBefehl versenden Keine Primary Keys in Keine Primary Keys in
VFP 3.0 / VFP 5.0 !VFP 3.0 / VFP 5.0 !
Fremdlösungen:Fremdlösungen:
XCASE-ZusatztoolXCASE-Zusatztool SDT-Zusatztool SDT-Zusatztool
(Stonefield Database (Stonefield Database Toolkit)Toolkit)
Wizards & Wizards & Builders GmbH Builders GmbH
Hinweise zum DBCHinweise zum DBC
Separates Datadictionary notwendigSeparates Datadictionary notwendigfür Reindizierung od. Neuerzeugungfür Reindizierung od. Neuerzeugung wahlweise Eigenbau, XCase oder Stonefieldwahlweise Eigenbau, XCase oder Stonefield wahlweise GENDBCX als Minimal-Lösungwahlweise GENDBCX als Minimal-Lösung
Tabellen und DBC sind eine EinheitTabellen und DBC sind eine Einheit Immer zusammen sichern / ändernImmer zusammen sichern / ändern
FREE TABLE mit Vorsicht!FREE TABLE mit Vorsicht!
Wizards & Wizards & Builders GmbH Builders GmbH
BufferingBuffering
Buffering dient zur Buffering dient zur Zwischenspeicherung von Zwischenspeicherung von
ÄnderungenÄnderungen
Wizards & Wizards & Builders GmbH Builders GmbH
Prinzip des BufferingPrinzip des Buffering
OLDVAL-Puffer
OLDVAL-Puffer
Methode zum automatischen Puffern von Methode zum automatischen Puffern von Daten zwischen einer Eingabe-Maske und der Daten zwischen einer Eingabe-Maske und der DBF-Datei auf der FestplatteDBF-Datei auf der Festplatte
Eingabe-Maske
Eingabe-Maske
Daten-PufferDaten-Puffer
DBF-DateiDBF-Datei
Wizards & Wizards & Builders GmbH Builders GmbH
TablebufferingTablebuffering
TABLEREVERT()TABLEREVERT() TABLEUPDATE()TABLEUPDATE()
CURSOR-CURSOR-GETPROP()GETPROP()
CURSOR-CURSOR-SETPROP()SETPROP()
CURVAL()CURVAL() OLDVAL()OLDVAL() GETNEXT-GETNEXT-
MODIFIED()MODIFIED()
GETFLDSTATE()GETFLDSTATE() SETFLDSTATE()SETFLDSTATE()
Wizards & Wizards & Builders GmbH Builders GmbH
Tableupdate / TablerevertTableupdate / Tablerevert
Parameter für Parameter für Tableupdate( )Tableupdate( )
------ EinzelsatzEinzelsatz .T..T. bis 1. Fehlerbis 1. Fehler 22 alle die alle die
gehengehen .T..T. Forced Forced
UpdateUpdate
Parameter für Parameter für Tablerevert( )Tablerevert( )
EinzelsatzEinzelsatz Alle ÄnderungenAlle Änderungen
Schließen = Schließen = Revert!Revert!
Wizards & Wizards & Builders GmbH Builders GmbH
BuffermodeBuffermode
Buffermodes:Buffermodes: 1-None1-None 2-Pessimistic Row2-Pessimistic Row 3-Pessimistic 3-Pessimistic
TableTable 4-Optimistic Row4-Optimistic Row 5-Optimistic Table5-Optimistic Table Row: Row:
Skip = Update (!)Skip = Update (!)
Optimistic:Optimistic: Record changed!Record changed! Curval/Oldval()Curval/Oldval() GetFldState()GetFldState()
Table-Buffering:Table-Buffering: Getnextmodified()Getnextmodified()
Wizards & Wizards & Builders GmbH Builders GmbH
Funktionen im EinsatzFunktionen im Einsatz
Beispiele:Beispiele:
? GetFldState(-1) != Repl(„1“,Fcount()+1)? GetFldState(-1) != Repl(„1“,Fcount()+1)
? Left( GetFldState(-1),1) != „1“? Left( GetFldState(-1),1) != „1“
Goto ( GetNextModified( Recno() ) )Goto ( GetNextModified( Recno() ) )
? Field( At( „2“, GetFldState(-1) ) )? Field( At( „2“, GetFldState(-1) ) )
? SetFldState( „Feld“, 1 )? SetFldState( „Feld“, 1 ) && Views!&& Views!
Achtung: Negative Record-Nummern!Achtung: Negative Record-Nummern!
Wizards & Wizards & Builders GmbH Builders GmbH
ReihenfolgeReihenfolge
Tabellenfeld-Valid (alle Felder)Tabellenfeld-Valid (alle Felder) Masken-Valid (aktuelles Element)Masken-Valid (aktuelles Element) Datensatz-Valid(ierung)Datensatz-Valid(ierung) Primary/Candidate-SchlüsselPrimary/Candidate-Schlüssel TriggerTrigger
kaskadierend über alle Childskaskadierend über alle Childs Achtung: _TRIGGERLEVEL kann hoch werdenAchtung: _TRIGGERLEVEL kann hoch werden
Wizards & Wizards & Builders GmbH Builders GmbH
CursorGetProp( ) / CSetProp( CursorGetProp( ) / CSetProp( ))
Allgemein:Allgemein: Buffering (ein- /ausschalten, abfragen, Wert 1-5)Buffering (ein- /ausschalten, abfragen, Wert 1-5) Caption (Auslesen Text für Feldlabel zur Laufzeit)Caption (Auslesen Text für Feldlabel zur Laufzeit)
nur für Views (Auch im View-Designer):nur für Views (Auch im View-Designer): CompareMemoCompareMemo UpdatableUpdatable Updatable Field ListUpdatable Field List Where TypeWhere Type
Wizards & Wizards & Builders GmbH Builders GmbH
Vorsicht Falle!Vorsicht Falle!
Allgemeine Probleme:Allgemeine Probleme:
GETNEXTMODIFIED / GETNEXTMODIFIED / GETFIELDSTATE() => GETFIELDSTATE() => erst Feld verlassen!erst Feld verlassen!
SetFldState( ) bei SetFldState( ) bei Views mit Requery()Views mit Requery()
Table changedTable changedim View-Designer im View-Designer sofern alle Felder sofern alle Felder gewählt wurden (*)gewählt wurden (*)
Sonderfall: Sonderfall:
Buffered Views auf Buffered Views auf Buffered Tables!Buffered Tables!
Row: Fehler erst beim Row: Fehler erst beim nächsten Satz!nächsten Satz!
Tablerevert: Revert im Tablerevert: Revert im View versagtView versagt
Primary Key doppelt: Primary Key doppelt: Letzter gilt!Letzter gilt!
Wizards & Wizards & Builders GmbH Builders GmbH
TransaktionenTransaktionen
Transaktionen dienen dem Transaktionen dienen dem vollständigen Abspeichern vollständigen Abspeichern
einer Gruppe von Datensätzeneiner Gruppe von Datensätzen
Wizards & Wizards & Builders GmbH Builders GmbH
TransaktionenTransaktionen
BEGIN TRANSBEGIN TRANS *-- Datenzugriff*-- Datenzugriff
END TRANSEND TRANS ROLLBACKROLLBACK
Absturz = RollbackAbsturz = Rollback Rollback bei Öffnen!Rollback bei Öffnen!
TXNLEVEL()TXNLEVEL() bis 5 Ebenen tief!bis 5 Ebenen tief! Äußerste Ebene Äußerste Ebene
zählt!zählt!
Experimente mit Experimente mit Transaktionen:Transaktionen:
1 Tabelle1 Tabelle 2 Tabellen aus DBC2 Tabellen aus DBC Verschiedene DBCsVerschiedene DBCs Freie TabellenFreie Tabellen GeschachteltGeschachtelt Task-Manager!Task-Manager!
Wizards & Wizards & Builders GmbH Builders GmbH
Probleme bei TransaktionenProbleme bei Transaktionen
Buffering eingeschaltet = Transaktion Buffering eingeschaltet = Transaktion läuft nur auf Buffer und nicht auf Platte!läuft nur auf Buffer und nicht auf Platte!
Buffering ausgeschaltet = Transaktion Buffering ausgeschaltet = Transaktion läßt Einschalten Buffering nicht zu!läßt Einschalten Buffering nicht zu! Dadurch ggf. neue Sätze nicht anlegbar (Valid)Dadurch ggf. neue Sätze nicht anlegbar (Valid)
Lösung möglicherweise Buffering mit Lösung möglicherweise Buffering mit Tableupdate und dann END TRANSTableupdate und dann END TRANS
Freie Tabellen ohne Meldung!Freie Tabellen ohne Meldung! Deadlocks möglich - Zugriffsreihenfolge!Deadlocks möglich - Zugriffsreihenfolge!
Wizards & Wizards & Builders GmbH Builders GmbH
Zugriffsreihenfolge (Deadlocks!)Zugriffsreihenfolge (Deadlocks!)
Tabellen nach Parent->ChildTabellen nach Parent->Child Immer erst den Parent sperrenImmer erst den Parent sperren notfalls per SQL-Select erst die Parents holennotfalls per SQL-Select erst die Parents holen
Datensätze nach PrimärschlüsselDatensätze nach Primärschlüssel notfalls per SQL-Select umsortierennotfalls per SQL-Select umsortieren
Mehrere Parents ggf. alphabetischMehrere Parents ggf. alphabetisch sofern Parents nicht in Parent-Child-Beziehungsofern Parents nicht in Parent-Child-Beziehung
Wizards & Wizards & Builders GmbH Builders GmbH
Referentielle IntegritätReferentielle Integrität
RI dient zur Wahrung der RI dient zur Wahrung der inhaltlichen Konsistenz inhaltlichen Konsistenz Beziehungen zwischen Beziehungen zwischen
TabellenTabellen
Wizards & Wizards & Builders GmbH Builders GmbH
Referentielle Integrität (RI)Referentielle Integrität (RI)
Programmatisch:Programmatisch: CREATE TRIGGERCREATE TRIGGER DELETE TRIGGERDELETE TRIGGER _TRIGGERLEVEL_TRIGGERLEVEL
Arten von Triggern:Arten von Triggern: DELETEDELETE UPDATEUPDATE INSERTINSERT
Bedeutung der Bedeutung der Referentiellen Referentiellen Integrität einer Integrität einer DatenbankDatenbank
Arbeiten mit dem Arbeiten mit dem Referential Referential Integrity Integrity BuilderBuilder
Wizards & Wizards & Builders GmbH Builders GmbH
DELETE-TriggerDELETE-Trigger
Auslöser:Auslöser: DELETE-BefehlDELETE-Befehl
Nicht bei ZAP (!)Nicht bei ZAP (!) Gefährlich!!!Gefährlich!!!
Nicht bei PACKNicht bei PACK(da Sätze (da Sätze gelöscht)gelöscht)
Verhalten:Verhalten: CASCASECASCASE
Cascading DeleteCascading Delete
RESTRICTRESTRICT sofern Parent vorh.sofern Parent vorh.
IGNOREIGNORE
Wizards & Wizards & Builders GmbH Builders GmbH
INSERT-TriggerINSERT-Trigger
Auslöser:Auslöser: APPEND FROMAPPEND FROM APPEND BLANKAPPEND BLANK IMPORTIMPORT INSERT-SQLINSERT-SQL
RECALL (!)RECALL (!)
Verhalten:Verhalten: RESTRICTRESTRICT
Child nur zu ParentChild nur zu Parent
IGNOREIGNORE
INSERT INSERT unzulässigunzulässig
Wizards & Wizards & Builders GmbH Builders GmbH
UPDATE-TriggerUPDATE-Trigger
Auslöser:Auslöser: GATHERGATHER REPLACEREPLACE REPLACE FROMREPLACE FROM UPDATE-SQLUPDATE-SQL
nicht bei nicht bei DELETED() (!)DELETED() (!)
Verhalten:Verhalten: CASCADECASCADE
Schlüssel zu ChildsSchlüssel zu Childs
RESTRICTRESTRICT Parentschlüssel Parentschlüssel
gesperrtgesperrt
IGNOREIGNORE
Wizards & Wizards & Builders GmbH Builders GmbH
Probleme mit TriggernProbleme mit Triggern
Im Gegensatz zu Im Gegensatz zu Feld-Valid und Feld-Valid und Satz-Valid ist ein Satz-Valid ist ein Triggerfehler ein Triggerfehler ein endgültiger endgültiger Fehler!Fehler!
Das heißt:Das heißt: VFP macht VFP macht
Rollback über alle Rollback über alle EbenenEbenen
Probleme:Probleme: Ändern von Daten!Ändern von Daten!
Update-Update-Endlosschleife...Endlosschleife...
Compound KeysCompound Keys Verschiedene DBCsVerschiedene DBCs Kein „Nullify“ für Kein „Nullify“ für
Delete von ParentDelete von Parent Builder nicht Builder nicht
ändernändern
Wizards & Wizards & Builders GmbH Builders GmbH
FehlermeldungenFehlermeldungen
1539 Trigger failed 1539 Trigger failed 1=Ins, 2=Upd, 3=Del1=Ins, 2=Upd, 3=Del
1581 Field no NULL1581 Field no NULL 1582 Field Rule1582 Field Rule 1583 Record Rule1583 Record Rule 1585 Change by A.1585 Change by A. 1700 Used by A.1700 Used by A. 1884 Unique index1884 Unique index
AERROR( )AERROR( ) Error()Error() Message()Message() Sys(2018)Sys(2018) Select()Select() Trigger-ArtTrigger-Art .NULL..NULL. .NULL..NULL.
Weitere Elemente für Weitere Elemente für ODBC-FehlermeldungenODBC-Fehlermeldungen
Wizards & Wizards & Builders GmbH Builders GmbH
Vielen Dank!Vielen Dank!
Das waren die Themen:Das waren die Themen:
DatenbankcontainerDatenbankcontainer Arbeiten mit DBCArbeiten mit DBC Grundbefehle DBCGrundbefehle DBC Tabellen und FelderTabellen und Felder BufferingBuffering TransaktionenTransaktionen Referentielle Referentielle
IntegritätIntegrität TriggerTrigger
Wizards & Wizards & Builders GmbH Builders GmbH
Wenn Fragen bestehen:Wenn Fragen bestehen:
Wizards & BuildersWizards & BuildersMethodische Software-Methodische Software-
Entwicklung GmbHEntwicklung GmbH
Frankfurter Str. 21bFrankfurter Str. 21b
61476 Kronberg61476 Kronberg
Tel.: 06173-950906Tel.: 06173-950906
Fax: 06173-950907Fax: 06173-950907
CIS: 101605,175CIS: 101605,175