Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Ähnliche Präsentationen


Präsentation zum Thema: "Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA."—  Präsentation transkript:

1 Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA

2 Vortragsthemen Datenbankcontainer Datenbankcontainer Tabellen und Felder Tabellen und Felder Nullwerte und Codepages Nullwerte und Codepages Indizes und Sortiersequenzen Indizes und Sortiersequenzen Rushmore-Optimierung Rushmore-Optimierung Relationen Relationen Buffering Buffering Netzwerkprogrammierung Netzwerkprogrammierung Transaktionen Transaktionen Trigger Trigger Referentielle Integrität Referentielle Integrität

3 Datenbankcontainer Verwaltet Zusatzinformationen Verwaltet Zusatzinformationen zu Tabellen (nicht freie Tabellen) zu Tabellen (nicht freie Tabellen) Felder und Indizes Felder und Indizes persistente Relationen persistente Relationen gespeicherte Prozeduren gespeicherte Prozeduren referentielle Integrität / Trigger, Ereignisse referentielle Integrität / Trigger, Ereignisse Verbindungen, lokale und remote Views Verbindungen, lokale und remote Views Ein DBC ist kein Data-Dictionary! Ein DBC ist kein Data-Dictionary! Tabellenstrukturen im DBF-Header Tabellenstrukturen im DBF-Header Indexstrukturen im CDX-Header Indexstrukturen im CDX-Header

4 Hinweise zum DBC Projektmanager kann DBC offenhalten! Projektmanager kann DBC offenhalten! Separates Datadictionary notwendig für Reindizierung oder Neuerzeugung Separates Datadictionary notwendig für Reindizierung oder Neuerzeugung wahlweise Eigenbau (Alter Table), XCASE, SDT, VFX wahlweise Eigenbau (Alter Table), XCASE, SDT, VFX wahlweise GENDBCX als Minimal-Lösung wahlweise GENDBCX als Minimal-Lösung Tabellen und DBC sind eine Einheit Tabellen und DBC sind eine Einheit Immer zusammen sichern / ändern Immer zusammen sichern / ändern FREE TABLE problematisch bei langen Feldnamen FREE TABLE problematisch bei langen Feldnamen Auch copy to database kopiert Metadaten leider nicht Auch copy to database kopiert Metadaten leider nicht

5 Datenbankengineänderungen ALTER TABLE Memofelder vor/zurück ALTER TABLE Memofelder vor/zurück Umschalten mit Umschalten mit SET ENGINEBEHAVIOR oder SYS(3099) SET ENGINEBEHAVIOR oder SYS(3099) Erinnerung: Leerzeichen Erinnerung: Leerzeichen Leerzeichen in Tabellennamen zulässig Leerzeichen in Tabellennamen zulässig Immer bzw. () statt & verwenden Immer bzw. () statt & verwenden Problematisch bei USE IN tab 1 test Problematisch bei USE IN tab 1 test

6 Lange Feldtypenbezeichnungen DatentypLanger NameKurzer Name CharacterChar, CharacterC DateDateD DateTimeDatetimeT NumericNum, NumericN FloatingFloatF IntegerInt, IntegerI Double DoubleB CurrencyCurrencyY LogicalLogicalL MemoMemoM GeneralGeneralG PicturePictureP VarcharVarcharV VarbinaryVarbinaryQ BlobBlobW DatentypLanger NameKurzer Name CharacterChar, CharacterC DateDateD DateTimeDatetimeT NumericNum, NumericN FloatingFloatF IntegerInt, IntegerI Double DoubleB CurrencyCurrencyY LogicalLogicalL MemoMemoM GeneralGeneralG PicturePictureP VarcharVarcharV VarbinaryVarbinaryQ BlobBlobW

