Upload
gerde-gebauer
View
126
Download
1
Embed Size (px)
Citation preview
Arbeiten mit DBC Arbeiten mit DBC in Visual FoxPro 9.0in Visual FoxPro 9.0
deutschsprachige FoxPro User Groupdeutschsprachige FoxPro User Group
Rainer BeckerRainer Becker
Microsoft Visual FoxPro 9.0 WebCastMicrosoft Visual FoxPro 9.0 WebCast
DBC
Teil 2: Arbeiten mit DBCTeil 2: Arbeiten mit DBC
Mittwoch, 29.6.2005, 16:00 – 17:00 UhrMittwoch, 29.6.2005, 16:00 – 17:00 Uhr Eine der Grundlagen der objektorientierten Eine der Grundlagen der objektorientierten
Entwicklungsumgebung Microsoft Visual FoxPro 9.0 ist die Entwicklungsumgebung Microsoft Visual FoxPro 9.0 ist die integrierte leistungsfähige Datenbankengine für lokale integrierte leistungsfähige Datenbankengine für lokale Desktop-Anwendungen. Durch Datenbankcontainer werden Desktop-Anwendungen. Durch Datenbankcontainer werden freie Tabellen in einen grösseren Sinnzusammenhang gestellt. freie Tabellen in einen grösseren Sinnzusammenhang gestellt. Behandelt werden erweiterte Tabelleneigenschaften, Behandelt werden erweiterte Tabelleneigenschaften, Relationen, Trigger, referentielle Integrität, Definition von Relationen, Trigger, referentielle Integrität, Definition von Ansichten, Transaktionen sowie einige diesbezügliche neue Ansichten, Transaktionen sowie einige diesbezügliche neue Funktionen in der neuen Version.Funktionen in der neuen Version.
Rainer BeckerRainer Becker
dFPUGdFPUG Online-AngeboteOnline-Angebote LoseblattsammlungLoseblattsammlung
VFP-EntwicklerkonferenzVFP-Entwicklerkonferenz VFP-LokalisierungVFP-Lokalisierung Framework Visual ExtendFramework Visual Extend MVP, MCP, ISVMVP, MCP, ISV Wizards & Builders GmbHWizards & Builders GmbH
Wie bekomme ich VFP ?Wie bekomme ich VFP ?
Update von 6.0, 7.0, 8.0 sowie VS 97Update von 6.0, 7.0, 8.0 sowie VS 97 Nicht von VFP 5.0 oder früherNicht von VFP 5.0 oder früher
trotz ggf. anderslautender Online-Angabetrotz ggf. anderslautender Online-Angabe
Internationale und US/Canada-VersionInternationale und US/Canada-Version Preisunterschied durch DollarverfallPreisunterschied durch Dollarverfall Technisch identischTechnisch identisch Kein Support / Marketingbudget für US-Version in BRDKein Support / Marketingbudget für US-Version in BRD
dFPUG bietet exklusiv „Deutsche Version“dFPUG bietet exklusiv „Deutsche Version“ Benutzeroberfläche, Berichtsdesigner, WerkzeugeBenutzeroberfläche, Berichtsdesigner, Werkzeuge
DatenbankcontainerDatenbankcontainer
Verwaltet ZusatzinformationenVerwaltet Zusatzinformationen zu Tabellen (dadurch nicht mehr „freie“ Tabellen)zu Tabellen (dadurch nicht mehr „freie“ Tabellen) FelderFelder persistente Relationen persistente Relationen gespeicherte Prozedurengespeicherte Prozeduren referentielle Integrität / Trigger , Ereignissereferentielle Integrität / Trigger , Ereignisse Verbindungen, lokale und remote ViewsVerbindungen, lokale und remote Views
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
Demo 1: NorthwindDemo 1: Northwind
Exkusives Öffnen erforderlichExkusives Öffnen erforderlich Ein- und Ausblenden von ElementenEin- und Ausblenden von Elementen Verschiedene Beispiele für FelddefinitionenVerschiedene Beispiele für Felddefinitionen
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
Gespeicherte Prozeduren IGespeicherte Prozeduren I
Gehören imanent zu den Tabellen und wird als Gehören imanent zu den Tabellen und wird als Prozedur-Datei gesetzt!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
Demo 2: ProzedurenDemo 2: Prozeduren
Dokumentenansicht für gespeicherte ProzedurenDokumentenansicht für gespeicherte Prozeduren Direktaufruf von gespeicherten ProzedurenDirektaufruf von gespeicherten Prozeduren
Gespeicherte Prozeduren IIGespeicherte Prozeduren II
Kompilate in DBC-Datensatz sind versionsabhängig Kompilate in DBC-Datensatz sind versionsabhängig d.h. Neukompilieren (!)d.h. Neukompilieren (!) ggf. ausgelagerte Prozedurdatei verwendenggf. ausgelagerte Prozedurdatei verwenden
Tabellen/Felder finden „richtige“ Prozedurdatei - Tabellen/Felder finden „richtige“ Prozedurdatei - eigene Anwendung verwendet aber nur aktiven DBC!eigene Anwendung verwendet aber nur aktiven DBC! Set database toSet database to Namenskonventionen für DBC-Funktionen!Namenskonventionen für DBC-Funktionen!
DBC-EreignisseDBC-Ereignisse
Ab VFP-Version 7, defaultmäßig deaktiviertAb VFP-Version 7, defaultmäßig deaktiviert einschalten über DBC-Optioneneinschalten über DBC-Optionen Dbsetprop(„Main.dbc“,“Database“,“DBCEVENTS“,.t.)Dbsetprop(„Main.dbc“,“Database“,“DBCEVENTS“,.t.)
Wenn aktiviert, DBC nicht mehr abwärtskompatibelWenn aktiviert, DBC nicht mehr abwärtskompatibel Funktionen liegen im DBC bei den gespeicherten Funktionen liegen im DBC bei den gespeicherten
ProzedurenProzeduren oder in einer externen PRG-Datei oder in einer externen PRG-Datei Vorsicht: Datasessions beachten!Vorsicht: Datasessions beachten! Für Zugriffsschutz und zur Protokollierung …Für Zugriffsschutz und zur Protokollierung …
Demo 3: Events und RIDemo 3: Events und RI
Bearbeiten von DatenbankereignissenBearbeiten von Datenbankereignissen Erstellen von RelationenErstellen von Relationen Assistent für Referentiellen IntegritätAssistent für Referentiellen Integrität
RelationenRelationen
One-to-One-RelationenOne-to-One-Relationen One-to-Many-RelationenOne-to-Many-Relationen Many-to-Many-RelationenMany-to-Many-Relationen
Basis für referentielle IntegritätBasis für referentielle Integrität Einblendung in DatenumgebungEinblendung in Datenumgebung Einblendung bei AnsichtserstellungEinblendung bei Ansichtserstellung
Referentielle Integrität (RI)Referentielle Integrität (RI)
Bedeutung der Bedeutung der Referentiellen Integrität Referentiellen Integrität einer Datenbankeiner Datenbank
Arbeiten mit dem Arbeiten mit dem Referential Integrity Referential Integrity BuilderBuilder
Empfehlung:Empfehlung:AMRI-Builder !AMRI-Builder !
Programmatisch:Programmatisch: CREATE TRIGGERCREATE TRIGGER DELETE TRIGGERDELETE TRIGGER _TRIGGERLEVEL_TRIGGERLEVEL
Arten von Triggern:Arten von Triggern: DELETEDELETE UPDATEUPDATE INSERTINSERT
Besonderheiten der TriggerBesonderheiten der Trigger
DELETE-Trigger: Childs löschen mit Parent / verhindernDELETE-Trigger: Childs löschen mit Parent / verhindern Bei DELETE -> Cascading DeleteBei DELETE -> Cascading Delete Nicht bei ZAP (!)Nicht bei ZAP (!) Nicht bei PACKNicht bei PACK
INSERT-Trigger: Childs nur zu ParentsINSERT-Trigger: Childs nur zu Parents Bei Append, Insert, ImportBei Append, Insert, Import Auch bei RECALLAuch bei RECALL
UPDATE-Trigger: Aktualisierung FremdschlüsselfelderUPDATE-Trigger: Aktualisierung Fremdschlüsselfelder Bei replace, Gather, UpdateBei replace, Gather, Update Nicht bei DELETED()Nicht bei DELETED()
Hinweise zu TriggernHinweise zu Triggern
Im Gegensatz zu Feld-Valid Im Gegensatz zu Feld-Valid und Satz-Valid ist ein und Satz-Valid ist ein Triggerfehler ein Triggerfehler ein endgültiger Fehler!endgültiger Fehler!
Das heißt:Das heißt: VFP macht Rollback über VFP macht Rollback über
alle Ebenenalle Ebenen
Nicht zulässig:Nicht zulässig: Ändern von Daten!Ändern von Daten!
Update-Endlosschleife...Update-Endlosschleife...
Compound KeysCompound Keys Verschiedene DBCsVerschiedene DBCs Kein „Nullify“ für Delete Kein „Nullify“ für Delete
von Parentvon Parent Builder nicht änderbarBuilder nicht änderbar
Multiuser-DatenzugriffMultiuser-Datenzugriff
Generell Öffnen im SHARED AGAIN-ModusGenerell Öffnen im SHARED AGAIN-Modus
RECORD LOCK - SatzsperreRECORD LOCK - Satzsperre Einzelsatz, mehrere SätzeEinzelsatz, mehrere Sätze
FILE LOCK - DateisperreFILE LOCK - Dateisperre HEADER LOCK - HeadersperreHEADER LOCK - Headersperre EXCLUSIVE - exklusives ÖffnenEXCLUSIVE - exklusives Öffnen
Automatisches SperrenAutomatisches Sperren
FILE LOCK:FILE LOCK: ALTER TABLEALTER TABLE INSERT (xBase)INSERT (xBase) DELETE / REPLACE mit DELETE / REPLACE mit
ALL/REST/NEXT xALL/REST/NEXT x UPDATE (beide)UPDATE (beide)
HEADER LOCK:HEADER LOCK: APPEND / BLANK / FORAPPEND / BLANK / FOR INSERT (SQL)INSERT (SQL)
RECORD LOCK:RECORD LOCK: APPEND MEMOAPPEND MEMO DELETE / REPLACE / DELETE / REPLACE /
RECALL / w/wo NEXT 1RECALL / w/wo NEXT 1 DELETE / BLANK REC.DELETE / BLANK REC. GATHERGATHER CHANGE / EDITCHANGE / EDIT MODI MEMOMODI MEMO BROWSE (Childs!)BROWSE (Childs!)
Sperren auch beim LesenSperren auch beim Lesen
Beim Verarbeiten von Beim Verarbeiten von nebenstehenden Befehlen nebenstehenden Befehlen wird nicht gesperrt!wird nicht gesperrt!
SET LOCK ON oder SET LOCK ON oder FLOCK() sinnvoll!FLOCK() sinnvoll!
Ggf. vorher SQL-Select in Ggf. vorher SQL-Select in CursorCursor
AVERAGEAVERAGE CALCULATECALCULATE COPY TO (ARRAY)COPY TO (ARRAY) LIST / DISPLAYLIST / DISPLAY LABEL / REPORTLABEL / REPORT SORTSORT COUNTCOUNT SUMSUM TOTALTOTAL
Hinweise zur PufferungHinweise zur Pufferung
Problem: Änderung von Datensätzen durch andere Problem: Änderung von Datensätzen durch andere Netz-User erst sichtbar durch/nach:Netz-User erst sichtbar durch/nach: SET REFRESHSET REFRESH
Neue Parameter in VFP 9.0Neue Parameter in VFP 9.0
SKIP, GOTO, SEEKSKIP, GOTO, SEEK Satzsperre RLOCKSatzsperre RLOCK
Lösung: Beim Lesen 1x SperrenLösung: Beim Lesen 1x Sperren Ggf. locate for recno() = lnrecnoGgf. locate for recno() = lnrecno
Neu: FLUSH IN … (FORCE)Neu: FLUSH IN … (FORCE)
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 zählt!Äußerste Ebene 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!
Hinweise zu TransaktionenHinweise zu Transaktionen
Buffering eingeschaltet = Transaktion läuft nur auf Buffering eingeschaltet = Transaktion läuft nur auf Buffer und nicht auf Platte!Buffer und nicht auf Platte!
Buffering ausgeschaltet = Transaktion läßt Buffering ausgeschaltet = Transaktion läßt Einschalten Buffering nicht zu!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 Lösung: Buffering mit Tableupdate und dann END TRANSTRANS
Freie Tabellen ohne Meldung!Freie Tabellen ohne Meldung! Deadlocks möglich - Zugriffsreihenfolge!Deadlocks möglich - Zugriffsreihenfolge!
Zugriffsreihenfolge beachtenZugriffsreihenfolge beachten
Zur Vermeidung von Deadlocks im Netzbetrieb:Zur Vermeidung von Deadlocks im Netzbetrieb: 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
MAKETRANSACTABLEMAKETRANSACTABLE
Maketransactable( ) für freie Tabellen, Cursor von Maketransactable( ) für freie Tabellen, Cursor von freien Tabellen oder Created Cursorfreien Tabellen oder Created Cursor
Istransactable( ) für PrüfungIstransactable( ) für Prüfung Darf noch nicht anderweitig geöffnet seinDarf noch nicht anderweitig geöffnet sein Kein Table Buffering erlaubtKein Table Buffering erlaubt Bei Row Buffering wird Tableupdate durchgeführtBei Row Buffering wird Tableupdate durchgeführt Kann danach anderweitig geöffnet werdenKann danach anderweitig geöffnet werden Transactable endet mit Schliessen letzter InstanzTransactable endet mit Schliessen letzter Instanz
QuerverweiseQuerverweise
03-21 Schützen einer Tabelle in einem DBC03-21 Schützen einer Tabelle in einem DBC 03-23 Schützen von VFP Daten03-23 Schützen von VFP Daten 03-24 Die Normalisierung von Daten03-24 Die Normalisierung von Daten
Weiterführendes MaterialWeiterführendes Material
Visual FoxPro 9.0Visual FoxPro 9.0 UpdatebuchUpdatebuch Roadshow-CDRoadshow-CD Lokalisierungs-CDLokalisierungs-CD
Visual FoxPro 8.0Visual FoxPro 8.0 UpdatebuchUpdatebuch Deutsche HilfedateiDeutsche Hilfedatei
Online-Angebote der dFPUGOnline-Angebote der dFPUG Forum, Portal, eNewsletter, Homepage, FrameworkForum, Portal, eNewsletter, Homepage, Framework
Teil 3: Arbeiten mit SQLTeil 3: Arbeiten mit SQL
Mittwoch, 6.7.2005, 16:00 – 17:00 UhrMittwoch, 6.7.2005, 16:00 – 17:00 Uhr Die Standard Query Language, kurz SQL, ist in der lokalen Die Standard Query Language, kurz SQL, ist in der lokalen
Datenbankengine von Visual FoxPro als kompilierbarer Datenbankengine von Visual FoxPro als kompilierbarer Befehl direkt enthalten. In diesem WebCast werden die Befehl direkt enthalten. In diesem WebCast werden die umfangreichen neuen Möglichkeiten der SQL-Syntax in der umfangreichen neuen Möglichkeiten der SQL-Syntax in der neuen Version Visual FoxPro 9.0 vorgestellt. Mit der neuen neuen Version Visual FoxPro 9.0 vorgestellt. Mit der neuen Syntax ist Visual FoxPro nunmehr weitestgehend kompatibel Syntax ist Visual FoxPro nunmehr weitestgehend kompatibel zu SQL-Server, welches die Umschaltbarkeit zwischen zu SQL-Server, welches die Umschaltbarkeit zwischen verschiedenen Datenhaltungssystemen drastisch vereinfacht. verschiedenen Datenhaltungssystemen drastisch vereinfacht. Aber selbst die kleinste Anwendung kann von der neuen Aber selbst die kleinste Anwendung kann von der neuen Flexibilität im SQL-Bereich deutlich profitieren!Flexibilität im SQL-Bereich deutlich profitieren!
Teil 4: Arbeiten mit C/STeil 4: Arbeiten mit C/S
Mittwoch, 13.7.2005, 16:00 – 17:00 UhrMittwoch, 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!Vielen Dank!
Fragen an [email protected] an [email protected] besser http://forum.dfpug.de oder besser http://forum.dfpug.de
Besuchen Sie unsere Webseiten: Besuchen Sie unsere Webseiten: http://www.dfpug.dehttp://www.dfpug.de, , http://portal.dfpug.dehttp://portal.dfpug.de, , http://forum.dfpug.dehttp://forum.dfpug.de, ,
http://newsletter.dfpug.dehttp://newsletter.dfpug.de, , http://devcon.dfpug.dehttp://devcon.dfpug.de, , http://roadshow.dfpug.de, http://www.visualextend.de, http://roadshow.dfpug.de, http://www.visualextend.de,
http://www.linuxtransfer.de, http://www.visualfoxpro.de http://www.linuxtransfer.de, http://www.visualfoxpro.de