View
126
Download
3
Category
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