7 Feldarten Character / Zeichen (c) Character / Zeichen (c) Character Binary Character Binary Numeric / Zahl (n) Numeric / Zahl (n) Date / Datum (d) Date / Datum (d) Logical / Logisch (l) Logical / Logisch (l) Memofelder (Char) m(c) Memofelder (Char) m(c) Memo Binary Memo Binary General General AutoIncrement AutoIncrement Neu: Blob Neu: Blob Integer / Integer i(n) Integer / Integer i(n) Double / Doppelte G. b(n) Double / Doppelte G. b(n) Float / Fließkomma f(n) Float / Fließkomma f(n) Currency / Währung y(y) Currency / Währung y(y) DateTime / DatumZeit t(t) DateTime / DatumZeit t(t) Neu: VarCharacter Neu: VarCharacter Neu: VarBinary Neu: VarBinary Feldlänge Memo / General / Blob von 4 Bytes Feldlänge Memo / General / Blob von 4 Bytes

8 Blob Alternative zu General-Feldern Alternative zu General-Feldern Ohne OLE-Server, kein Overhead Ohne OLE-Server, kein Overhead Read-Only HexCode in Memofeldanzeige Read-Only HexCode in Memofeldanzeige Kompatibel zu SQL-Server Kompatibel zu SQL-Server Beispiel Bilderspeicherung Beispiel Bilderspeicherung pictureval pictureval oimg.pictureval = filetostr / blob oimg.pictureval = filetostr / blob loadpicture loadpicture

9 VarChar / VarBinary Format = F verhindert Auffüllen des Value mit Leerstellen bei VarChar oder CHR(0) bei VarBinary Format = F verhindert Auffüllen des Value mit Leerstellen bei VarChar oder CHR(0) bei VarBinary.Inputmask =HHHH…HH lässt nur Hexadezimaleingaben zu (0…F), sonst Präfix "0h".Inputmask =HHHH…HH lässt nur Hexadezimaleingaben zu (0…F), sonst Präfix "0h" SET VarCharMapping ON | OFF SET VarCharMapping ON | OFF Keine Einstellung in Extras->Optionen, Default ON Keine Einstellung in Extras->Optionen, Default ON Tabellen/Cursor-Spalten werden als VarChar angelegt, wenn die erzeugende Funktion variable Längen liefert (vorname+nachname, func() ) Tabellen/Cursor-Spalten werden als VarChar angelegt, wenn die erzeugende Funktion variable Längen liefert (vorname+nachname, func() )

10 Gespeicherte Prozeduren I Gehören imanent zu den Tabellen und wird als Prozedur-Datei gesetzt! Gehören imanent zu den Tabellen 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-Fehlermeldung Feld-Validierung, Feld-Fehlermeldung Satz-Validierung, Satz-Fehlermeldung Satz-Validierung, Satz-Fehlermeldung Feld-Default-Wert Feld-Default-Wert Trigger-Aufrufe Trigger-Aufrufe

11 Gespeicherte Prozeduren II Kompilate in DBC-Datensatz sind versionsabhängig d.h. Neukompilieren (!) Kompilate in DBC-Datensatz sind versionsabhängig d.h. Neukompilieren (!) ggf. ausgelagerte Prozedurdatei verwenden ggf. ausgelagerte Prozedurdatei verwenden Tabellen/Felder finden richtige Prozedurdatei - eigene Anwendung verwendet aber nur aktiven DBC! Tabellen/Felder finden richtige Prozedurdatei - eigene Anwendung verwendet aber nur aktiven DBC! Set database to Set database to Namenskonventionen für DBC-Funktionen! Namenskonventionen für DBC-Funktionen!

12 DBC-Ereignisse Ab VFP-Version 7, defaultmäßig deaktiviert Ab VFP-Version 7, defaultmäßig deaktiviert einschalten über DBC-Optionen einschalten über DBC-Optionen Dbsetprop(Main.dbc,Database,DBCEVENTS,.t.) Dbsetprop(Main.dbc,Database,DBCEVENTS,.t.) Wenn aktiviert, DBC nicht mehr abwärtskompatibel Wenn aktiviert, DBC nicht mehr abwärtskompatibel Funktionen liegen im DBC bei den gespeicherten Prozeduren oder in einer externen PRG-Datei Funktionen liegen im DBC bei den gespeicherten Prozeduren oder in einer externen PRG-Datei Vorsicht: Datasessions beachten! Vorsicht: Datasessions beachten! Für Zugriffsschutz und zur Protokollierung … Für Zugriffsschutz und zur Protokollierung …

