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

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

Transcript of Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft...

Page 1: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Arbeiten mit Daten in Arbeiten mit Daten in Visual FoxPro 9.0Visual FoxPro 9.0

deutschsprachige FoxPro User Groupdeutschsprachige FoxPro User Group

Rainer BeckerRainer Becker

Microsoft Visual FoxPro 9.0 RoadshowMicrosoft Visual FoxPro 9.0 Roadshow

DATA

Page 2: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

VortragsthemenVortragsthemen DatenbankcontainerDatenbankcontainer Tabellen und FelderTabellen und Felder Nullwerte und CodepagesNullwerte und Codepages Indizes und SortiersequenzenIndizes und Sortiersequenzen Rushmore-OptimierungRushmore-Optimierung RelationenRelationen BufferingBuffering NetzwerkprogrammierungNetzwerkprogrammierung TransaktionenTransaktionen TriggerTrigger Referentielle IntegritätReferentielle Integrität

Page 3: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

DatenbankcontainerDatenbankcontainer

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

Page 4: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 5: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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“

Page 6: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 7: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

FeldartenFeldarten Character / ZeichenCharacter / Zeichen (c) (c)

Character BinaryCharacter Binary Numeric / ZahlNumeric / Zahl (n) (n) Date / DatumDate / Datum (d) (d) Logical / LogischLogical / Logisch (l) (l) Memofelder (Char)Memofelder (Char) m(c) m(c)

Memo BinaryMemo Binary GeneralGeneral AutoIncrementAutoIncrement Neu: BlobNeu: Blob

Integer / IntegerInteger / Integer i(n) i(n) Double / Doppelte G.Double / Doppelte G. b(n) b(n) Float / FließkommaFloat / Fließkomma f(n) f(n) Currency / WährungCurrency / Währung y(y) y(y) DateTime / DatumZeit t(t)DateTime / DatumZeit t(t) Neu: VarCharacterNeu: VarCharacter Neu: VarBinaryNeu: VarBinary

Feldlänge Memo / General / Blob Feldlänge Memo / General / Blob von 4 Bytesvon 4 Bytes

Page 8: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 9: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 10: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 11: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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!

Page 12: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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 …

Page 13: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Sonderfälle LeerfelderSonderfälle Leerfelder

EMPTY( )EMPTY( ) ISBLANK( )ISBLANK( ) ISNULL( )ISNULL( ) SET NULLSET NULL NVL( )NVL( ) EVL( ) – besonders praktisch für Parameterprüfung!EVL( ) – besonders praktisch für Parameterprüfung! Beispiel: Statistik, LogikBeispiel: Statistik, Logik

Page 14: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

IndizesIndizes

Grundlagen:Grundlagen: Separate DateiSeparate Datei B-BaumB-Baum Schlüssel 100 B. IDX/240 Schlüssel 100 B. IDX/240

B. CDXB. CDX Ausdruck 220 B.Ausdruck 220 B. Kein Alltrim()!Kein Alltrim()! AusdrückeAusdrücke

Benötigt für:Benötigt für: Rushmore-OptimierungRushmore-Optimierung SuchbefehleSuchbefehle RelationenRelationen dito persistentdito persistent Referentielle IntegritätReferentielle Integrität

Page 15: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

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

Page 16: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 17: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Funktionen und RelationenFunktionen und Relationen

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

Page 18: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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!

Page 19: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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.

Page 20: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

CodepagesCodepages

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

Page 21: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Rushmore-OptimierungRushmore-Optimierung

Indexdefinition vorhandenIndexdefinition vorhanden Keine FOR/NOT-Klausel im IndexKeine 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)

Keine Sortierung (SET ORDER TO)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)

Page 22: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 23: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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 HardwareHardware

Schnelle Netzwerkkarten / VerbindungenSchnelle Netzwerkkarten / Verbindungen Mehrere Netzwerkkarten im ServerMehrere Netzwerkkarten im Server 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

Page 24: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

BuffermodeBuffermode

Buffermodes:Buffermodes: 1-None1-None 2-Pessimistic Row2-Pessimistic Row 3-Pessimistic Table3-Pessimistic Table 4-Optimistic Row4-Optimistic Row 5-Optimistic Table5-Optimistic Table Row: Skip = Update (!)Row: Skip = Update (!)

Optimistic:Optimistic: Record changed!Record changed! Curval/Oldval()Curval/Oldval() GetFldState()GetFldState()

Table-Buffering:Table-Buffering: Getnextmodified()Getnextmodified()

Page 25: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Funktionen im EinsatzFunktionen im Einsatz

Beispiele:Beispiele:

? GetFldState(-1) != Repl(„1“,Fcount()+1)? GetFldState(-1) != Repl(„1“,Fcount()+1)

? Left( GetFldState(-1),1) != „1“? Left( GetFldState(-1),1) != „1“

