Arbeiten mit Arbeiten mit Tabellen Tabellen in Visual FoxPro in Visual FoxPro 9.0 9.0 deutschsprachige FoxPro User deutschsprachige FoxPro User Group Group Rainer Becker Rainer Becker Microsoft Visual FoxPro 9.0 Microsoft Visual FoxPro 9.0 WebCast WebCast TABELLEN
28
Embed
Arbeiten mit Tabellen in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 WebCast TABELLEN.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Arbeiten mit Tabellen Arbeiten mit Tabellen 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
TABELLEN
Teil 1: Arbeiten mit TabellenTeil 1: Arbeiten mit Tabellen
Mittwoch, 8.6.2005, 16:00 – 17:00 UhrMittwoch, 8.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. Behandelt werden Desktop-Anwendungen. Behandelt werden Tabellenstrukturen, Feldtypen, Indizes, Sortiersequenzen und Tabellenstrukturen, Feldtypen, Indizes, Sortiersequenzen und natürlich die Rushmore-Optimierung von Visual FoxPro sowie natürlich die Rushmore-Optimierung von Visual FoxPro sowie weitere Optimierungsmöglichkeiten für bestehende weitere Optimierungsmöglichkeiten für bestehende Anwendungen unter besonderer Berücksichtigung des neuen Anwendungen unter besonderer Berücksichtigung des neuen lOptimize-Flags für Grids sowie neuer Feldtypen und weiterer lOptimize-Flags für Grids sowie neuer Feldtypen und weiterer Verbesserungen in der neuen Version der Datenbankengine.Verbesserungen in der neuen Version der Datenbankengine.
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
Strukturänderungen (Places)Strukturänderungen (Places) Datenbankcontainer einfach (Northwind)Datenbankcontainer einfach (Northwind) Datenbankcontainer komplex (Hausverwaltung)Datenbankcontainer komplex (Hausverwaltung) Rushmore-Optimierung im Grid (Test)Rushmore-Optimierung im Grid (Test)
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
Hinweise zum DBCHinweise zum DBC
Projektmanager kann DBC offenhalten!Projektmanager kann DBC offenhalten! Separates Datadictionary notwendigSeparates Datadictionary notwendig
für Reindizierung oder Neuerzeugungfür Reindizierung oder Neuerzeugung wahlweise Eigenbau (Alter Table), XCASE, SDT, VFXwahlweise Eigenbau (Alter Table), XCASE, SDT, VFX 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 problematisch bei langen FeldnamenFREE TABLE problematisch bei langen Feldnamen Auch copy to database kopiert Metadaten leider nichtAuch copy to database kopiert Metadaten leider nicht
ALTER TABLE Memofelder vor/zurückALTER TABLE Memofelder vor/zurück Umschalten mitUmschalten mit
SET ENGINEBEHAVIOR oder SYS(3099)SET ENGINEBEHAVIOR oder SYS(3099) Erinnerung: LeerzeichenErinnerung: Leerzeichen
Leerzeichen in Tabellennamen zulässigLeerzeichen in Tabellennamen zulässig Immer „“ bzw. () statt & verwendenImmer „“ bzw. () statt & verwenden Problematisch bei USE IN „tab 1 test“Problematisch bei USE IN „tab 1 test“
Fortsetzung Datenbankcontainer im WebCast Teil 2!Fortsetzung Datenbankcontainer im WebCast Teil 2!
Lange FeldtypenbezeichnungenLange Feldtypenbezeichnungen DatentypDatentyp Langer NameLanger Name Kurzer NameKurzer Name
Alternative zu General-FeldernAlternative zu General-Feldern Ohne OLE-Server, kein OverheadOhne OLE-Server, kein Overhead Read-Only HexCode in MemofeldanzeigeRead-Only HexCode in Memofeldanzeige Kompatibel zu SQL-ServerKompatibel zu SQL-Server Beispiel BilderspeicherungBeispiel Bilderspeicherung
Format = „F“ verhindert Auffüllen des Value mit Format = „F“ verhindert Auffüllen des Value mit Leerstellen bei VarChar oder CHR(0) bei VarBinaryLeerstellen bei VarChar oder CHR(0) bei VarBinary
.Inputmask =„HHHH…HH“ lässt nur .Inputmask =„HHHH…HH“ lässt nur Hexadezimaleingaben zu (0…F), sonst Präfix "0h" Hexadezimaleingaben zu (0…F), sonst Präfix "0h"
SET VarCharMapping ON SET VarCharMapping ON | OFF| OFF Keine Einstellung in Extras->Optionen, Default ONKeine Einstellung in Extras->Optionen, Default ON Tabellen/Cursor-Spalten werden als VarChar Tabellen/Cursor-Spalten werden als VarChar
angelegt, wenn die erzeugende Funktion variable angelegt, wenn die erzeugende Funktion variable Längen liefert (vorname+nachname, func() )Längen liefert (vorname+nachname, func() )
Demo 2: Neue FeldtypenDemo 2: Neue Feldtypen
Unveränderte Dateilänge (Varchar)Unveränderte Dateilänge (Varchar) Darstellung Datentypen (Datatypes)Darstellung Datentypen (Datatypes) Bildzuordnung (Blob)Bildzuordnung (Blob) Leerzeichen in Dateinamen (Makros)Leerzeichen in Dateinamen (Makros)
nur in DBC, nicht in freien Tabellennur in DBC, nicht in freien Tabellen UNIQUE - „Einmaliger“ SchlüsselUNIQUE - „Einmaliger“ Schlüssel
NICHT VERWENDEN! Sinnvoll gelegentlich in ViewsNICHT VERWENDEN! Sinnvoll gelegentlich in Views wird nicht mehr angeboten, aber weiterhin vorhandenwird nicht mehr angeboten, aber weiterhin vorhanden
Wesentlich kleiner (1:30)Wesentlich kleiner (1:30) dadurch schnelleres INSERT/UPDATEdadurch schnelleres INSERT/UPDATE Bitmap kann direkt geladen werdenBitmap kann direkt geladen werden
Rushmore-Optimierung SYS(3054,1)Rushmore-Optimierung SYS(3054,1) FULL: Linke Seite ist der logische AusdruckFULL: Linke Seite ist der logische Ausdruck SCAN FOR, SET FILTER, etc…SCAN FOR, SET FILTER, etc… NEU: auch für NOT und FOR (NOT) DELETED()NEU: auch für NOT und FOR (NOT) DELETED()
Zulässig: Nur logische AusdrückeZulässig: Nur logische Ausdrücke Unzulässig: SET ORDER, SET FILTER, .NULL.Unzulässig: SET ORDER, SET FILTER, .NULL.
PrimärschlüsselPrimärschlüssel
Real-World-SchlüsselReal-World-Schlüssel meist zusammengesetztmeist zusammengesetzt Änderungen immer möglich! Änderungen immer möglich! Eindeutigkeit letztendlich nicht garantiertEindeutigkeit letztendlich nicht garantiert RI: Cascading Update notwendig!RI: Cascading Update notwendig!
Surrogate / Abstract -SchlüsselSurrogate / Abstract -Schlüssel fortlaufendfortlaufend selbst erzeugt (ggf. mit zentraler Tabelle)selbst erzeugt (ggf. mit zentraler Tabelle) Datenmodell komplett erstellbar ohne AttributeDatenmodell komplett erstellbar ohne Attribute RI: kein Cascading Update notwendigRI: kein Cascading Update notwendig
Relationen basieren auf IndizesRelationen basieren auf Indizes
SET RELATIONSET RELATION SET SKIPSET SKIP Relation( )Relation( ) Target( )Target( )
Hinweise:Hinweise: UmgebungsfensterUmgebungsfenster SET RELATION TO SET RELATION TO
RECNO( )RECNO( )
Alternative: Alternative:
SQL-JoinsSQL-Joins
Alternative:Alternative:
SET KEY RANGESET KEY RANGE
Hinweis:Hinweis:
INDEXSEEK( )INDEXSEEK( )
Collate-SequenzenCollate-Sequenzen
SET COLLATE TO „<collate>“SET COLLATE TO „<collate>“ 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“, Sonstige: „DUTCH“, „ICELAND“, „NORDAN“,
„SPANISH“, „SWEFIN“„SPANISH“, „SWEFIN“ Ggf. doppelte Index-Definition mit verschiedenen Ggf. doppelte Index-Definition mit verschiedenen
Collate-Sequenzen!Collate-Sequenzen!
Die große VergleichsfalleDie große Vergleichsfalle
Optimierung und Vergleiche Optimierung und Vergleiche basieren auf aktuell basieren auf aktuell eingestellter Sortiersequenz!eingestellter Sortiersequenz!
SET COLLATE gilt für SET COLLATE gilt für aktuelle Datasessionaktuelle Datasession
SCAN WHILE / REST bei SCAN WHILE / REST bei anderer Sortiersequenz anderer Sortiersequenz verlässt Schleife …verlässt Schleife …
Stringvergleiche und SortiersequenzenStringvergleiche und Sortiersequenzen
Rushmore-OptimierungRushmore-Optimierung
Indexdefinition vorhandenIndexdefinition vorhanden möglichst keine FOR/NOT-Klausel im Indexmöglichst keine FOR/NOT-Klausel im Index Identische IndexdefinitionIdentische Indexdefinition
Index auf Deleted() (bei SET DELE ON) problematisch!Index auf Deleted() (bei SET DELE ON) problematisch! Passende Collatesequenz Passende Collatesequenz (IDXCOLLATE)(IDXCOLLATE)
möglichst keine Sortierung (SET ORDER TO)möglichst 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 mitKontrolle mit SYS(3054,1/11, neu) und SYS(3092)SYS(3054,1/11, neu) und SYS(3092)
Verzeichniskomprimierung (+10% Performance!)Verzeichniskomprimierung (+10% Performance!) Virusfilter für Endungen abschaltenVirusfilter für Endungen abschalten Verzicht auf Verschlüsselung (siehe oben)Verzicht auf Verschlüsselung (siehe oben) Verzicht auf Indizes mit wenig UnterscheidungVerzicht auf Indizes mit wenig Unterscheidung Abschaltung Opportunistic LockingAbschaltung Opportunistic Locking HardwareHardware
Mehrere / schnellere NetzwerkkartenMehrere / schnellere Netzwerkkarten 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 CacheGute HD-Controller mit viel Cache Verteilung von DBF und CDX auf versch. FestplattenVerteilung von DBF und CDX auf versch. Festplatten
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
Unterstützung für lange FeldtypbezeichnungenUnterstützung für lange Feldtypbezeichnungen Leerzeichen in Tabellen und View-NamenLeerzeichen in Tabellen und View-Namen Neue Datentypen Varchar / Varbinary / BlobNeue Datentypen Varchar / Varbinary / Blob Binär-Index (logischer Ausdruck = 1 Bit)Binär-Index (logischer Ausdruck = 1 Bit) Diverse PerformanceverbesserungenDiverse Performanceverbesserungen Speicherbarkeit der OptimierungsprüfungSpeicherbarkeit der Optimierungsprüfung Hinweis: Transaktionen auch für freie TabellenHinweis: Transaktionen auch für freie Tabellen Neues Tool: Memo Corruption ScannerNeues Tool: Memo Corruption Scanner
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 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.