13 Sonderfälle Leerfelder EMPTY( ) EMPTY( ) ISBLANK( ) ISBLANK( ) ISNULL( ) ISNULL( ) SET NULL SET NULL NVL( ) NVL( ) EVL( ) – besonders praktisch für Parameterprüfung! EVL( ) – besonders praktisch für Parameterprüfung! Beispiel: Statistik, Logik Beispiel: Statistik, Logik

14 Indizes Grundlagen: Separate Datei Separate Datei B-Baum B-Baum Schlüssel 100 B. IDX/240 B. CDX Schlüssel 100 B. IDX/240 B. CDX Ausdruck 220 B. Ausdruck 220 B. Kein Alltrim()! Kein Alltrim()! Ausdrücke Ausdrücke Benötigt für: Rushmore-Optimierung Rushmore-Optimierung Suchbefehle Suchbefehle Relationen Relationen dito persistent dito persistent Referentielle Integrität Referentielle Integrität

15 Indexarten REGULAR - Normaler Schlüssel REGULAR - Normaler Schlüssel CANDIDATE - Eindeutiger Schlüssel CANDIDATE - Eindeutiger Schlüssel PRIMARY - Primärschlüssel PRIMARY - Primärschlüssel nur in DBC, nicht in freien Tabellen nur in DBC, nicht in freien Tabellen UNIQUE - Einmaliger Schlüssel UNIQUE - Einmaliger Schlüssel NICHT VERWENDEN! Sinnvoll gelegentlich in Views NICHT VERWENDEN! Sinnvoll gelegentlich in Views Neu: BINARY –Binärschlüssel Neu: BINARY –Binärschlüssel

16 Primärschlüssel Real-World-Schlüssel Real-World-Schlüssel meist zusammengesetzt meist zusammengesetzt Änderungen immer möglich! Änderungen immer möglich! Eindeutigkeit letztendlich nicht garantiert Eindeutigkeit letztendlich nicht garantiert RI: Cascading Update notwendig! RI: Cascading Update notwendig! Surrogate / Abstract -Schlüssel Surrogate / Abstract -Schlüssel fortlaufend fortlaufend selbst erzeugt (ggf. mit zentraler Tabelle) selbst erzeugt (ggf. mit zentraler Tabelle) Datenmodell komplett erstellbar ohne Attribute Datenmodell komplett erstellbar ohne Attribute RI: kein Cascading Update notwendig RI: kein Cascading Update notwendig

17 Funktionen und Relationen SET RELATION SET RELATION SET SKIP SET SKIP Relation( ) Relation( ) Target( ) Target( )Hinweise: Umgebungsfenster Umgebungsfenster SET RELATION TO RECNO( ) SET RELATION TO RECNO( ) Alternative: Alternative:SQL-Joins SET KEY RANGE Hinweis: Hinweis: INDEXSEEK( )

18 Collate-Sequenzen SET COLLATE TO SET COLLATE TO Default GENERAL (2 Byte, A=a!) Default GENERAL (2 Byte, A=a!) Original MACHINE (schnell!) Original MACHINE (schnell!) Alternativ: GERMAN, UNIQWT Alternativ: GERMAN, UNIQWT Sonstige: DUTCH, ICELAND, NORDAN, SPANISH, SWEFIN Sonstige: DUTCH, ICELAND, NORDAN, SPANISH, SWEFIN Ggf. doppelte Index-Definition mit verschiedenen Collate-Sequenzen! Ggf. doppelte Index-Definition mit verschiedenen Collate-Sequenzen!

