Arbeiten mit Daten in Visual FoxPro 9.0

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

MySQL.
SQL als Abfragesprache
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Otto-von-Guericke-Universität Magdeburg Gamal Kassem 1 Tabellenzeile mit READ lesen READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1.... Compn.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
Datenbanken 10: Einfügen, Ändern, Löschen
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
2.2 Definition eines Datenbankschemas (SQL-DDL)
Grundlagen der Tabellen von FoxPro/Windows und Microsoft Visual FoxPro
Arbeiten mit DBC in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 WebCast DBC.
Datenbankcontainer in Microsoft Visual FoxPro
Client / Server mit Visual FoxPro 9.0
Arbeiten mit Tabellen in Visual FoxPro 9.0
Datenmodellierung mit XCASE
Wizards & Builders GmbH Die Benutzeroberfläche Interaktives Arbeiten mit den Werkzeugen/Assistenten von Microsoft Visual FoxPro.
Arbeiten mit SQL in Visual FoxPro 9.0
MSDN Webcast Visual Studio 2005 mit Visual FoxPro Jochen Kirstätter Mai 2005 –
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Bidirektionales VFX-XML-Interface für Daten-Import/Export Visual Extend Anwendertreffen 2009 Rainer Becker, Frank Kropp deutschsprachige FoxPro User Group.
Neue DBF und DBC Befehle in Visual FoxPro
Lokal Views (Ansichten) in Visual FoxPro
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Rushmore - Einführung oder wie Sie Fehler vermeiden.
VFX Schnelle Anwendungs-entwicklung mit Visual FoxPro 9.0 und Visual Extend 9.0 deutschsprachige FoxPro User Group Uwe Habermann Microsoft Visual FoxPro.
Client/Server mit Visual FoxPro 9.0
Arbeiten mit Formularen in Visual FoxPro 9.0
Arbeiten mit Konstanten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow CONST.
Arbeiten mit SQL in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow SQL.
Erstellen von WebServices mit Visual FoxPro 9.0
Einführung zur Roadshow zu Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow INTRO.
Visual Extend 9.5ff Most Wanted Features deutschsprachige FoxPro User Group Rainer Becker VFXWISH06.
Netzwerkprogrammierung unter Visual FoxPro. © 1999 TMN-Systemberatung GmbH Probleme im Netzbetrieb n Mehrere Benutzer arbeiten auf den gleichen Datensatz.
VFX 10.0 Visual Extend Datenzugriff
Visual FoxPro 6.0 Visual FoxPro einrichten Datenbanken und Tabellen.
Visual Extend Weitere Features deutschsprachige FoxPro User Group Uwe Habermann VFX 25 D.
Visual Extend Features für Entwickler deutschsprachige FoxPro User Group Uwe Habermann VFX 05 D.
Visual Extend Application Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 07 D.
Visual Extend Produktaktivierung deutschsprachige FoxPro User Group Uwe Habermann VFX 23 D.
Visual Extend Kundeninstallation deutschsprachige FoxPro User Group Uwe Habermann VFX 26 D.
Datenbankentwicklung IV-LK
Visual Extend Features der generierten Anwendung für Endbenutzer deutschsprachige FoxPro User Group Uwe Habermann VFX 04 D.
Relationale Datenbanken III
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Visual Extend CTableForm Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 08 D.
Visual Extend CursorAdapter deutschsprachige FoxPro User Group Uwe Habermann VFX 18 D.
Visual Extend CDataFormPage Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 09 D.
Visual Extend CPickAlternate Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 14 D.
Visual Extend Download, Installation, Registrierung deutschsprachige FoxPro User Group Uwe Habermann VFX 01 D.
Visual Extend Mandantenfähigkeit deutschsprachige FoxPro User Group Uwe Habermann VFX 22 D.
Visual Extend CPickAlterTextbox Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 16 D.
Visual Extend CPickTextbox Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 15 D.
Visual Extend Lokalisierung deutschsprachige FoxPro User Group Uwe Habermann VFX 24 D.
Visual Extend CPickField Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 13 D.
Visual Extend Application Wizard deutschsprachige FoxPro User Group Uwe Habermann VFX 06 D.
Visual Extend COneToMany Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 10 D.
Visual Extend CTreeviewForm Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 11 D.
Visual Extend Parent/Child Builder deutschsprachige FoxPro User Group Uwe Habermann VFX 17 D.
Visual Extend CDataFormPage-Formulare mit CursorAdapter deutschsprachige FoxPro User Group Uwe Habermann VFX 19 D.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
Datenbanksysteme für hörer anderer Fachrichtungen
Uwe Habermann Venelina Jordanova Bestehende VFX-Anwendungen leicht erweitern.
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Datenbank für Skriptenverkauf
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
SQL Basics Schulung –
 Präsentation transkript:

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

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

Datenbankcontainer Verwaltet Zusatzinformationen zu Tabellen (nicht „freie“ Tabellen) Felder und Indizes 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

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

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

Lange Feldtypenbezeichnungen Datentyp Langer Name Kurzer Name Character Char, Character C Date Date D DateTime Datetime T Numeric Num, Numeric N Floating Float F Integer Int, Integer I Double Double B Currency Currency Y Logical Logical L Memo Memo M General General G Picture Picture P Varchar Varchar V Varbinary Varbinary Q Blob Blob W

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

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

VarChar / 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" SET VarCharMapping ON | OFF 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() )

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

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 …

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

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

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

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

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

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

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

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

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

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

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

Buffermode 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()

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( ) / SetProp( ) 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 Vorführung View-Designer

Sonderfälle Allgemeine Probleme: GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld verlassen! SetFldState( ) bei Views mit Requery() 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! Tablerevert: Revert im View versagt Primary Key doppelt: Letzter gilt!

Transaktionen BEGIN TRANS END TRANS ROLLBACK TXNLEVEL() *-- 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!

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

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 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

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 Neue Parameter in VFP 9.0 SKIP, GOTO, SEEK Satzsperre RLOCK Lösung: Beim Lesen 1x Sperren Ggf. locate for recno() = lnrecno Neu: FLUSH IN … (FORCE)

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 Bei DELETE -> Cascading Delete Nicht bei ZAP (!) Nicht bei PACK INSERT-Trigger: Childs nur zu Parents 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

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

BROWSE-Tastaturkürzel Strg+F zum nächsten Datensatz Strg+G zum vorigen Datensatz Strg+Y neuen Datensatz anlegen Strg+T Löschflag umschalten Strg+Pos1 Memofenster öffnen Strg+Enter Memofenster schliessen Strg+W Speichern und Schliessen Strg+F10 Maximieren/Wiederherstellen

Querverweise 03-21 Schützen einer Tabelle in einem DBC 03-23 Schützen von VFP Daten 03-24 Die Normalisierung von Daten

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

Vielen Dank! 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