View
226
Download
5
Tags:
Embed Size (px)
Citation preview
Visual FoxPro™ Seminar
Presented byPresented by
Jim BoothJim BoothEmail: [email protected]: [email protected]
In cooperation with Rainer Becker and the In cooperation with Rainer Becker and the German FoxPro User’s Group (dFPUG)German FoxPro User’s Group (dFPUG)
Visual FoxPro 6.0Visual FoxPro 6.0SeminarSeminar
Visual FoxPro™ Seminar
General Issues Related to General Issues Related to DevelopmentDevelopment
Understanding the costsUnderstanding the costs Lowering the costsLowering the costs
The Value of Conventions and The Value of Conventions and StandardsStandards
The Value of Object Oriented The Value of Object Oriented DesignDesign
The Development CycleThe Development Cycle Managing RisksManaging Risks
Visual FoxPro™ Seminar
Database DesignDatabase Design
Characteristics of a “Relational Characteristics of a “Relational Database Management System”Database Management System”
Normalization of Data DesignNormalization of Data Design
Visual FoxPro™ Seminar
NormalizationNormalization
Visual FoxPro™ Seminar
Why bother with Why bother with NormalizationNormalization
Reduce the possibility of data Reduce the possibility of data inconsistenciesinconsistencies
Reduce the space required for Reduce the space required for storing datastoring data
Reduce possible update and Reduce possible update and delete anomaliesdelete anomalies
Increase the stability of the data Increase the stability of the data designdesign
Visual FoxPro™ Seminar
First Normal FormFirst Normal Form
Reduce entities to firstReduce entities to first normal form (1NF) by normal form (1NF) by removing repeating or removing repeating or multi-valued attributes multi-valued attributes to another, child, entity.to another, child, entity.
Visual FoxPro™ Seminar
First Customer PassFirst Customer Pass
Customer #
Customers
Company NameAddressContact 1Contact 2Phone 1Phone 2
Visual FoxPro™ Seminar
Company NameAddressContact 1Contact 2Phone 1Phone 2
Removing the Removing the
Repeating GroupsRepeating Groups Contacts
Phones
Customer #Contact #
NameAddressPhone Code
Customer #Phone Code
Area CodePhone Number
Customer #
Customers
Visual FoxPro™ Seminar
2nd Normal Form2nd Normal Form
Reduce 1NF entities to second normal form (2NF) by removing attributes that are not dependent on the whole primary key.
Visual FoxPro™ Seminar
Invoice Line Item FileInvoice Line Item File
Invoice NumberInvoice Number
Line NumberLine Number
Customer IDCustomer ID
Product IDProduct ID
Visual FoxPro™ Seminar
Remove the Non-Remove the Non-Dependent FieldsDependent Fields
Customer ID
Line Item
Invoice
Visual FoxPro™ Seminar
3rd Normal Form3rd Normal Form
Reduce 2NF entities to third normal form (3NF) by removing attributes that depend on other, non-key attributes (other than alternate keys).
Visual FoxPro™ Seminar
Purchase OrderPurchase Order
Order NumberOrder Number
Vendor IDVendor ID
Vendor CityVendor City
Visual FoxPro™ Seminar
Purchase Order
Vendor
Remove Fields Remove Fields Depending on Non-key Depending on Non-key
attributesattributes
Vendor City
Visual FoxPro™ Seminar
Boyce/Codd Normal Boyce/Codd Normal FormForm
Reduce 3NF entities to Boyce/Codd normal form (BCNF) by ensuring that they are in 3NF for any feasible choice of candidate key as primary key.
Visual FoxPro™ Seminar
EmpId
Employee Number
Clock Number
An Employee TableAn Employee Table
Visual FoxPro™ Seminar
EmpId
Employee Number
Clock Number
An Employee TableAn Employee Table
Visual FoxPro™ Seminar
EmpId
Employee Number
Clock Number
An Employee TableAn Employee Table
Visual FoxPro™ Seminar
Fourth Normal FormFourth Normal Form
Reduce BCNF entities to Fourth normal form (4NF) by removing any independently multi-valued components of the primary key to two new parent entities.
Visual FoxPro™ Seminar
Employee - Skill - Objective Employee - Skill - Objective TableTable
NameSkill - NameObjective - Text
Jones accounting more money
Jones accounting prestige
Jones public speaking more money
Jones public speaking prestige
Visual FoxPro™ Seminar
Fourth Normal FormFourth Normal Form
Name
Skill - Name
Employee - Skill
Name
Objective - Text
Employee - Objective
Visual FoxPro™ Seminar
Fifth Normal FormFifth Normal Form
Reduce 4NF entities to fifth normal form (5NF) by removing pair-wise cyclic dependencies (appearing within composite primary keys with three or more component attributes) to three or more new parent entities.
Visual FoxPro™ Seminar
Mary Jordache JeansMary Jordache SneakersSally Jordache JeansMary Liz Claiborne BlousesSally Liz Claiborne Blouses
BuyerVendorProduct
BuyingSuppose Liz Claiborne adds jeans totheir list of products. We need to addtwo updates to our table because bothMary and Sally buy jeans and buy fromLiz Claiborne.
Retail Store BuyersRetail Store Buyers
Visual FoxPro™ Seminar
Fifth Normal FormFifth Normal Form
BuyerVendor
Buy-Vend
Vendor
Vend-Prod
BuyerProduct
Buy-Prod
Product
Visual FoxPro™ Seminar
DenormalizationDenormalization
NameAddressCityCountry
Postal Code
Denormalized
Postal CodeCityCountry
Postal Code
NormalizedName
Address
Postal Code
Visual FoxPro™ Seminar
Want to read more?Want to read more?
Handbook of Relational Database DesignCandace C. Fleming and Barbara von Halle
Addison-Wesley Publishing CompanyISBN: 0-201-11434-8
Relational DatabaseSelected Writings
C. J. DateAddison-Wesley Publishing Company
ISBN: 0-201-14196-5
Visual FoxPro™ Seminar
Visual FoxPro Database Visual FoxPro Database ContainerContainer
Data dictionaryData dictionary RelationshipsRelationships Field level domains (Field Rule)Field level domains (Field Rule) Table level domains (Table Rule)Table level domains (Table Rule) Referential IntegrityReferential Integrity Stored ProceduresStored Procedures DbGetProp() and DbSetProp()DbGetProp() and DbSetProp()
Visual FoxPro™ Seminar
View DesignerView Designer
UpdateableUpdateable The Update Tab in the view The Update Tab in the view
designerdesigner
JoinsJoins InnerInner OuterOuter
Left, Right, and FullLeft, Right, and Full
Top NTop N
Visual FoxPro™ Seminar
Using SQL in the Visual Using SQL in the Visual FoxPro LanguageFoxPro Language
Why use SQL at all?Why use SQL at all? The SQL Commands in Visual The SQL Commands in Visual
FoxProFoxPro SELECTSELECT UPDATEUPDATE DELETEDELETE CREATECREATE INSERT INTOINSERT INTO
Visual FoxPro™ Seminar
Designing User Designing User InterfacesInterfaces
Visual FoxPro™ Seminar
The User Is The User Is In ControlIn Control
Principle 1Principle 1
Visual FoxPro™ Seminar
Principle 2Principle 2
Follow The Follow The Object-Action Object-Action
ParadigmParadigm
Visual FoxPro™ Seminar
Be ConsistentBe Consistent
Principle 3Principle 3
Visual FoxPro™ Seminar
Make ThingsMake ThingsSelf EvidentSelf Evident
Principle 4Principle 4
Visual FoxPro™ Seminar
Pay Attention To Pay Attention To AestheticsAesthetics
Principle 5Principle 5
Visual FoxPro™ Seminar
Give The User Give The User FeedbackFeedback
Principle 6Principle 6
Visual FoxPro™ Seminar
Be ForgivingBe Forgiving
Principle 7Principle 7
Visual FoxPro™ Seminar
Object Oriented Object Oriented DevelopmentDevelopment
Visual FoxPro™ Seminar
OO TerminologyOO Terminology
ClassClass ObjectObject AbstractionAbstraction PolymorphismPolymorphism InheritanceInheritance MessagingMessaging ContainershipContainership
Visual FoxPro™ Seminar
Analysis and Design in an Analysis and Design in an OO worldOO world
The Iterative ApproachThe Iterative Approach InceptionInception ElaborationElaboration ConstructionConstruction
Analysis, Design, Coding, Analysis, Design, Coding, Testing, Implementation, Testing, Implementation, Training, Maintenance/EvolutionTraining, Maintenance/Evolution
TransitionTransition
Visual FoxPro™ Seminar
Analysis and Design in an Analysis and Design in an OO worldOO world
There is a constant looping back in There is a constant looping back in this OO development cycle.this OO development cycle.
New requirements discovered New requirements discovered during coding or implementation during coding or implementation feed back into the design phase.feed back into the design phase.
New functional requirements New functional requirements discovered alter future iterationsdiscovered alter future iterations
Visual FoxPro™ Seminar
The Visual FoxPro Class The Visual FoxPro Class DesignerDesigner
Save As Class menu optionSave As Class menu option Adding properties and methods Adding properties and methods
to a classto a class Specifying an Include file for a Specifying an Include file for a
classclass Creating subclassesCreating subclasses Adding controls to the form Adding controls to the form
designer’s toolbar from your designer’s toolbar from your ClassesClasses
Visual FoxPro™ Seminar
The Application FrameworkThe Application Framework
What is a framework?What is a framework? The overview of the architecture The overview of the architecture
of the frameworkof the framework Strategies for maximizing Strategies for maximizing
maintainabilitymaintainability
Visual FoxPro™ Seminar
The Framework In DetailThe Framework In Detail
The Application ManagerThe Application Manager The form classThe form class The startup programThe startup program Building an application using the Building an application using the
frameworkframework The formThe form The MenuThe Menu Enhancing your frameworkEnhancing your framework
Visual FoxPro™ Seminar
Form and Class DesignForm and Class Design
Coding methods in a reusable Coding methods in a reusable wayway
Using THISFORM, THIS, and the Using THISFORM, THIS, and the Parent propertyParent property
Using WITH/ENDWITHUsing WITH/ENDWITH Using collections to address the Using collections to address the
contents of a containercontents of a container
Visual FoxPro™ Seminar
Simple Base ClassesSimple Base Classes
Label, Textbox, EditBox, CheckBox,Label, Textbox, EditBox, CheckBox,
Option Button, Option GroupOption Button, Option Group
Command Button, Command GroupCommand Button, Command Group
Spinner, Image, Line, Shape, TimerSpinner, Image, Line, Shape, Timer
Container, and SeparatorContainer, and Separator
Visual FoxPro™ Seminar
Complex Base ClassesComplex Base Classes
ComboBox, ListBox, and GridsComboBox, ListBox, and Grids
PageFrames PageFrames
Custom, Container, and ControlCustom, Container, and Control
Form, Formset, and ToolbarForm, Formset, and Toolbar
Visual FoxPro™ Seminar
Using BuildersUsing Builders
The Visual Foxpro BuildersThe Visual Foxpro Builders Make it easier to setup the complex Make it easier to setup the complex
controlscontrols
Building your own buildersBuilding your own builders Builder.dbf and Builder.appBuilder.dbf and Builder.app ASELOBJ()ASELOBJ() Using the special Builder property Using the special Builder property
of a classof a class
Visual FoxPro™ Seminar
OLE Base ClassesOLE Base Classes
OLEBoundControlOLEBoundControl Bound to a General Field in a DBF Bound to a General Field in a DBF
filefile
OLEControlOLEControl Predefined contents at design time.Predefined contents at design time.
Visual FoxPro™ Seminar
ActiveX AutomationActiveX Automation
Structure of ActiveXStructure of ActiveX Direct Manipulation of an Direct Manipulation of an
ActiveX serverActiveX server Automation of an Object Inside Automation of an Object Inside
of an OLEControlof an OLEControl
Visual FoxPro™ Seminar
Multi-user IssuesMulti-user Issues
What is the multi-user problem?What is the multi-user problem? Two strategies (Philosophies)Two strategies (Philosophies)
OptimisticOptimistic It is unlikely that there will be a It is unlikely that there will be a
problem when I try to save.problem when I try to save. PessimisticPessimistic
It is very likely there will be a It is very likely there will be a problem when I try to save.problem when I try to save.
Visual FoxPro™ Seminar
Data BufferingData Buffering
How did we do this before?How did we do this before? What’s new and different now?What’s new and different now? Row versus Table bufferingRow versus Table buffering Pessimistic versus Optimistic Pessimistic versus Optimistic
bufferingbuffering Choosing the correct buffering Choosing the correct buffering
modemode
Visual FoxPro™ Seminar
Setting the Buffering ModeSetting the Buffering Mode
CursorSetProp() (CursorGetProp())CursorSetProp() (CursorGetProp())Using a Cursor’s Using a Cursor’s
BufferModeOverride propertyBufferModeOverride property
Visual FoxPro™ Seminar
Saving Buffered EditsSaving Buffered Edits
TableUpdate()TableUpdate() TableRevert()TableRevert() GetFldState()GetFldState() GetNextModified()GetNextModified()
Visual FoxPro™ Seminar
Transaction ProcessingTransaction Processing
The all or none approachThe all or none approach
BEGIN TRANSACTION, END TRANSACTION, and BEGIN TRANSACTION, END TRANSACTION, and ROLLBACKROLLBACK
Resolving conflicts using CURVAL() and Resolving conflicts using CURVAL() and OLDVAL()OLDVAL()
Visual FoxPro™ Seminar
Client/Server - Is It For Client/Server - Is It For You?You?
When does Client/Server make When does Client/Server make sense?sense? SecuritySecurity ScalabilityScalability Central Control of DataCentral Control of Data
Visual FoxPro™ Seminar
Remote Data SourcesRemote Data Sources
Setting up data sources under Setting up data sources under Windows (95, NT,98)Windows (95, NT,98)
Connections in Visual FoxProConnections in Visual FoxPro Using Remote ViewsUsing Remote Views Using SQL Passthrough Using SQL Passthrough
functionsfunctions
Visual FoxPro™ Seminar
Designing Client/Server Designing Client/Server ApplicationsApplications
User Interface DesignUser Interface Design No more BROWSE of the customer No more BROWSE of the customer
tabletable
Awareness that your code does Awareness that your code does not have absolute control over not have absolute control over the data updates.the data updates.
Visual FoxPro™ Seminar
Using Visual FoxPro to Using Visual FoxPro to Create an ActiveX ServerCreate an ActiveX Server
OLEPublic classesOLEPublic classes Designing the ServerDesigning the Server
Visual FoxPro™ Seminar
Creating Your Own ActiveX Creating Your Own ActiveX Automation ServersAutomation Servers
In-Process versus Out of In-Process versus Out of process serversprocess servers DLL versus EXEDLL versus EXE
Compiling the serverCompiling the server Registering the serverRegistering the server Using the serverUsing the server
Visual FoxPro™ Seminar
The Visual FoxPro DebuggerThe Visual FoxPro Debugger
The debugger as a developer’s The debugger as a developer’s tooltool
Choosing a FoxPro frame or the Choosing a FoxPro frame or the debugger framedebugger frame
Saving and restoring debugger Saving and restoring debugger settingssettings
Hot Keys in the debuggerHot Keys in the debugger
Visual FoxPro™ Seminar
The Debugger WindowsThe Debugger Windows
TraceTrace WatchWatch LocalsLocals Call StackCall Stack OutputOutput
SET DEBUGOUT TOSET DEBUGOUT TO Event TrackingEvent Tracking Setting BreakpointsSetting Breakpoints
Visual FoxPro™ Seminar
Coverage Analysis/ Coverage Analysis/ Application profilingApplication profiling
SET COVERAGE TO <FileName>SET COVERAGE TO <FileName> Turning coverage on and offTurning coverage on and off Using the Coverage ProfilerUsing the Coverage Profiler
Visual FoxPro™ Seminar
Using AssertionsUsing Assertions
The ASSERT commandThe ASSERT command SET ASSERTS ON/OFFSET ASSERTS ON/OFF
Visual FoxPro™ Seminar
Using The DebugOut Using The DebugOut CommandCommand
Does not mess up your Does not mess up your application screenapplication screen
Does not introduce extra window Does not introduce extra window focus events to your applicationfocus events to your application
Visual FoxPro™ Seminar
Visual FoxPro and the Visual FoxPro and the InternetInternet
What is HTML?What is HTML? How does the Internet work?How does the Internet work? The Internet Search WizardThe Internet Search Wizard Accessing the search wizard Accessing the search wizard
pagepage The Web Publishing WizardThe Web Publishing Wizard
Visual FoxPro™ Seminar
Advanced Class Design Advanced Class Design ConceptsConcepts
Inheritance HierarchyInheritance Hierarchy The is-a relationshipThe is-a relationship
Containership HierarchyContainership Hierarchy The has-a relationshipThe has-a relationship
Design PatternsDesign Patterns
Visual FoxPro™ Seminar
Accessing the Windows Accessing the Windows API from Visual FoxProAPI from Visual FoxPro
What is the API?What is the API? DECLARE commandDECLARE command Calling an API functionCalling an API function