19 Die große Vergleichsfalle Optimierung und Vergleiche basieren auf aktuell eingestellter Sortiersequenz! Optimierung und Vergleiche basieren auf aktuell eingestellter Sortiersequenz! SET COLLATE gilt für aktuelle Datasession SET COLLATE gilt für aktuelle Datasession SCAN WHILE / REST bei anderer Sortiersequenz verlässt Schleife … SCAN WHILE / REST bei anderer Sortiersequenz verlässt Schleife … Sequenz MACHINE Sequenz MACHINE A = a.F. A = a.F. Sequenz GENERAL Sequenz GENERAL A = a.T. A = a.T.

20 Codepages 437, 850, 1252, , 850, 1252, CPCURRENT( ), CPDBF( ) CPCURRENT( ), CPDBF( ) CPCONVERT( ) CPCONVERT( ) GETCP( ) GETCP( ) CODEPAGE=auto CODEPAGE=auto SET NOCPTRANS SET NOCPTRANS Character Binary, Memo Binary, usw. Character Binary, Memo Binary, usw. SET CPDIALOG, SET CPCOMPILE SET CPDIALOG, SET CPCOMPILE DO CPZERO.PRG DO CPZERO.PRG

21 Rushmore-Optimierung Indexdefinition vorhanden Indexdefinition vorhanden Keine FOR/NOT-Klausel im Index Keine FOR/NOT-Klausel im Index Identische Indexdefinition Identische Indexdefinition zusammengesetzte Felder, Alltrim() zusammengesetzte Felder, Alltrim() Index auf Deleted() (bei SET DELE ON) problematisch! Index auf Deleted() (bei SET DELE ON) problematisch! Passende Collatesequenz (IDXCOLLATE) Passende Collatesequenz (IDXCOLLATE) Keine Sortierung (SET ORDER TO) Keine Sortierung (SET ORDER TO) Keine Abfrage auf Empty( ) / IsBlank( ) Keine Abfrage auf Empty( ) / IsBlank( ) Kein exakter Vergleich (SET EXACT/ANSI OFF/==) Kein exakter Vergleich (SET EXACT/ANSI OFF/==) Kontrolle mitSYS(3054,1/11, neu) und SYS(3092) Kontrolle mit SYS(3054,1/11, neu) und SYS(3092)

22 Optimierbare Befehle AVERAGE AVERAGE DELETE / BLANK DELETE / BLANK BROWSE => GRID (!) BROWSE => GRID (!) CALCULATE CALCULATE CHANGE / EDIT CHANGE / EDIT COPY TO (ARRAY) COPY TO (ARRAY) COUNT COUNT LIST / DISPLAY LIST / DISPLAY EXPORT EXPORT INDEX INDEX LOCATE LOCATE RECALL RECALL REPLACE (ARRAY) REPLACE (ARRAY) LABEL / REPORT LABEL / REPORT SCAN SCAN SORT SORT SUM SUM TOTAL TOTAL

23 Optimierungsmöglichkeiten Verzeichniskomprimierung (+10% Performance!) Verzeichniskomprimierung (+10% Performance!) Virusfilter für Endungen abschalten Virusfilter für Endungen abschalten Verzicht auf Verschlüsselung (siehe oben) Verzicht auf Verschlüsselung (siehe oben) Verzicht auf Indizes mit wenig Unterscheidung Verzicht auf Indizes mit wenig Unterscheidung Hardware Hardware Schnelle Netzwerkkarten / Verbindungen Schnelle Netzwerkkarten / Verbindungen Mehrere Netzwerkkarten im Server Mehrere Netzwerkkarten im Server User auf Stränge verteilen (z.B. 10 User/Strang) User auf Stränge verteilen (z.B. 10 User/Strang) Gute HD-Controller mit viel Cache Gute HD-Controller mit viel Cache Verteilung von DBF und CDX auf versch. Festplatten Verteilung von DBF und CDX auf versch. Festplatten

24 Buffermode Buffermodes: 1-None 1-None 2-Pessimistic Row 2-Pessimistic Row 3-Pessimistic Table 3-Pessimistic Table 4-Optimistic Row 4-Optimistic Row 5-Optimistic Table 5-Optimistic Table Row: Skip = Update (!) Row: Skip = Update (!)Optimistic: Record changed! Record changed! Curval/Oldval() Curval/Oldval() GetFldState() GetFldState()Table-Buffering: Getnextmodified() Getnextmodified()

