DBC Arbeiten mit DBC in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 WebCast Teil 2: Arbeiten mit DBC Mittwoch, 29.6.2005, 16:00 – 17:00 Uhr Eine der Grundlagen der objektorientierten Entwicklungsumgebung Microsoft Visual FoxPro 9.0 ist die integrierte leistungsfähige Datenbankengine für lokale Desktop-Anwendungen. Durch Datenbankcontainer werden freie Tabellen in einen grösseren Sinnzusammenhang gestellt. Behandelt werden erweiterte Tabelleneigenschaften, Relationen, Trigger, referentielle Integrität, Definition von Ansichten, Transaktionen sowie einige diesbezügliche neue Funktionen in der neuen Version. Rainer Becker dFPUG Online-Angebote Loseblattsammlung VFP-Entwicklerkonferenz VFP-Lokalisierung Framework Visual Extend MVP, MCP, ISV Wizards & Builders GmbH Wie bekomme ich VFP ? Update von 6.0, 7.0, 8.0 sowie VS 97 Nicht von VFP 5.0 oder früher Internationale und US/Canada-Version trotz ggf. anderslautender Online-Angabe Preisunterschied durch Dollarverfall Technisch identisch Kein Support / Marketingbudget für US-Version in BRD dFPUG bietet exklusiv „Deutsche Version“ Benutzeroberfläche, Berichtsdesigner, Werkzeuge Datenbankcontainer Verwaltet Zusatzinformationen zu Tabellen (dadurch nicht mehr „freie“ Tabellen) Felder persistente Relationen gespeicherte Prozeduren referentielle Integrität / Trigger , Ereignisse Verbindungen, lokale und remote Views Ein DBC ist kein Data-Dictionary! Tabellenstrukturen im DBF-Header Indexstrukturen im CDX-Header Demo 1: Northwind Exkusives Öffnen erforderlich Ein- und Ausblenden von Elementen Verschiedene Beispiele für Felddefinitionen 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 Gespeicherte Prozeduren I 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 Demo 2: Prozeduren Dokumentenansicht für gespeicherte Prozeduren Direktaufruf von gespeicherten Prozeduren Gespeicherte Prozeduren II Kompilate in DBC-Datensatz sind versionsabhängig 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! DBC-Ereignisse Ab VFP-Version 7, defaultmäßig deaktiviert einschalten über DBC-Optionen Dbsetprop(„Main.dbc“,“Database“,“DBCEVENTS“,.t.) Wenn aktiviert, DBC nicht mehr abwärtskompatibel Funktionen liegen im DBC bei den gespeicherten Prozeduren oder in einer externen PRG-Datei Vorsicht: Datasessions beachten! Für Zugriffsschutz und zur Protokollierung … Demo 3: Events und RI Bearbeiten von Datenbankereignissen Erstellen von Relationen Assistent für Referentiellen Integrität Relationen One-to-One-Relationen One-to-Many-Relationen Many-to-Many-Relationen Basis für referentielle Integrität Einblendung in Datenumgebung Einblendung bei Ansichtserstellung Referentielle Integrität (RI) Bedeutung der Referentiellen Integrität einer Datenbank Arbeiten mit dem Referential Integrity Builder Empfehlung: AMRI-Builder ! Programmatisch: CREATE TRIGGER DELETE TRIGGER _TRIGGERLEVEL Arten von Triggern: DELETE UPDATE INSERT Besonderheiten der Trigger DELETE-Trigger: Childs löschen mit Parent / verhindern INSERT-Trigger: Childs nur zu Parents Bei DELETE -> Cascading Delete Nicht bei ZAP (!) Nicht bei PACK Bei Append, Insert, Import Auch bei RECALL UPDATE-Trigger: Aktualisierung Fremdschlüsselfelder Bei replace, Gather, Update Nicht bei DELETED() Hinweise zu Triggern Im Gegensatz zu Feld-Valid und Satz-Valid ist ein Triggerfehler ein endgültiger Fehler! Das heißt: VFP macht Rollback über alle Ebenen Nicht zulässig: Ändern von Daten! Update-Endlosschleife... Compound Keys Verschiedene DBCs Kein „Nullify“ für Delete von Parent Builder nicht änderbar Multiuser-Datenzugriff Generell Öffnen im SHARED AGAIN-Modus RECORD LOCK - Satzsperre Einzelsatz, mehrere Sätze FILE LOCK - Dateisperre HEADER LOCK - Headersperre EXCLUSIVE - exklusives Öffnen Automatisches Sperren FILE LOCK: ALTER TABLE INSERT (xBase) DELETE / REPLACE mit ALL/REST/NEXT x UPDATE (beide) HEADER LOCK: APPEND / BLANK / FOR INSERT (SQL) RECORD LOCK: APPEND MEMO DELETE / REPLACE / RECALL / w/wo NEXT 1 DELETE / BLANK REC. GATHER CHANGE / EDIT MODI MEMO BROWSE (Childs!) Sperren auch beim Lesen Beim Verarbeiten von nebenstehenden Befehlen wird nicht gesperrt! SET LOCK ON oder FLOCK() sinnvoll! Ggf. vorher SQL-Select in Cursor AVERAGE CALCULATE COPY TO (ARRAY) LIST / DISPLAY LABEL / REPORT SORT COUNT SUM TOTAL Hinweise zur Pufferung Problem: Änderung von Datensätzen durch andere Netz-User erst sichtbar durch/nach: SET REFRESH SKIP, GOTO, SEEK Satzsperre RLOCK Lösung: Beim Lesen 1x Sperren Neue Parameter in VFP 9.0 Ggf. locate for recno() = lnrecno Neu: FLUSH IN … (FORCE) Transaktionen BEGIN TRANS END TRANS ROLLBACK *-- Datenzugriff 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! Hinweise zu 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: Buffering mit Tableupdate und dann END TRANS Freie Tabellen ohne Meldung! Deadlocks möglich - Zugriffsreihenfolge! Zugriffsreihenfolge beachten Zur Vermeidung von Deadlocks im Netzbetrieb: Tabellen nach Parent->Child Datensätze nach Primärschlüssel Immer erst den Parent sperren notfalls per SQL-Select erst die Parents holen notfalls per SQL-Select umsortieren Mehrere Parents ggf. alphabetisch sofern Parents nicht in Parent-Child-Beziehung MAKETRANSACTABLE Maketransactable( ) für freie Tabellen, Cursor von freien Tabellen oder Created Cursor Istransactable( ) für Prüfung Darf noch nicht anderweitig geöffnet sein Kein Table Buffering erlaubt Bei Row Buffering wird Tableupdate durchgeführt Kann danach anderweitig geöffnet werden Transactable endet mit Schliessen letzter Instanz Querverweise 03-21 Schützen einer Tabelle in einem DBC 03-23 Schützen von VFP Daten 03-24 Die Normalisierung von Daten Weiterführendes Material Visual FoxPro 9.0 Visual FoxPro 8.0 Updatebuch Roadshow-CD Lokalisierungs-CD Updatebuch Deutsche Hilfedatei Online-Angebote der dFPUG Forum, Portal, eNewsletter, Homepage, Framework Teil 3: Arbeiten mit SQL Mittwoch, 6.7.2005, 16:00 – 17:00 Uhr Die Standard Query Language, kurz SQL, ist in der lokalen Datenbankengine von Visual FoxPro als kompilierbarer Befehl direkt enthalten. In diesem WebCast werden die umfangreichen neuen Möglichkeiten der SQL-Syntax in der neuen Version Visual FoxPro 9.0 vorgestellt. Mit der neuen Syntax ist Visual FoxPro nunmehr weitestgehend kompatibel zu SQL-Server, welches die Umschaltbarkeit zwischen verschiedenen Datenhaltungssystemen drastisch vereinfacht. Aber selbst die kleinste Anwendung kann von der neuen Flexibilität im SQL-Bereich deutlich profitieren! Teil 4: Arbeiten mit C/S Mittwoch, 13.7.2005, 16:00 – 17:00 Uhr Microsoft Visual FoxPro ist schon seit einem Jahrzehnt ein beliebtes Frontend für Client/Server-Datenbanken wie Microsoft SQL-Server. Über die Hälfte der FoxPro-Entwickler weltweit entwickelt auch oder ausschliesslich Anwendungen auf Basis von MSDE und/oder SQL-Server. In der neuen Version 9.0 von Microsoft Visual FoxPro werden diese Möglichkeiten noch weiter ausgebaut. Unter anderem wurde die Cursor Adaptor-Klasse stark verbessert und weitere Werkzeuge wie der Dataexplorer werden zur Verfügung gestellt. Vielen Dank! Fragen an [email protected] oder besser http://forum.dfpug.de Besuchen Sie unsere Webseiten: http://www.dfpug.de, http://portal.dfpug.de, http://forum.dfpug.de, http://newsletter.dfpug.de, http://devcon.dfpug.de, http://roadshow.dfpug.de, http://www.visualextend.de, http://www.linuxtransfer.de, http://www.visualfoxpro.de