Arbeiten mit Tabellen in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker...

Preview:

Citation preview

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.

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

TabellenTabellen

Endung .DBF (DataBase File)Endung .DBF (DataBase File) max. 255 Feldermax. 255 Felder max. 1 Mio. Datensätzemax. 1 Mio. Datensätze max. 2 GB Dateigrössemax. 2 GB Dateigrösse ggf.: Index, Endung .CDX (Compound Index)ggf.: Index, Endung .CDX (Compound Index) ggf.: Einzelindex, Endung .IDX (nicht empfohlen)ggf.: Einzelindex, Endung .IDX (nicht empfohlen) ggf.: Memodatei, Endung FPTggf.: Memodatei, Endung FPT auch als „freie“ Tabellen bezeichnetauch als „freie“ Tabellen bezeichnet

Demo 1: TabellenDemo 1: Tabellen

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

DatenbankengineänderungenDatenbankengineänderungen

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

CharacterCharacter Char, CharacterChar, Character CCDateDate DateDate DDDateTimeDateTime DatetimeDatetime TTNumericNumeric Num, NumericNum, Numeric NNFloatingFloating FloatFloat FFIntegerInteger Int, IntegerInt, Integer IIDouble Double DoubleDouble BBCurrencyCurrency CurrencyCurrency YYLogicalLogical LogicalLogical LLMemoMemo MemoMemo MMGeneralGeneral GeneralGeneral GGPicturePicture PicturePicture PPVarcharVarchar VarcharVarchar VVVarbinaryVarbinary VarbinaryVarbinary QQBlobBlob BlobBlob WW

BlobBlob

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

picturevalpictureval oimg.pictureval = filetostr / bloboimg.pictureval = filetostr / blob loadpictureloadpicture

VarChar / VarBinaryVarChar / VarBinary

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)

IndexartenIndexarten

REGULAR - Normaler SchlüsselREGULAR - Normaler Schlüssel CANDIDATE - Eindeutiger SchlüsselCANDIDATE - Eindeutiger Schlüssel PRIMARY - PrimärschlüsselPRIMARY - Primärschlüssel

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

Neu: BINARY –BinärschlüsselNeu: BINARY –Binärschlüssel

Binary IndexBinary Index

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 …

Sequenz MACHINESequenz MACHINE „„A“ = „a“ A“ = „a“ .F. .F.

Sequenz GENERALSequenz GENERAL „„A“ = „a“ A“ = „a“ .T. .T.

Demo 3: VergleicheDemo 3: Vergleiche

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

zusammengesetzte Felder, Alltrim()zusammengesetzte Felder, Alltrim()

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)

Optimierbare BefehleOptimierbare Befehle

AVERAGEAVERAGE DELETE / BLANKDELETE / BLANK BROWSE => GRID (!)BROWSE => GRID (!) CALCULATECALCULATE CHANGE / EDITCHANGE / EDIT COPY TO (ARRAY)COPY TO (ARRAY) COUNTCOUNT LIST / DISPLAYLIST / DISPLAY EXPORTEXPORT

INDEXINDEX LOCATELOCATE RECALLRECALL REPLACE (ARRAY)REPLACE (ARRAY) LABEL / REPORTLABEL / REPORT SCANSCAN SORTSORT SUMSUM TOTALTOTAL

OptimierungsmöglichkeitenOptimierungsmöglichkeiten

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

Zusammenfassung VerbesserungenZusammenfassung Verbesserungen

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

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

Vielen Dank!Vielen Dank!

Fragen an hotline@dfpug.deFragen an hotline@dfpug.deoder 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

Recommended