25 Funktionen im Einsatz Beispiele: 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! Achtung: Negative Record-Nummern!

26 Reihenfolge 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üssel Primary/Candidate-Schlüssel Trigger Trigger kaskadierend über alle Childs kaskadierend über alle Childs Achtung: _TRIGGERLEVEL kann hoch werden Achtung: _TRIGGERLEVEL kann hoch werden

27 CursorGetProp( ) / SetProp( ) 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): CompareMemo CompareMemo Updatable Updatable Updatable Field List Updatable Field List Where Type Where Type Vorführung View-Designer Vorführung View-Designer

28 Sonderfälle Allgemeine Probleme: GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld verlassen! GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld verlassen! SetFldState( ) bei Views mit Requery() SetFldState( ) bei Views mit Requery() Table changed im View-Designer sofern alle Felder gewählt wurden (*) -> geändert! Table changed im View-Designer sofern alle Felder gewählt wurden (*) -> geändert!Sonderfall: Buffered Views auf Buffered Tables! (SQL öffnet neuen Alias) Row: Fehler erst beim nächsten Satz! Row: Fehler erst beim nächsten Satz! Tablerevert: Revert im View versagt Tablerevert: Revert im View versagt Primary Key doppelt: Letzter gilt! Primary Key doppelt: Letzter gilt!

29 Transaktionen BEGIN TRANS BEGIN TRANS *-- Datenzugriff *-- Datenzugriff END TRANS END TRANS ROLLBACK ROLLBACK Absturz = Rollback Absturz = Rollback Rollback bei Öffnen! Rollback bei Öffnen! TXNLEVEL() TXNLEVEL() bis 5 Ebenen tief! bis 5 Ebenen tief! Äußerste Ebene zählt! Äußerste Ebene zählt! Experimente mit Transaktionen: 1 Tabelle 1 Tabelle 2 Tabellen aus DBC 2 Tabellen aus DBC Verschiedene DBCs Verschiedene DBCs Freie Tabellen Freie Tabellen Geschachtelt Geschachtelt Task-Manager! Task-Manager!

30 MAKETRANSACTABLE Maketransactable( ) für freie Tabellen, Cursor von freien Tabellen oder Created Cursor Maketransactable( ) für freie Tabellen, Cursor von freien Tabellen oder Created Cursor Istransactable( ) für Prüfung Istransactable( ) für Prüfung Darf noch nicht anderweitig geöffnet sein Darf noch nicht anderweitig geöffnet sein Kein Table Buffering erlaubt Kein Table Buffering erlaubt Bei Row Buffering wird Tableupdate durchgeführt Bei Row Buffering wird Tableupdate durchgeführt Kann danach anderweitig geöffnet werden Kann danach anderweitig geöffnet werden Transactable endet mit Schliessen letzter Instanz Transactable endet mit Schliessen letzter Instanz

31 Hinweise zu Transaktionen Buffering eingeschaltet = Transaktion läuft nur auf Buffer und nicht auf Platte! Buffering eingeschaltet = Transaktion läuft nur auf Buffer und nicht auf Platte! Buffering ausgeschaltet = Transaktion läßt Einschalten Buffering nicht zu! Buffering ausgeschaltet = Transaktion läßt Einschalten Buffering nicht zu! Dadurch ggf. neue Sätze nicht anlegbar (Valid) Dadurch ggf. neue Sätze nicht anlegbar (Valid) Lösung: Buffering mit Tableupdate und dann END TRANS Lösung: Buffering mit Tableupdate und dann END TRANS Freie Tabellen ohne Meldung! Freie Tabellen ohne Meldung! Deadlocks möglich - Zugriffsreihenfolge! Deadlocks möglich - Zugriffsreihenfolge!