Goto ( GetNextModified( Recno() ) )Goto ( GetNextModified( Recno() ) )

? Field( At( „2“, GetFldState(-1) ) )? Field( At( „2“, GetFldState(-1) ) )

? SetFldState( „Feld“, 1 )? SetFldState( „Feld“, 1 ) && Views!&& Views!

Achtung: Negative Record-Nummern!Achtung: Negative Record-Nummern!

Page 26: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 27: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

CursorGetProp( ) / SetProp( )CursorGetProp( ) / SetProp( )

Allgemein:Allgemein: Buffering (ein- /ausschalten, abfragen, Wert 1-5)Buffering (ein- /ausschalten, abfragen, Wert 1-5) Caption (Auslesen Text für Feldlabel zur Laufzeit)Caption (Auslesen Text für Feldlabel zur Laufzeit)

nur für Views (Auch im View-Designer):nur für Views (Auch im View-Designer): CompareMemoCompareMemo UpdatableUpdatable Updatable Field ListUpdatable Field List Where TypeWhere Type

Vorführung View-DesignerVorführung View-Designer

Page 28: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

SonderfälleSonderfälle

Allgemeine Probleme:Allgemeine Probleme:

GETNEXTMODIFIED / GETNEXTMODIFIED / GETFIELDSTATE() => erst Feld GETFIELDSTATE() => erst Feld verlassen!verlassen!

SetFldState( ) bei Views mit SetFldState( ) bei Views mit Requery()Requery()

Table changedTable changedim View-Designer sofern im View-Designer sofern alle Felder gewählt wurden alle Felder gewählt wurden (*) -> geändert!(*) -> geändert!

Sonderfall: Sonderfall: Buffered Views auf Buffered Views auf Buffered Tables!Buffered Tables!(SQL öffnet neuen Alias)(SQL öffnet neuen Alias)

Row: Fehler erst beim Row: Fehler erst beim nächsten Satz!nächsten Satz!

Tablerevert: Revert im Tablerevert: Revert im View versagtView versagt

Primary Key doppelt: Primary Key doppelt: Letzter gilt!Letzter gilt!

Page 29: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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!

Page 30: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 31: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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!

Page 32: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 33: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 34: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 35: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 36: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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)

Page 37: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 38: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 39: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 40: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Zusammenfassung VerbesserungenZusammenfassung Verbesserungen

Transaktionsunterstützung für freie TabellenTransaktionsunterstützung für freie Tabellen Unterstützung für lange FeldtypenUnterstützung für lange Feldtypen Leerzeichen in Tabellen und View-NamenLeerzeichen in Tabellen und View-Namen Datentyp Varchar / VarbinaryDatentyp Varchar / Varbinary Datentyp BlobDatentyp Blob Binär-Index (logischer Ausdruck = 1 Bit)Binär-Index (logischer Ausdruck = 1 Bit) PerformanceverbesserungenPerformanceverbesserungen Neues Tool: Memo Corruption ScannerNeues Tool: Memo Corruption Scanner

Page 41: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

BROWSE-Tastaturkürzel BROWSE-Tastaturkürzel

Strg+FStrg+F zum nächsten Datensatzzum nächsten Datensatz Strg+GStrg+G zum vorigen Datensatzzum vorigen Datensatz Strg+YStrg+Y neuen Datensatz anlegenneuen Datensatz anlegen Strg+TStrg+T Löschflag umschaltenLöschflag umschalten Strg+Pos1Strg+Pos1 Memofenster öffnenMemofenster öffnen Strg+EnterStrg+Enter Memofenster schliessenMemofenster schliessen Strg+WStrg+W Speichern und SchliessenSpeichern und Schliessen Strg+F10Strg+F10 Maximieren/WiederherstellenMaximieren/Wiederherstellen

Page 42: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

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

Page 43: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

ZusammenfassungZusammenfassung Das war das Thema Datenbanken im Das war das Thema Datenbanken im

Schnelldurchlauf …Schnelldurchlauf … DatenbankcontainerDatenbankcontainer Tabellen und FelderTabellen und Felder Nullwerte und CodepagesNullwerte und Codepages Indizes und SortiersequenzenIndizes und Sortiersequenzen Rushmore-OptimierungRushmore-Optimierung RelationenRelationen BufferingBuffering NetzwerkprogrammierungNetzwerkprogrammierung TransaktionenTransaktionen TriggerTrigger Referentielle IntegritätReferentielle Integrität

Page 44: Arbeiten mit Daten in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow DATA.

Vielen Dank!Vielen Dank!

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.dehttp://roadshow.dfpug.de, , http://www.visualextend.dehttp://www.visualextend.de, ,

http://www.linuxtransfer.dehttp://www.linuxtransfer.de, , http://www.visualfoxpro.dehttp://www.visualfoxpro.de