| |
| |
Introduction | |
| |
| |
| |
The Basics Of Access Development | |
| |
| |
| |
Access as a Development Tool | |
| |
| |
What Types of Applications Can You Develop in Access? | |
| |
| |
Access as a Scalable Product | |
| |
| |
What Exactly Is a Database? | |
| |
| |
Getting to Know the Database Objects | |
| |
| |
Object Naming Conventions | |
| |
| |
Hardware Requirements | |
| |
| |
How Do I Get Started Developing an Access Application? | |
| |
| |
What's New in Access 2002 | |
| |
| |
Summary | |
| |
| |
| |
What Every Developer Needs to Know About Tables | |
| |
| |
Building a New Table | |
| |
| |
Selecting the Appropriate Field Type for Your Data | |
| |
| |
Working with Field Properties | |
| |
| |
The All-Important Primary Key | |
| |
| |
Working with the Lookup Feature | |
| |
| |
Working with Table Properties | |
| |
| |
Using Indexes to Improve Performance | |
| |
| |
Access Tables and the Internet | |
| |
| |
Working with PivotTable and PivotChart Views | |
| |
| |
Summary | |
| |
| |
| |
Relationships: Your Key to Data Integrity | |
| |
| |
Introduction to Relational Database Design | |
| |
| |
Establishing Relationships in Access | |
| |
| |
Establishing Referential Integrity | |
| |
| |
Looking at the Benefits of Relationships | |
| |
| |
Examining Indexes and Relationships | |
| |
| |
Summary | |
| |
| |
| |
What Every Developer Needs to Know About Query Basics | |
| |
| |
What Is a Query, and When Should You Use One? | |
| |
| |
Everything You Need to Know About Query Basics | |
| |
| |
Ordering Your Query Result | |
| |
| |
Refining Your Query with Criteria | |
| |
| |
Working with Dates in Criteria | |
| |
| |
Understanding How Query Results Can Be Updated | |
| |
| |
Building Queries Based on Multiple Tables | |
| |
| |
Creating Calculated Fields | |
| |
| |
Getting Help from the Expression Builder | |
| |
| |
Summarizing Data with Totals Queries | |
| |
| |
Excluding Fields from the Output | |
| |
| |
Nulls and Query Results | |
| |
| |
Refining Your Queries with Field, Field List, and Query Properties | |
| |
| |
Building Parameter Queries When You Don't Know the Criteria at Design Time | |
| |
| |
Summary | |
| |
| |
| |
What Every Developer Needs to Know About Forms | |
| |
| |
Uses of Forms | |
| |
| |
Anatomy of a Form | |
| |
| |
Creating a New Form | |
| |
| |
Working with the Form Design Window | |
| |
| |
Selecting the Correct Control for the Job | |
| |
| |
Control Morphing | |
| |
| |
Conditional Formatting | |
| |
| |
What Form Properties Are Available, and Why Should You Use Them? | |
| |
| |
What Control Properties Are Available, and Why Use Them? | |
| |
| |
Bound, Unbound, and Calculated Controls | |
| |
| |
Using Expressions to Enhance Your Forms | |
| |
| |
The Command Button Wizards: Programming Without Typing | |
| |
| |
Building Forms Based on More Than One Table | |
| |
| |
Basing Forms on Queries: The Why and How | |
| |
| |
Access Forms and the Internet | |
| |
| |
Summary | |
| |
| |
| |
What Every Developer Needs to Know About Reports | |
| |
| |
Types of Reports Available | |
| |
| |
Anatomy of a Report | |
| |
| |
Creating a New Report | |
| |
| |
Working with the Report Design Window | |
| |
| |
Selecting the Correct Control for the Job | |
| |
| |
What Report Properties Are Available and Why Use Them | |
| |
| |
What Control Properties Are Available and Why Use Them | |
| |
| |
Inserting Page Breaks | |
| |
| |
Unbound, Bound, and Calculated Controls | |
| |
| |
Using Expressions to Enhance Your Reports | |
| |
| |
Building Reports Based on More Than One Table | |
| |
| |
Working with Sorting and Grouping | |
| |
| |
Improving Performance and Reusability by Basing Reports on Stored Queries or Embedded SQL Statements | |
| |
| |
Access Reports and the Internet | |
| |
| |
Summary | |
| |
| |
| |
VBA: An Introduction | |
| |
| |
VBA Explained | |
| |
| |
What Are Access Class Modules, Standard Modules, Form Modules, and Report Modules? | |
| |
| |
Working with Variables | |
| |
| |
Adding Comments to Your Code | |
| |
| |
Using the Line Continuation Character | |
| |
| |
Using the VBA Control Structures | |
| |
| |
Passing Parameters and Returning Values | |
| |
| |
Executing Procedures from the Module Window | |
| |
| |
The DoCmd Object: Performing Macro Actions | |
| |
| |
Working with Built-In Functions | |
| |
| |
Working with Constants | |
| |
| |
Tools for Working in the Visual Basic Editor | |
| |
| |
Customizing the VBE | |
| |
| |
Summary | |
| |
| |
| |
Objects, Properties, Methods, and Events Explained | |
| |
| |
Understanding Objects, Properties, Events, and Methods | |
| |
| |
Using the Object Browser to Learn About Access' Objects | |
| |
| |
Referring to Objects | |
| |
| |
Properties and Methods Made Easy | |
| |
| |
Declaring and Assigning Object Variables | |
| |
| |
Understanding the Differences Between Objects and Collections | |
| |
| |
Passing Objects to Subroutines and Functions | |
| |
| |
Determining the Type of a Control | |
| |
| |
Special Properties That Refer to Objects | |
| |
| |
Understanding Access's Object Model | |
| |
| |
New Access 2002 Properties | |
| |
| |
Summary | |
| |
| |
| |
Advanced Form Techniques | |
| |
| |
What Are the Form Events, and When Do You Use Them? | |
| |
| |
What Are the Section and Control Events, and When Do You Use Them? | |
| |
| |
Referring to Me | |
| |
| |
What Types of Forms Can I Create, and When Are They Appropriate? | |
| |
| |
Using Built-In Dialog Boxes | |
| |
| |
Adding Custom Menus, Toolbars, and Shortcut Menus to Your Forms | |
| |
| |
Taking Advantage of Built-In, Form-Filtering Features | |
| |
| |
Including Objects from Other Applications: Linking Versus Embedding | |
| |
| |
OpenArgs | |
| |
| |
Switching a Form's RecordSource | |
| |
| |
Power Combo Box and List Box Techniques | |
| |
| |
Power Subform Techniques | |
| |
| |
Synchronizing a Form with Its Underlying Recordset | |
| |
| |
Creating Custom Properties and Methods | |
| |
| |
Summary | |
| |
| |
| |
Advanced Report Techniques | |
| |
| |
Events Available for Reports, and When to Use Them | |
| |
| |
Order of Events for Reports | |
| |
| |
Events Available for Report Sections, and When to Use Them | |
| |
| |
Programmatically Manipulating Report Sections | |
| |
| |
Special Report Properties | |
| |
| |
Controlling the Printer | |
| |
| |
Practical Applications of Report Events and Properties | |
| |
| |
Summary | |
| |
| |
| |
Advanced Query Techniques | |
| |
| |
Action Queries | |
| |
| |
Special Query Properties | |
| |
| |
Optimizing Queries | |
| |
| |
Crosstab Queries | |
| |
| |
Outer Joins | |
| |
| |
Self Joins | |
| |
| |
Understanding SQL | |
| |
| |
Union Queries | |
| |
| |
Pass-Through Queries | |
| |
| |
The Propagation of Nulls and Query Results | |
| |
| |
Subqueries | |
| |
| |
Using SQL to Update Data | |
| |
| |
Using SQL for Data Definition | |
| |
| |
Using the Result of a Function as the Criteria for a Query | |
| |
| |
Passing Parameter Query Values from a Form | |
| |
| |
Jet 4.0 ANSI-92 Extensions | |
| |
| |
Summary | |
| |
| |
| |
Advanced VBA Techniques | |
| |
| |
What Are User-Defined Types, and Why Would You Use Them? | |
| |
| |
Working with Constants | |
| |
| |
Working with Arrays | |
| |
| |
Advanced Function Techniques | |
| |
| |
Working with Empty and Null | |
| |
| |
Creating and Working with Custom Collections | |
| |
| |
Low-Level File Handling | |
| |
| |
Understanding and Effectively Using Compilation Options | |
| |
| |
Importing and Exporting Code Modules | |
| |
| |
Working with Project Properties | |
| |
| |
Summary | |
| |
| |
| |
Exploiting the Power of Class Modules | |
| |
| |
Exploring the Benefits of Class Modules | |
| |
| |
Object Orientation--An Introduction | |
| |
| |
Creating and Using a Class Module | |
| |
| |
Creating Multiple Class Instances | |
| |
| |
The Initialize and Terminate Events | |
| |
| |
Working with Enumerated Types | |
| |
| |
Building Hierarchies of Classes | |
| |
| |
Adding a Parent Property to Classes | |
| |
| |
The Implements Keyword | |
| |
| |
Working with Custom Collections | |
| |
| |
Adding Your Own Events | |
| |
| |
Summary | |
| |
| |
| |
What Are ActiveX Data Objects and Data Access Objects, and Why Are They Important? | |
| |
| |
Using ActiveX Data Objects Versus Data Access Objects | |
| |
| |
Examining the ActiveX Data Object Model | |
| |
| |
Understanding ADO Recordest Types | |
| |
| |
Working with ADO Recordset Properties and Methods | |
| |
| |
Modifying Table Data Using ADO Code | |
| |
| |
Creating and Modifying Database Objects Using ADO Code | |
| |
| |
Examining the Data Access Object Model | |
| |
| |
Getting to Know DBEngine | |
| |
| |
Using CurrentDB() | |
| |
| |
Understanding DAO Recordset Types | |
| |
| |
Selecting Among the Types of DAO Recordset Objects Available | |
| |
| |
Working with DAO Recordset Properties and Methods | |
| |
| |
Modifying Table Data Using DAO Code | |
| |
| |
Creating and Modifying Database Objects Using DAO Code | |
| |
| |
Using the DAO Containers Collection | |
| |
| |
Summary | |
| |
| |
| |
What To Do When Things Don't Go As Planned | |
| |
| |
| |
Debugging: Your Key to Successful Development | |
| |
| |
Avoiding Bugs | |
| |
| |
Harnessing the Power of the Immediate Window | |
| |
| |
Invoking the Debugger | |
| |
| |
Using Breakpoints to Troubleshoot | |
| |
| |
Stepping Through Code | |
| |
| |
Setting the Next Statement to Execute | |
| |
| |
Using the Calls Window | |
| |
| |
Working with the Locals Window | |
| |
| |
Working with Watch Expressions | |
| |
| |
Continuing Execution After a Runtime Error | |
| |
| |
Looking At Gotchas with the Immediate Window | |
| |
| |
Using Assertions | |
| |
| |
Debugging Tips | |
| |
| |
Summary | |
| |
| |
| |
Error Handling: Preparing for the Inevitable | |
| |
| |
Implementing Error Handling | |
| |
| |
Using On Error Statements | |
| |
| |
Using Resume Statements | |
| |
| |
Clearing an Error | |
| |
| |
Examining the Cascading Error Effect | |
| |
| |
Using the Err Object | |
| |
| |
Raising an Error | |
| |
| |
Using the Errors Collection | |
| |
| |
Creating a Generic Error Handler | |
| |
| |
Preventing Your Own Error Handling from Being Invoked | |
| |
| |
Creating a Call Stack | |
| |
| |
Building a Custom Error Handler Class | |
| |
| |
Working with Error Events | |
| |
| |
Creating a List of Error Codes and Descriptions | |
| |
| |
Summary | |
| |
| |
| |
Optimizing Your Application | |
| |
| |
Introducing Optimization | |
| |
| |
Modifying Hardware and Software Configurations | |
| |
| |
What Jet 3.5 Did to Improve Performance | |
| |
| |
Understanding What Jet 4.0 Does to Improve Performance | |
| |
| |
Letting the Performance Analyzer Determine Problem Areas | |
| |
| |
Designing Tables to Optimize Performance | |
| |
| |
Designing Queries to Optimize Performance | |
| |
| |
Making Coding Changes to Improve Performance | |
| |
| |
Designing Forms and Reports to Improve Performance | |
| |
| |
Summary | |
| |
| |
| |
Developing Multiuser and Enterprise Applications | |
| |
| |
| |
A Strategy to Developing Access Applications | |
| |
| |
Splitting Databases into Tables and Other Objects | |
| |
| |
Basing Forms and Reports on Queries or Embedded SQL Statements | |
| |
| |
Understanding the Access Runtime Engine | |
| |
| |
Using an EXE Versus Access Database: What It Means to You | |
| |
| |
Understanding the Importance of Securing Your Database | |
| |
| |
Using Access as a Front End | |
| |
| |
Summary | |
| |
| |
| |
Using External Data | |
| |
| |
Importing, Linking, and Opening Files: When and Why | |
| |
| |
Importing External Data | |
| |
| |
Creating a Link to External Data | |
| |
| |
Opening an External Table | |
| |
| |
Understanding Windows Registry Settings | |
| |
| |
Using the Jet OLEDB: Link Provider String | |
| |
| |
Refreshing and Removing Links | |
| |
| |
Looking at Special Considerations | |
| |
| |
Troubleshooting | |
| |
| |
Looking at Performance Considerations and Links | |
| |
| |
Working with HTML Documents | |
| |
| |
Summary | |
| |
| |
| |
Developing Multiuser and Enterprise Applications | |
| |
| |
Designing Your Application with Multiuser Issues in Mind | |
| |
| |
Understanding Access's Locking Mechanisms | |
| |
| |
Understanding the Client/Server Model | |
| |
| |
Deciding Whether to Use the Client/Server Model | |
| |
| |
The Roles Access Plays in the Application Design Model | |
| |
| |
Learning the Client/Server Buzzwords | |
| |
| |
Upsizing: What to Worry About | |
| |
| |
Proactively Preparing for Upsizing | |
| |
| |
Introduction to Transaction Processing | |
| |
| |
Understanding the Benefits of Transaction Processing | |
| |
| |
Modifying the Default Behavior of Transaction Processing | |
| |
| |
Implementing Explicit Transaction Processing | |
| |
| |
Introduction to Replication | |
| |
| |
Uses of Replication | |
| |
| |
Understanding When Replication Isn't Appropriate | |
| |
| |
Understanding the Implementation of Replication | |
| |
| |
Summary | |
| |
| |
| |
Black-Belt Programming | |
| |
| |
| |
Using ActiveX Controls | |
| |
| |
Incorporating ActiveX Controls in Access 2002 | |
| |
| |
Setting Properties of an ActiveX Control at Design Time | |
| |
| |
Coding Events of an ActiveX Control | |
| |
| |
Using the Calendar Control | |
| |
| |
Using the UpDown Control | |
| |
| |
Using the StatusBar Control | |
| |
| |
Using the Common Dialog Control | |
| |
| |
Using the Rich Textbox Control | |
| |
| |
Using the TabStrip Control | |
| |
| |
Using the ImageList Control | |
| |
| |
Licensing and Distribution Issues | |
| |
| |
Summary | |
| |
| |
| |
Automation: Communicating with Other Applications | |
| |
| |
Defining Some Automation Terms | |
| |
| |
Declaring an Object Variable to Reference Your Application | |
| |
| |
Creating an Automation Object | |
| |
| |
Manipulating an Automation Object | |
| |
| |
Early Binding Versus Late Binding | |
| |
| |
Controlling Excel from Access | |
| |
| |
Closing an Excel Automation Object | |
| |
| |
Creating a Graph from Access | |
| |
| |
Controlling Word from Access | |
| |
| |
Controlling PowerPoint from Access | |
| |
| |
Automating Outlook from Access | |
| |
| |
Controlling Access from Other Applications | |
| |
| |
Summary | |
| |
| |
| |
Exploiting the Power of the Windows API | |
| |
| |
Declaring an External Function to the Compiler | |
| |
| |
Working with Constants and Types | |
| |
| |
Calling DLL Functions: Important Issues | |
| |
| |
Examining the Differences Between 16-Bit and 32-Bit APIs | |
| |
| |
Using API Functions | |
| |
| |
Manipulating the Windows Registry | |
| |
| |
Getting Information About the Operating Environment | |
| |
| |
Determining Drive Types and Available Drive Space | |
| |
| |
Summary | |
| |
| |
| |
Creating Your Own Libraries | |
| |
| |
Preparing a Database to Be a Library | |
| |
| |
Creating a Reference | |
| |
| |
Debugging a Library Database | |
| |
| |
Securing an Access Library | |
| |
| |
Summary | |
| |
| |
| |
Using Builders, Wizards, and Menu Add-Ins | |
| |
| |
Using Builders | |
| |
| |
Using Wizards | |
| |
| |
Using Menu Add-Ins | |
| |
| |
Summary | |
| |
| |
| |
An Introduction to Access and the Internet/Intranet | |
| |
| |
Saving Database Objects as HTML | |
| |
| |
Linking to HTML Files | |
| |
| |
Importing HTML Files | |
| |
| |
Understanding Data Access Pages | |
| |
| |
Creating Data Access Pages | |
| |
| |
Modifying Important Properties of a Data Access Page | |
| |
| |
Modifying the Record Navigation Control Properties | |
| |
| |
Creating Grouped Data Access Pages | |
| |
| |
Augmenting Data Access Pages with VBScript | |
| |
| |
Summary | |
| |
| |
| |
Adding Polish To Your Application | |
| |
| |
| |
Database Security Made Easy | |
| |
| |
Implementing Share-Level Security: Establishing a Database Password | |
| |
| |
Encrypting a Database | |
| |
| |
Establishing User-Level Security | |
| |
| |
Securing VBA Code with a Password | |
| |
| |
Providing an Additional Level of Security: Creating an MDE | |
| |
| |
Securing a Database Without Requiring Users to Log On | |
| |
| |
Looking at Special Issues | |
| |
| |
Summary | |
| |
| |
| |
Advanced Security Techniques | |
| |
| |
Maintaining Groups Using Code | |
| |
| |
Using Code to Maintain Users | |
| |
| |
Listing All Groups and Users | |
| |
| |
Working with Passwords | |
| |
| |
Assigning and Revoking Permissions to Objects Using Code | |
| |
| |
Encrypting a Database Using Code | |
| |
| |
Accomplishing Field-Level Security Using Queries | |
| |
| |
Prohibiting Users and Groups from Creating Objects | |
| |
| |
Accomplishing Prohibited Tasks by Logging On as a Different User | |
| |
| |
Securing Client/Server Applications | |
| |
| |
Security and Replication | |
| |
| |
Implementing Security with SQL | |
| |
| |
DAO and Security | |
| |
| |
Choosing Between ADOX, SQL, and DAO | |
| |
| |
Summary | |
| |
| |
| |
Documenting Your Application | |
| |
| |
Preparing Your Application to Be Self-Documenting | |
| |
| |
Using the Database Documenter | |
| |
| |
Writing Code to Create Your Own Documentation | |
| |
| |
Summary | |
| |
| |
| |
Maintaining Your Application | |
| |
| |
Compacting Your Database | |
| |
| |
Converting an Access Database | |
| |
| |
Detecting Broken References | |
| |
| |
Summary | |
| |
| |
| |
Third-Party Tools That Can Help You to Get Your Job Done Effectively | |
| |
| |
Total Access CodeTools | |
| |
| |
Total Access Analyzer | |
| |
| |
Total Visual Agent | |
| |
| |
Total Access Components | |
| |
| |
Total Access Statistics | |
| |
| |
Total Access Detective | |
| |
| |
Total Visual SourceBook | |
| |
| |
Total Access Memo | |
| |
| |
Solutions::Explorer | |
| |
| |
Component Toolbox OCX | |
| |
| |
Solutions::Schedule | |
| |
| |
Solutions::PIM Professional | |
| |
| |
Summary | |
| |
| |
| |
Distributing Your Application | |
| |
| |
Introducing the Packaging Wizard | |
| |
| |
Loading the Packaging Wizard Add-In | |
| |
| |
Distributing Your Application to Run with a Full Copy of Access | |
| |
| |
Using Full Versions Versus Runtime Versions of Access | |
| |
| |
Preparing Your Database for Use with the Access Runtime Version | |
| |
| |
Looking at Other Issues | |
| |
| |
Summary | |
| |
| |
| |
Appendixes | |
| |
| |
| |
Table Structures | |
| |
| |
The tblClients Table | |
| |
| |
The tblClientAddresses Table | |
| |
| |
The tblAddressTypes Table | |
| |
| |
The tblClientPhones Table | |
| |
| |
The tblPhoneTypes Table | |
| |
| |
The tblCorrespondence Table | |
| |
| |
The tblCorrespondenceTypes Table | |
| |
| |
The tblTerms Table | |
| |
| |
The tblContactTypes Table | |
| |
| |
The tblCompanyInfo Table | |
| |
| |
The tblEmployees Table | |
| |
| |
The tblErrorLog Table | |
| |
| |
The tblErrors Table | |
| |
| |
The tblExpenseCodes Tables | |
| |
| |
The tblPaymentMethods Table | |
| |
| |
The tblPayments Table | |
| |
| |
The tblProjects Table | |
| |
| |
The tblTimCardExpenses Table | |
| |
| |
The tblTimeCardHours Table | |
| |
| |
The tblTimeCards Table | |
| |
| |
The tblWorkCodes Table | |
| |
| |
| |
Naming Conventions | |
| |
| |
Index | |