32 Zugriffsreihenfolge beachten Zur Vermeidung von Deadlocks im Netzbetrieb: Tabellen nach Parent->Child Tabellen nach Parent->Child Immer erst den Parent sperren Immer erst den Parent sperren notfalls per SQL-Select erst die Parents holen notfalls per SQL-Select erst die Parents holen Datensätze nach Primärschlüssel Datensätze nach Primärschlüssel notfalls per SQL-Select umsortieren notfalls per SQL-Select umsortieren Mehrere Parents ggf. alphabetisch Mehrere Parents ggf. alphabetisch sofern Parents nicht in Parent-Child-Beziehung sofern Parents nicht in Parent-Child-Beziehung

33 Multiuser-Datenzugriff Generell Öffnen im SHARED AGAIN-Modus Generell Öffnen im SHARED AGAIN-Modus RECORD LOCK - Satzsperre RECORD LOCK - Satzsperre Einzelsatz, mehrere Sätze Einzelsatz, mehrere Sätze FILE LOCK - Dateisperre FILE LOCK - Dateisperre HEADER LOCK - Headersperre HEADER LOCK - Headersperre EXCLUSIVE - exklusives Öffnen EXCLUSIVE - exklusives Öffnen

34 Automatisches Sperren FILE LOCK: ALTER TABLE ALTER TABLE INSERT (xBase) INSERT (xBase) DELETE / REPLACE mit ALL/REST/NEXT x DELETE / REPLACE mit ALL/REST/NEXT x UPDATE (beide) UPDATE (beide) HEADER LOCK: APPEND / BLANK / FOR APPEND / BLANK / FOR INSERT (SQL) INSERT (SQL) RECORD LOCK: APPEND MEMO APPEND MEMO DELETE / REPLACE / RECALL / w/wo NEXT 1 DELETE / REPLACE / RECALL / w/wo NEXT 1 DELETE / BLANK REC. DELETE / BLANK REC. GATHER GATHER CHANGE / EDIT CHANGE / EDIT MODI MEMO MODI MEMO BROWSE (Childs!) BROWSE (Childs!)

35 Sperren auch beim Lesen Beim Verarbeiten von nebenstehenden Befehlen wird nicht gesperrt! Beim Verarbeiten von nebenstehenden Befehlen wird nicht gesperrt! SET LOCK ON oder FLOCK() sinnvoll! SET LOCK ON oder FLOCK() sinnvoll! Ggf. vorher SQL-Select in Cursor Ggf. vorher SQL-Select in Cursor AVERAGE AVERAGE CALCULATE CALCULATE COPY TO (ARRAY) COPY TO (ARRAY) LIST / DISPLAY LIST / DISPLAY LABEL / REPORT LABEL / REPORT SORT SORT COUNT COUNT SUM SUM TOTAL TOTAL

36 Hinweise zur Pufferung Problem: Änderung von Datensätzen durch andere Netz-User erst sichtbar durch/nach: Problem: Änderung von Datensätzen durch andere Netz-User erst sichtbar durch/nach: SET REFRESH SET REFRESH Neue Parameter in VFP 9.0 Neue Parameter in VFP 9.0 SKIP, GOTO, SEEK SKIP, GOTO, SEEK Satzsperre RLOCK Satzsperre RLOCK Lösung: Beim Lesen 1x Sperren Lösung: Beim Lesen 1x Sperren Ggf. locate for recno() = lnrecno Ggf. locate for recno() = lnrecno Neu: FLUSH IN … (FORCE) Neu: FLUSH IN … (FORCE)

37 Referentielle Integrität (RI) Bedeutung der Referentiellen Integrität einer Datenbank Bedeutung der Referentiellen Integrität einer Datenbank Arbeiten mit dem Referential Integrity Builder Arbeiten mit dem Referential Integrity Builder Empfehlung: AMRI-Builder ! Empfehlung: AMRI-Builder !Programmatisch: CREATE TRIGGER CREATE TRIGGER DELETE TRIGGER DELETE TRIGGER _TRIGGERLEVEL _TRIGGERLEVEL Arten von Triggern: DELETE DELETE UPDATE UPDATE INSERT INSERT

38 Besonderheiten der Trigger DELETE-Trigger: Childs löschen mit Parent / verhindern DELETE-Trigger: Childs löschen mit Parent / verhindern Bei DELETE -> Cascading Delete Bei DELETE -> Cascading Delete Nicht bei ZAP (!) Nicht bei ZAP (!) Nicht bei PACK Nicht bei PACK INSERT-Trigger: Childs nur zu Parents INSERT-Trigger: Childs nur zu Parents Bei Append, Insert, Import Bei Append, Insert, Import Auch bei RECALL Auch bei RECALL UPDATE-Trigger: Aktualisierung Fremdschlüsselfelder UPDATE-Trigger: Aktualisierung Fremdschlüsselfelder Bei replace, Gather, Update Bei replace, Gather, Update Nicht bei DELETED() Nicht bei DELETED()

39 Hinweise zu Triggern Im Gegensatz zu Feld-Valid und Satz-Valid ist ein Triggerfehler ein endgültiger Fehler! Im Gegensatz zu Feld-Valid und Satz-Valid ist ein Triggerfehler ein endgültiger Fehler! Das heißt: VFP macht Rollback über alle Ebenen VFP macht Rollback über alle Ebenen Nicht zulässig: Ändern von Daten! Ändern von Daten! Update-Endlosschleife... Update-Endlosschleife... Compound Keys Compound Keys Verschiedene DBCs Verschiedene DBCs Kein Nullify für Delete von Parent Kein Nullify für Delete von Parent Builder nicht änderbar Builder nicht änderbar

40 Zusammenfassung Verbesserungen Transaktionsunterstützung für freie Tabellen Transaktionsunterstützung für freie Tabellen Unterstützung für lange Feldtypen Unterstützung für lange Feldtypen Leerzeichen in Tabellen und View-Namen Leerzeichen in Tabellen und View-Namen Datentyp Varchar / Varbinary Datentyp Varchar / Varbinary Datentyp Blob Datentyp Blob Binär-Index (logischer Ausdruck = 1 Bit) Binär-Index (logischer Ausdruck = 1 Bit) Performanceverbesserungen Performanceverbesserungen Neues Tool: Memo Corruption Scanner Neues Tool: Memo Corruption Scanner

41 BROWSE-Tastaturkürzel Strg+Fzum nächsten Datensatz Strg+Fzum nächsten Datensatz Strg+Gzum vorigen Datensatz Strg+Gzum vorigen Datensatz Strg+Yneuen Datensatz anlegen Strg+Yneuen Datensatz anlegen Strg+TLöschflag umschalten Strg+TLöschflag umschalten Strg+Pos1Memofenster öffnen Strg+Pos1Memofenster öffnen Strg+EnterMemofenster schliessen Strg+EnterMemofenster schliessen Strg+WSpeichern und Schliessen Strg+WSpeichern und Schliessen Strg+F10Maximieren/Wiederherstellen Strg+F10Maximieren/Wiederherstellen

42 Querverweise Schützen einer Tabelle in einem DBC Schützen einer Tabelle in einem DBC Schützen von VFP Daten Schützen von VFP Daten Die Normalisierung von Daten Die Normalisierung von Daten

43 Zusammenfassung Das war das Thema Datenbanken im Schnelldurchlauf … Das war das Thema Datenbanken im Schnelldurchlauf … Datenbankcontainer Datenbankcontainer Tabellen und Felder Tabellen und Felder Nullwerte und Codepages Nullwerte und Codepages Indizes und Sortiersequenzen Indizes und Sortiersequenzen Rushmore-Optimierung Rushmore-Optimierung Relationen Relationen Buffering Buffering Netzwerkprogrammierung Netzwerkprogrammierung Transaktionen Transaktionen Trigger Trigger Referentielle Integrität Referentielle Integrität

44 Vielen Dank! Besuchen Sie unsere Webseiten:


Herunterladen ppt "Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA."

Ähnliche Präsentationen


Google-Anzeigen