Introduction |
|
1 | (6) |
|
Part I The Basics of Access Development |
|
|
|
Access as a Development Tool |
|
|
7 | (68) |
|
Why This Chapter Is Important |
|
|
7 | (1) |
|
What Types of Applications Can You Develop in Access? |
|
|
7 | (4) |
|
Access as a Development Platform for Personal Applications |
|
|
8 | (1) |
|
Access as a Development Platform for Small Business Applications |
|
|
8 | (1) |
|
Access as a Development Platform for Departmental Applications |
|
|
8 | (1) |
|
Access as a Development Platform for Corporationwide Applications |
|
|
9 | (1) |
|
Access as a Front End for Enterprisewide Client/Server Applications |
|
|
10 | (1) |
|
Access as a Development Platform for Intranet/Internet Applications |
|
|
11 | (1) |
|
Access as a Scalable Product |
|
|
11 | (1) |
|
What Exactly Is a Database? |
|
|
11 | (1) |
|
Getting to Know the Database Objects |
|
|
12 | (11) |
|
Tables: A Repository for Your Data |
|
|
12 | (4) |
|
Queries: Stored Questions or Actions You Apply to Your Data |
|
|
16 | (1) |
|
Forms: A Means of Displaying, Modifying, and Adding Data |
|
|
17 | (3) |
|
Reports: Turning Data into Information |
|
|
20 | (1) |
|
Macros: A Means of Automating Your System |
|
|
20 | (2) |
|
Modules: The Foundation to the Application Development Process |
|
|
22 | (1) |
|
Object Naming Conventions |
|
|
23 | (1) |
|
|
23 | (1) |
|
What Hardware Does Microsoft Office Access 2007 Require? |
|
|
23 | (1) |
|
How Do I Get Started Developing an Access Application? |
|
|
24 | (4) |
|
|
24 | (1) |
|
|
24 | (3) |
|
|
27 | (1) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
28 | (1) |
|
What's New in Access 2007? |
|
|
28 | (24) |
|
What's New in the User Interface? |
|
|
28 | (2) |
|
Getting to Know the Ribbon |
|
|
30 | (12) |
|
Getting to Know the Navigation Pane |
|
|
42 | (2) |
|
Working with Tabbed Documents |
|
|
44 | (3) |
|
Exploring the New Status Bar |
|
|
47 | (2) |
|
Working with the Mini Toolbar |
|
|
49 | (2) |
|
|
51 | (1) |
|
|
51 | (1) |
|
The Exciting World of Pivot Tables and Pivot Charts |
|
|
51 | (1) |
|
Other New Features Found in Access 2007 |
|
|
52 | (4) |
|
What Happened to Replication? |
|
|
52 | (4) |
|
What Happened to ADP Files? |
|
|
56 | (1) |
|
Additional Tips and Tricks |
|
|
56 | (16) |
|
Advanced Navigation Pane Techniques |
|
|
56 | (9) |
|
Creating Multi-valued Fields |
|
|
65 | (7) |
|
Practical Examples: The Application Design for a Computer Consulting Firm |
|
|
72 | (2) |
|
|
74 | (1) |
|
What Every Developer Needs to Know About Databases and Tables |
|
|
75 | (40) |
|
Why This Chapter Is Important |
|
|
75 | (1) |
|
|
75 | (4) |
|
Creating a Database Using a Template |
|
|
76 | (2) |
|
Creating a Database from Scratch |
|
|
78 | (1) |
|
|
79 | (3) |
|
Designing a Table from Scratch |
|
|
79 | (3) |
|
Selecting the Appropriate Field Type for Your Data |
|
|
82 | (5) |
|
Text Fields: The Most Common Field Type |
|
|
84 | (1) |
|
Memo Fields: For Those Long Notes and Comments |
|
|
84 | (1) |
|
Number Fields: For When You Need to Calculate++ |
|
|
84 | (1) |
|
Date/Time Fields: Tracking When Things Happened |
|
|
84 | (1) |
|
Currency Fields: Storing Money |
|
|
85 | (1) |
|
AutoNumber Fields: For Unique Record Identifiers |
|
|
85 | (1) |
|
Yes/No Fields: When One of Two Answers Is Correct |
|
|
86 | (1) |
|
OLE Object Fields: The Place to Store Just About Anything |
|
|
86 | (1) |
|
Attachment Fields: Storing Several Files in a Single Field |
|
|
86 | (1) |
|
Hyperlink Fields: Your Link to the Internet |
|
|
87 | (1) |
|
Working with Field Properties |
|
|
87 | (11) |
|
Field Size: Limiting What's Entered into a Field |
|
|
88 | (1) |
|
Format: Determining How Data Is Displayed |
|
|
88 | (1) |
|
Input Mask: Determining What Data Goes into a Field |
|
|
89 | (2) |
|
Caption: A Great Timesaver |
|
|
91 | (1) |
|
Default Value: Saving Data Entry Time |
|
|
91 | (1) |
|
Validation Rule: Controlling What the User Enters in a Field |
|
|
92 | (2) |
|
Validation Text: Providing Error Messages to the User |
|
|
94 | (1) |
|
Required: Making the User Enter a Value |
|
|
94 | (1) |
|
Allow Zero Length: Accommodating Situations with Nonexistent Data |
|
|
95 | (1) |
|
Indexed: Speeding Up Searches |
|
|
96 | (1) |
|
Unicode Compression: Compressing Your Data |
|
|
97 | (1) |
|
Using the All-Important Primary Key |
|
|
98 | (1) |
|
Working with the Lookup Feature |
|
|
98 | (3) |
|
Working with Table Properties |
|
|
101 | (2) |
|
Using Indexes to Improve Performance |
|
|
103 | (1) |
|
Using Access Tables with the Internet |
|
|
103 | (6) |
|
|
103 | (1) |
|
Saving Table Data as HTML |
|
|
104 | (3) |
|
|
107 | (2) |
|
Viewing Object Dependencies |
|
|
109 | (1) |
|
Examining Database Specifications and Limitations |
|
|
110 | (1) |
|
Examining Table Specifications and Limitations |
|
|
110 | (1) |
|
Practical Examples: Designing the Tables Needed for a Computer Consulting Firm's Time and Billing Application |
|
|
111 | (3) |
|
|
114 | (1) |
|
Relationships: Your Key to Data Integrity |
|
|
115 | (22) |
|
Why This Chapter Is Important |
|
|
115 | (1) |
|
Introduction to Relational Database Design |
|
|
115 | (9) |
|
The History of Relational Database Design |
|
|
116 | (1) |
|
Goals of Relational Database Design |
|
|
116 | (1) |
|
Rules of Relational Database Design |
|
|
116 | (1) |
|
Normalization and Normal Forms |
|
|
117 | (3) |
|
Denormalization---Purposely Violating the Rules |
|
|
120 | (1) |
|
|
121 | (1) |
|
|
122 | (1) |
|
Examining the Types of Relationships |
|
|
122 | (2) |
|
Establishing Relationships in Access |
|
|
124 | (4) |
|
Establishing a Relationship Between Two Tables |
|
|
125 | (1) |
|
Looking at Guidelines for Establishing Relationships |
|
|
126 | (2) |
|
Modifying an Existing Relationship |
|
|
128 | (1) |
|
Establishing Referential Integrity |
|
|
128 | (5) |
|
Cascade Update Related Fields |
|
|
130 | (1) |
|
Cascade Delete Related Records |
|
|
131 | (2) |
|
Looking at the Benefits of Relationships |
|
|
133 | (1) |
|
Examining Indexes and Relationships |
|
|
134 | (1) |
|
Practical Examples: Establishing the Relationships Between the Tables Included in the Time and Billing Database |
|
|
134 | (2) |
|
|
136 | (1) |
|
What Every Developer Needs to Know About Query Basics |
|
|
137 | (52) |
|
Why This Chapter Is Important |
|
|
137 | (1) |
|
What Is a Query, and When Should You Use One? |
|
|
137 | (1) |
|
Everything You Need to Know About Query Basics |
|
|
138 | (6) |
|
Adding Tables to Your Query |
|
|
139 | (1) |
|
Adding Fields to Your Query |
|
|
139 | (3) |
|
Removing a Field from the Query Design Grid |
|
|
142 | (1) |
|
Inserting a Field After the Query Is Built |
|
|
143 | (1) |
|
Moving a Field to a Different Location on the Query Design Grid |
|
|
143 | (1) |
|
Saving and Naming Your Query |
|
|
144 | (1) |
|
Ordering Your Query Result |
|
|
144 | (2) |
|
Sorting by More Than One Field |
|
|
145 | (1) |
|
Refining Your Query with Criteria |
|
|
146 | (3) |
|
Working with Dates in Criteria |
|
|
149 | (1) |
|
Understanding How You Can Update Query Results |
|
|
150 | (1) |
|
Building Queries Based on Multiple Tables |
|
|
151 | (6) |
|
Pitfalls of Multitable Queries |
|
|
153 | (2) |
|
Row Fix-Up in Multitable Queries |
|
|
155 | (2) |
|
Creating Calculated Fields |
|
|
157 | (3) |
|
Getting Help from the Expression Builder |
|
|
160 | (1) |
|
Summarizing Data with Totals Queries |
|
|
161 | (5) |
|
Excluding Fields from the Output |
|
|
166 | (1) |
|
Understanding Nulls and Query Results |
|
|
166 | (4) |
|
Refining Your Queries with Field, Field List, and Query Properties |
|
|
170 | (2) |
|
Field Properties: Changing the Behavior of a Field |
|
|
170 | (1) |
|
Field List Properties: Changing the Properties of the Field List |
|
|
171 | (1) |
|
Query Properties: Changing the Behavior of the Overall Query |
|
|
171 | (1) |
|
Building Parameter Queries When You Don't Know the Criteria at Design Time |
|
|
172 | (3) |
|
Adding Smart Tags to Your Queries |
|
|
175 | (4) |
|
Adding a Smart Tag to a Query |
|
|
175 | (1) |
|
|
176 | (3) |
|
Creating a Pivot Table or Pivot Chart from a Query |
|
|
179 | (6) |
|
Creating the Query to Display in PivotTable or PivotChart View |
|
|
179 | (1) |
|
Displaying the Query in PivotTable View |
|
|
180 | (1) |
|
Displaying Summarized Data |
|
|
181 | (2) |
|
Filtering Pivot Table Data |
|
|
183 | (1) |
|
|
184 | (1) |
|
|
185 | (1) |
|
Switching to PivotChart View |
|
|
185 | (1) |
|
Understanding Query Specifications and Limitations |
|
|
185 | (1) |
|
Practical Examples: Building Queries Needed by the Time and Billing Application for a Computer Consulting Firm |
|
|
186 | (2) |
|
|
188 | (1) |
|
What Every Developer Needs to Know About Forms |
|
|
189 | (80) |
|
Why This Chapter Is Important |
|
|
189 | (1) |
|
Understanding the Uses of Forms |
|
|
189 | (3) |
|
Examining the Anatomy of a Form |
|
|
192 | (1) |
|
|
193 | (3) |
|
Creating a Form with the Form Wizard |
|
|
193 | (3) |
|
Creating a Form from Design View |
|
|
196 | (1) |
|
Working with the Form Design Window |
|
|
196 | (9) |
|
Understanding and Working with the Form Design Tools |
|
|
196 | (2) |
|
Adding Fields to the Form |
|
|
198 | (1) |
|
Selecting, Moving, Aligning, and Sizing Form Objects |
|
|
199 | (5) |
|
Modifying Object Tab Order |
|
|
204 | (1) |
|
|
205 | (13) |
|
Using Stacked and Tabular Layouts |
|
|
206 | (9) |
|
Getting to Know Split Forms |
|
|
215 | (1) |
|
Using Alternating Background Colors for a Form |
|
|
216 | (2) |
|
Selecting the Correct Control for the Job |
|
|
218 | (9) |
|
|
219 | (1) |
|
|
219 | (1) |
|
|
219 | (4) |
|
|
223 | (1) |
|
|
224 | (1) |
|
Option and Toggle Buttons |
|
|
224 | (1) |
|
|
224 | (3) |
|
|
227 | (1) |
|
Morphing a Text Box into a Combo Box |
|
|
227 | (1) |
|
Morphing a Combo Box into a List Box |
|
|
228 | (1) |
|
|
228 | (1) |
|
Determining Which Form Properties Are Available and Why You Should Use Them |
|
|
229 | (7) |
|
Working with the Property Sheet |
|
|
229 | (1) |
|
Working with the Important Form Properties |
|
|
229 | (7) |
|
Determining Which Control Properties Are Available and Why You Should Use Them |
|
|
236 | (6) |
|
Format Properties of a Control |
|
|
236 | (3) |
|
Data Properties of a Control |
|
|
239 | (1) |
|
Other Properties of a Control |
|
|
240 | (2) |
|
Understanding Bound, Unbound, and Calculated Controls |
|
|
242 | (1) |
|
Using Expressions to Enhance Your Forms |
|
|
243 | (1) |
|
Using the Command Button Wizards: Programming Without Typing |
|
|
244 | (2) |
|
Building Forms Based on More Than One Table |
|
|
246 | (3) |
|
Creating One-to-Many Forms |
|
|
246 | (3) |
|
|
249 | (1) |
|
Basing Forms on Queries: The Why and How |
|
|
249 | (2) |
|
Embedding SQL Statements Versus Stored Queries |
|
|
250 | (1) |
|
Connecting Access Forms and the Internet |
|
|
251 | (2) |
|
Adding a Hyperlink to a Form |
|
|
251 | (2) |
|
|
253 | (1) |
|
|
253 | (1) |
|
Adding Smart Tags to Your Forms |
|
|
253 | (3) |
|
Adding a Smart Tag to a Form |
|
|
253 | (2) |
|
|
255 | (1) |
|
Creating a Pivot Table or Pivot Chart from a Form |
|
|
256 | (6) |
|
Creating the Form to Display in PivotTable or PivotChart View |
|
|
256 | (1) |
|
Displaying the Form in PivotTable View |
|
|
257 | (2) |
|
Displaying Summarized Data |
|
|
259 | (2) |
|
Filtering Pivot Table Data |
|
|
261 | (1) |
|
|
261 | (1) |
|
|
262 | (1) |
|
Switching to PivotChart View |
|
|
262 | (1) |
|
Examining Form Specifications and Limitations |
|
|
262 | (1) |
|
Practical Examples: Designing Forms for Your Application |
|
|
263 | (5) |
|
Designing the Clients Form |
|
|
263 | (3) |
|
Designing the Projects Form |
|
|
266 | (2) |
|
Adding a Command Button That Links the Clients and Projects Forms |
|
|
268 | (1) |
|
|
268 | (1) |
|
What Every Developer Needs to Know About Reports |
|
|
269 | (46) |
|
Why This Chapter Is Important |
|
|
269 | (1) |
|
Examining Types of Reports Available |
|
|
269 | (5) |
|
|
270 | (1) |
|
|
270 | (1) |
|
|
270 | (2) |
|
Reports with Graphics and Charts |
|
|
272 | (1) |
|
|
272 | (1) |
|
|
273 | (1) |
|
Understanding the Anatomy of a Report |
|
|
274 | (1) |
|
|
275 | (3) |
|
Creating a Report with the Report Wizard |
|
|
275 | (3) |
|
Creating a Report from Design View |
|
|
278 | (1) |
|
Working with the Report Design Window |
|
|
278 | (4) |
|
Understanding the Report Design Tools |
|
|
278 | (1) |
|
Adding Fields to the Report |
|
|
278 | (1) |
|
Selecting, Moving, Aligning, and Sizing Report Objects |
|
|
279 | (3) |
|
Selecting the Correct Control for the Job |
|
|
282 | (2) |
|
|
282 | (1) |
|
|
282 | (1) |
|
|
282 | (1) |
|
|
283 | (1) |
|
|
283 | (1) |
|
|
283 | (1) |
|
|
284 | (1) |
|
|
284 | (1) |
|
What Report Properties Are Available, and Why Should You Use Them? |
|
|
284 | (5) |
|
Working with the Property Sheet |
|
|
285 | (1) |
|
The Report's Format Properties |
|
|
285 | (2) |
|
The Report's Data Properties |
|
|
287 | (1) |
|
The Other Report Properties |
|
|
288 | (1) |
|
What Control Properties Are Available, and Why Should ou Use Them? |
|
|
289 | (4) |
|
The Control's Format Properties |
|
|
290 | (2) |
|
The Control's Data Properties |
|
|
292 | (1) |
|
The Other Control Properties |
|
|
292 | (1) |
|
|
293 | (1) |
|
Using Unbound, Bound, and Calculated Controls |
|
|
293 | (1) |
|
Using Expressions to Enhance Your Reports |
|
|
293 | (1) |
|
Building Reports Based on More Than One Table |
|
|
293 | (8) |
|
Creating One-to-Many Reports |
|
|
294 | (6) |
|
|
300 | (1) |
|
Working with Sorting and Grouping |
|
|
301 | (3) |
|
Adding Sorting or Grouping |
|
|
302 | (1) |
|
What Are Group Header and Footer Properties, and Why Should You Use Them? |
|
|
303 | (1) |
|
Improving Performance and Reusability by Basing Reports on Stored Queries or Embedded SQL Statements |
|
|
304 | (1) |
|
Using Access Reports and the Internet |
|
|
305 | (2) |
|
Adding a Hyperlink to a Report |
|
|
306 | (1) |
|
|
306 | (1) |
|
|
306 | (1) |
|
Understanding Report Specifications and Limitations |
|
|
307 | (1) |
|
Practical Examples: Building Reports Needed for Your Application |
|
|
307 | (7) |
|
Designing the rptClientListing Report |
|
|
307 | (4) |
|
Designing the rptTimeSheet Report |
|
|
311 | (3) |
|
|
314 | (1) |
|
What Are Macros, and When Do You Need Them? |
|
|
315 | (30) |
|
Why This Chapter Is Important |
|
|
315 | (1) |
|
Learning the Basics of Creating and Running a Macro |
|
|
315 | (9) |
|
|
316 | (2) |
|
|
318 | (3) |
|
|
321 | (2) |
|
|
323 | (1) |
|
|
324 | (5) |
|
Running a Macro from the Macro Design Window |
|
|
325 | (1) |
|
Running a Macro from the Macros Group of the Navigation Pane |
|
|
326 | (1) |
|
Triggering a Macro from a Form or Report Event |
|
|
326 | (3) |
|
Modifying an Existing Macro |
|
|
329 | (7) |
|
Inserting New Macro Actions |
|
|
329 | (1) |
|
|
329 | (1) |
|
|
330 | (1) |
|
|
331 | (1) |
|
Creating an Embedded Macro |
|
|
332 | (2) |
|
What New Features Are Available in Macros? |
|
|
334 | (2) |
|
Documenting Your Macro: Adding Comments |
|
|
336 | (1) |
|
|
337 | (2) |
|
Determining When You Should Use Macros and When You Shouldn't |
|
|
339 | (1) |
|
Converting a Macro to VBA Code |
|
|
339 | (2) |
|
Creating an AutoExec Macro |
|
|
341 | (1) |
|
|
342 | (1) |
|
Practical Examples: Adding an AutoExec Macro to the Time and Billing Application |
|
|
343 | (1) |
|
|
343 | (2) |
|
|
345 | (56) |
|
Why This Chapter Is Important |
|
|
345 | (1) |
|
|
345 | (2) |
|
What Are Access Class Modules, Standard Modules, Form Modules, and Report Modules? |
|
|
347 | (11) |
|
Where Is VBA Code Written? |
|
|
348 | (1) |
|
|
348 | (1) |
|
|
349 | (3) |
|
Creating Event Procedures |
|
|
352 | (1) |
|
Creating Functions and Subroutines |
|
|
352 | (2) |
|
Calling Event and User-Defined Procedures |
|
|
354 | (1) |
|
Scope and Lifetime of Procedures |
|
|
355 | (3) |
|
|
358 | (5) |
|
|
358 | (1) |
|
|
359 | (1) |
|
Scope and Lifetime of Variables: Exposing Your Variablesas Little as Possible |
|
|
360 | (3) |
|
Adding Comments to Your Code |
|
|
363 | (1) |
|
Using the Line Continuation Character |
|
|
364 | (1) |
|
Using the VBA Control Structures |
|
|
364 | (9) |
|
|
365 | (1) |
|
|
366 | (1) |
|
The Conditional If: Conditional Compilation |
|
|
367 | (1) |
|
|
368 | (1) |
|
|
369 | (2) |
|
|
371 | (1) |
|
|
372 | (1) |
|
|
372 | (1) |
|
Passing Parameters and Returning Values |
|
|
373 | (1) |
|
Executing Procedures from the Module Window |
|
|
374 | (1) |
|
The DoCmd Object: Performing Macro Actions |
|
|
374 | (2) |
|
Working with Built-In Functions |
|
|
376 | (4) |
|
|
376 | (3) |
|
Functions Made Easy with the Object Browser |
|
|
379 | (1) |
|
|
380 | (3) |
|
Working with Symbolic Constants |
|
|
381 | (1) |
|
Working with Intrinsic Constants |
|
|
382 | (1) |
|
Working with the Visual Basic Editor Tools |
|
|
383 | (11) |
|
List Properties and Methods |
|
|
384 | (1) |
|
|
385 | (1) |
|
|
385 | (1) |
|
|
386 | (1) |
|
|
386 | (1) |
|
|
387 | (1) |
|
Mysteries of the Coding Environment Solved |
|
|
388 | (1) |
|
|
388 | (2) |
|
|
390 | (1) |
|
The View Microsoft Access Tool |
|
|
390 | (1) |
|
|
390 | (1) |
|
|
391 | (2) |
|
Splitting the Code Window |
|
|
393 | (1) |
|
Using Bookmarks to Save Your Place |
|
|
394 | (1) |
|
|
394 | (2) |
|
Coding Options---The Editor Tab |
|
|
394 | (1) |
|
Code Color, Fonts, and Sizes---The Editor Format Tab |
|
|
395 | (1) |
|
General Options---The General Tab |
|
|
395 | (1) |
|
Docking Options---The Docking Tab |
|
|
396 | (1) |
|
Practical Examples: Using Event Routines, User-Defined Functions, and Subroutines |
|
|
396 | (3) |
|
|
399 | (2) |
|
Objects, Properties, Methods, and Events Explained |
|
|
401 | (30) |
|
Why This Chapter Is Important |
|
|
401 | (1) |
|
Understanding Objects, Properties, Events, and Methods |
|
|
401 | (4) |
|
What Exactly Are Objects? |
|
|
402 | (1) |
|
What Exactly Are Properties? |
|
|
402 | (2) |
|
|
404 | (1) |
|
What Exactly Are Methods? |
|
|
404 | (1) |
|
Using the Object Browser to Learn About Access's Objects |
|
|
405 | (2) |
|
How to Use the Object Browser |
|
|
405 | (1) |
|
Pasting Code Templates into a Procedure |
|
|
406 | (1) |
|
|
407 | (1) |
|
Working with Properties and Methods |
|
|
408 | (2) |
|
Telling the Difference Between Properties and Methods |
|
|
408 | (1) |
|
Using a Bang Versus a Period |
|
|
409 | (1) |
|
|
410 | (1) |
|
Declaring and Assigning Object Variables |
|
|
410 | (2) |
|
Object Variables Versus Regular Variables |
|
|
410 | (1) |
|
Generic Versus Specific Object Variables |
|
|
411 | (1) |
|
Cleaning Up After Yourself |
|
|
412 | (1) |
|
Understanding the Differences Between Objects and Collections |
|
|
412 | (1) |
|
Manipulating a Single Object |
|
|
412 | (1) |
|
Manipulating a Collection of Objects |
|
|
413 | (1) |
|
Passing Objects to Subroutines and Functions |
|
|
413 | (1) |
|
Determining the Type of a Control |
|
|
414 | (1) |
|
Using Special Properties That Refer to Objects |
|
|
415 | (1) |
|
Understanding Access's Object Model |
|
|
416 | (8) |
|
|
416 | (2) |
|
|
418 | (1) |
|
|
419 | (1) |
|
|
420 | (1) |
|
The CurrentProject Object |
|
|
420 | (2) |
|
|
422 | (1) |
|
|
423 | (1) |
|
|
423 | (1) |
|
|
423 | (1) |
|
|
423 | (1) |
|
Taking Advantage of Additional Useful Properties |
|
|
424 | (1) |
|
Practical Examples: Working with Objects |
|
|
425 | (4) |
|
Enabling and Disabling Command Buttons |
|
|
425 | (4) |
|
|
429 | (2) |
|
|
431 | (62) |
|
Why This Chapter Is Important |
|
|
431 | (1) |
|
What Are the Form Events, and When Do You Use Them? |
|
|
431 | (12) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
432 | (1) |
|
|
433 | (1) |
|
|
434 | (1) |
|
|
434 | (1) |
|
|
434 | (1) |
|
|
435 | (1) |
|
|
435 | (1) |
|
|
435 | (1) |
|
|
435 | (1) |
|
|
436 | (1) |
|
|
436 | (1) |
|
|
437 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
439 | (1) |
|
|
440 | (1) |
|
|
440 | (1) |
|
|
440 | (1) |
|
|
440 | (1) |
|
|
440 | (1) |
|
|
441 | (1) |
|
Understanding the Sequence of Form Events |
|
|
441 | (2) |
|
What Are the Section and Control Events, and When Do You Use Them? |
|
|
443 | (7) |
|
|
443 | (1) |
|
|
443 | (1) |
|
|
444 | (1) |
|
|
444 | (1) |
|
|
444 | (1) |
|
|
445 | (1) |
|
|
445 | (1) |
|
|
445 | (1) |
|
|
446 | (1) |
|
|
446 | (1) |
|
|
447 | (1) |
|
|
448 | (1) |
|
|
448 | (1) |
|
|
448 | (1) |
|
|
448 | (1) |
|
|
449 | (1) |
|
|
449 | (1) |
|
Understanding the Sequence of Control Events |
|
|
449 | (1) |
|
|
450 | (1) |
|
What Types of Forms Can I Create, and When Are They Appropriate? |
|
|
450 | (10) |
|
Single Forms: Viewing One Record at a Time |
|
|
451 | (1) |
|
Continuous Forms: Viewing Multiple Records at a Time |
|
|
451 | (2) |
|
Multipage Forms: Finding Solutions When Everything Doesn't Fit on One Screen |
|
|
453 | (2) |
|
Tabbed Forms: Conserving Screen Real Estate |
|
|
455 | (2) |
|
Switchboard Forms: Controlling Your Application |
|
|
457 | (2) |
|
Splash Screen Forms: Creating a Professional Opening to Your Application |
|
|
459 | (1) |
|
Dialog Forms: Gathering Information |
|
|
459 | (1) |
|
Using Built-In Dialog Boxes |
|
|
460 | (4) |
|
|
460 | (2) |
|
|
462 | (1) |
|
|
463 | (1) |
|
Taking Advantage of Built-In, Form-Filtering Features |
|
|
464 | (2) |
|
Including Objects from Other Applications: Linking Versus Embedding |
|
|
466 | (2) |
|
|
466 | (1) |
|
|
467 | (1) |
|
|
468 | (1) |
|
Switching a Form's RecordSource |
|
|
468 | (3) |
|
Learning Power Combo Box and List Box Techniques |
|
|
471 | (5) |
|
Handling the NotInList Event |
|
|
472 | (1) |
|
Working with a Pop-Up Form |
|
|
473 | (1) |
|
Adding Items to a Combo Box or List Box at Runtime |
|
|
474 | (1) |
|
Handling Multiple Selections in a List Box |
|
|
475 | (1) |
|
Learning Power Subform Techniques |
|
|
476 | (1) |
|
Referring to Subform Controls |
|
|
476 | (1) |
|
Using Automatic Error Checking |
|
|
477 | (2) |
|
Viewing Object Dependencies |
|
|
479 | (1) |
|
Using AutoCorrect Options |
|
|
480 | (1) |
|
Propagating Field Properties |
|
|
481 | (2) |
|
Synchronizing a Form with Its Underlying Recordset |
|
|
483 | (1) |
|
Creating Custom Properties and Methods |
|
|
484 | (6) |
|
Creating Custom Properties |
|
|
484 | (5) |
|
|
489 | (1) |
|
Practical Examples: Applying Advanced Techniques to Your Application |
|
|
490 | (1) |
|
Getting Things Going with a Startup Form |
|
|
490 | (1) |
|
|
491 | (1) |
|
|
491 | (2) |
|
Advanced Report Techniques |
|
|
493 | (46) |
|
Why This Chapter Is Important |
|
|
493 | (1) |
|
Events Available for Reports and When to Use Them |
|
|
493 | (3) |
|
|
493 | (1) |
|
|
494 | (1) |
|
|
494 | (1) |
|
|
495 | (1) |
|
|
495 | (1) |
|
Order of Events for Reports |
|
|
496 | (1) |
|
Events Available for Report Sections and When to Use Them |
|
|
496 | (5) |
|
|
496 | (2) |
|
|
498 | (2) |
|
|
500 | (1) |
|
|
500 | (1) |
|
Programmatically Manipulating Report Sections |
|
|
501 | (1) |
|
Taking Advantage of Special Report Properties |
|
|
501 | (2) |
|
|
502 | (1) |
|
|
502 | (1) |
|
|
502 | (1) |
|
Interaction of MoveLayout, NextRecord, and PrintSection |
|
|
502 | (1) |
|
|
503 | (1) |
|
|
503 | (1) |
|
|
503 | (1) |
|
|
503 | (1) |
|
|
503 | (2) |
|
|
503 | (1) |
|
|
504 | (1) |
|
Using Automatic Error Checking |
|
|
505 | (2) |
|
Propagating Field Properties |
|
|
507 | (2) |
|
Incorporating Practical Applications of Report Events and Properties |
|
|
509 | (27) |
|
Changing a Report's RecordSource |
|
|
509 | (4) |
|
Working with Report Filters |
|
|
513 | (2) |
|
Working with the Report Sort Order |
|
|
515 | (1) |
|
Using the Same Report to Display Summary, Detail, or Both |
|
|
516 | (2) |
|
|
518 | (2) |
|
|
520 | (2) |
|
Determining Where a Label Prints |
|
|
522 | (1) |
|
Building a Report from a Crosstab Query |
|
|
523 | (7) |
|
Printing the First and Last Page Entries in the Page Header |
|
|
530 | (3) |
|
Creating a Multifact Crosstab Report |
|
|
533 | (3) |
|
Practical Examples: Practicing What You Learned |
|
|
536 | (1) |
|
|
537 | (2) |
|
Advanced Query Techniques |
|
|
539 | (60) |
|
Why This Chapter Is Important |
|
|
539 | (1) |
|
|
539 | (9) |
|
|
539 | (3) |
|
|
542 | (1) |
|
|
543 | (2) |
|
|
545 | (2) |
|
Using Action Queries Versus Processing Records with Code |
|
|
547 | (1) |
|
Viewing Special Query Properties |
|
|
548 | (4) |
|
|
549 | (1) |
|
|
549 | (2) |
|
|
551 | (1) |
|
|
552 | (4) |
|
Understanding the Query Compilation Process |
|
|
553 | (1) |
|
Analyzing a Query's Performance |
|
|
553 | (1) |
|
Steps You Can Take to Improve a Query's Performance |
|
|
554 | (1) |
|
|
555 | (1) |
|
|
556 | (6) |
|
Creating a Crosstab Query with the Crosstab Query Wizard |
|
|
557 | (2) |
|
Creating a Crosstab Query Without the Crosstab Query Wizard |
|
|
559 | (2) |
|
Creating Fixed Column Headings |
|
|
561 | (1) |
|
Important Notes About Crosstab Queries |
|
|
561 | (1) |
|
|
562 | (2) |
|
|
564 | (2) |
|
|
566 | (9) |
|
What Is SQL, and Where Did It Come From? |
|
|
566 | (1) |
|
What Do You Need to Know About SQL? |
|
|
567 | (1) |
|
|
567 | (1) |
|
|
567 | (6) |
|
Applying What You Have Learned |
|
|
573 | (2) |
|
|
575 | (3) |
|
|
576 | (1) |
|
Sorting the Query Results |
|
|
576 | (1) |
|
Using the Graphical QBE to Create a Union Query |
|
|
576 | (1) |
|
Important Notes about Union Queries |
|
|
577 | (1) |
|
Using Pass-Through Queries |
|
|
578 | (1) |
|
Examining the Propagation of Nulls and Query Results |
|
|
579 | (2) |
|
|
581 | (1) |
|
|
582 | (2) |
|
|
582 | (1) |
|
|
582 | (1) |
|
The Insert Into Statement |
|
|
583 | (1) |
|
The Select Into Statement |
|
|
583 | (1) |
|
Using SQL for Data Definition |
|
|
584 | (2) |
|
The Create Table Statement |
|
|
584 | (1) |
|
The Create Index Statement |
|
|
584 | (1) |
|
The Alter Table Statement |
|
|
585 | (1) |
|
|
585 | (1) |
|
|
586 | (1) |
|
Using the Result of a Function as the Criteria for a Query |
|
|
586 | (2) |
|
Passing Parameter Query Values from a Form |
|
|
588 | (2) |
|
Understanding Jet 4.0 ANSI-92 Extensions |
|
|
590 | (5) |
|
|
590 | (3) |
|
View and Stored Procedures Extensions |
|
|
593 | (1) |
|
|
594 | (1) |
|
Practical Examples: Applying These Techniques in Your Application |
|
|
595 | (3) |
|
|
595 | (2) |
|
|
597 | (1) |
|
|
597 | (1) |
|
|
598 | (1) |
|
|
599 | (38) |
|
Why This Chapter Is Important |
|
|
599 | (1) |
|
What Are User-Defined Types, and Why Would You Use Them? |
|
|
599 | (3) |
|
Declaring a User-Defined Type |
|
|
600 | (1) |
|
|
600 | (1) |
|
Storing Information from a Record in a Form into a Type Variable |
|
|
601 | (1) |
|
Retrieving Information from the Elements of a Type Variable |
|
|
601 | (1) |
|
|
602 | (3) |
|
Defining Your Own Constants |
|
|
602 | (2) |
|
Working with Intrinsic Constants |
|
|
604 | (1) |
|
|
605 | (5) |
|
Declaring and Working with Fixed Arrays |
|
|
605 | (2) |
|
Declaring and Working with Dynamic Arrays |
|
|
607 | (2) |
|
Passing Arrays as Parameters |
|
|
609 | (1) |
|
Understanding Advanced Function Techniques |
|
|
610 | (8) |
|
Passing by Reference Versus Passing by Value |
|
|
610 | (3) |
|
Optional Parameters: Building Flexibility into Functions |
|
|
613 | (3) |
|
Named Parameters: Eliminate the Need to Count Commas |
|
|
616 | (1) |
|
|
616 | (2) |
|
Working with Empty and Null |
|
|
618 | (7) |
|
|
618 | (1) |
|
|
619 | (6) |
|
Creating and Working with Custom Collections |
|
|
625 | (3) |
|
Creating a Custom Collection |
|
|
626 | (1) |
|
Adding Items to a Custom Collection |
|
|
626 | (1) |
|
Accessing an Item in a Custom Collection |
|
|
627 | (1) |
|
Removing Items from a Custom Collection |
|
|
627 | (1) |
|
Iterating Through the Elements of a Custom Collection |
|
|
628 | (1) |
|
Handling Files with Low-Level File Handling |
|
|
628 | (1) |
|
Understanding and Effectively Using Compilation Options |
|
|
629 | (1) |
|
|
629 | (1) |
|
Importing and Exporting Code Modules |
|
|
630 | (1) |
|
Working with Project Properties |
|
|
631 | (1) |
|
Practical Examples: Putting Advanced Techniques to Use |
|
|
632 | (3) |
|
Examples of Null, the DoCmd Object, and Intrinsic Constants |
|
|
632 | (1) |
|
An Example of Using a Type Structure |
|
|
633 | (2) |
|
|
635 | (2) |
|
Exploiting the Power of Class Modules |
|
|
637 | (34) |
|
Why This Chapter Is Important |
|
|
637 | (1) |
|
Object Orientation---An Introduction |
|
|
637 | (1) |
|
Creating and Using a Class Module |
|
|
638 | (4) |
|
|
639 | (1) |
|
|
639 | (1) |
|
Instantiating and Using the Class |
|
|
640 | (1) |
|
Property Let and Get---Adding Properties the Right Way |
|
|
640 | (2) |
|
Setting Values with Property Set |
|
|
642 | (1) |
|
Creating Multiple Class Instances |
|
|
642 | (1) |
|
Adding Code to the Initialize and Terminate Events |
|
|
643 | (1) |
|
|
643 | (1) |
|
|
644 | (1) |
|
Working with Enumerated Types |
|
|
644 | (2) |
|
Building Hierarchies of Classes |
|
|
646 | (1) |
|
Adding a Parent Property to Classes |
|
|
647 | (1) |
|
Using the Implements Keyword |
|
|
648 | (1) |
|
Working with Custom Collections |
|
|
648 | (3) |
|
Creating a Custom Collection |
|
|
649 | (1) |
|
Adding Items to a Custom Collection |
|
|
649 | (1) |
|
Looping Through the Elements of a Custom Collection |
|
|
650 | (1) |
|
Referencing Items in a Custom Collection |
|
|
650 | (1) |
|
Removing Items from a Custom Collection |
|
|
650 | (1) |
|
|
651 | (1) |
|
Practical Examples: Using Class Modules |
|
|
652 | (17) |
|
The FileInformation Class |
|
|
652 | (4) |
|
|
656 | (10) |
|
The SystemInformation Class |
|
|
666 | (3) |
|
|
669 | (2) |
|
What Are ActiveX Data Objects, and Why Are They Important? |
|
|
671 | (56) |
|
Why This Chapter Is Important |
|
|
671 | (1) |
|
|
671 | (9) |
|
|
672 | (4) |
|
|
676 | (2) |
|
|
678 | (2) |
|
Understanding ADO Recordset Types |
|
|
680 | (8) |
|
|
680 | (2) |
|
|
682 | (2) |
|
|
684 | (1) |
|
Consistent Versus Inconsistent Updates |
|
|
685 | (1) |
|
Selecting a Cursor Location |
|
|
686 | (1) |
|
Working with the Supports Method |
|
|
687 | (1) |
|
Working with ADO Recordset Properties and Methods |
|
|
688 | (16) |
|
Examining Record-Movement Methods |
|
|
688 | (2) |
|
Detecting the Limits of a Recordset |
|
|
690 | (1) |
|
Counting the Number of Records in a Recordset |
|
|
691 | (2) |
|
Sorting, Filtering, and Finding Records |
|
|
693 | (6) |
|
Using the AbsolutePosition Property |
|
|
699 | (1) |
|
Using the Bookmark Property |
|
|
700 | (1) |
|
Running Parameter Queries |
|
|
701 | (1) |
|
Refreshing Recordset Data |
|
|
702 | (1) |
|
Working with Persisting Recordsets |
|
|
702 | (2) |
|
Modifying Table Data Using ADO Code |
|
|
704 | (11) |
|
Changing Record Data One Record at a Time |
|
|
704 | (3) |
|
|
707 | (1) |
|
|
708 | (4) |
|
Deleting an Existing Record |
|
|
712 | (2) |
|
|
714 | (1) |
|
Creating and Modifying Database Objects Using ADO Code |
|
|
715 | (4) |
|
Adding a Table Using Code |
|
|
715 | (2) |
|
Removing a Table Using Code |
|
|
717 | (1) |
|
Establishing Relationships Using Code |
|
|
717 | (1) |
|
Creating a Query Using Code |
|
|
718 | (1) |
|
Practical Examples: Applying These Techniques to Your Application |
|
|
719 | (5) |
|
Using Recordset Methods on a Data-Entry Form |
|
|
719 | (5) |
|
|
724 | (3) |
|
Part II What to Do When Things Don't Go as Planned |
|
|
|
Debugging: Your Key to Successful Development |
|
|
727 | (28) |
|
Why This Chapter Is Important |
|
|
727 | (1) |
|
|
727 | (2) |
|
|
728 | (1) |
|
|
728 | (1) |
|
|
728 | (1) |
|
|
728 | (1) |
|
|
728 | (1) |
|
Harnessing the Power of the Immediate Window |
|
|
729 | (6) |
|
Testing Values of Variables and Properties |
|
|
730 | (1) |
|
Setting Values of Variables and Properties |
|
|
730 | (2) |
|
Clearing the Immediate Window |
|
|
732 | (1) |
|
Practicing with the Built-In Functions |
|
|
733 | (1) |
|
Executing Subroutines, Functions, and Methods |
|
|
733 | (1) |
|
Printing to the Immediate Window at Runtime |
|
|
734 | (1) |
|
|
735 | (1) |
|
Using Breakpoints to Troubleshoot |
|
|
736 | (2) |
|
|
738 | (4) |
|
|
738 | (1) |
|
Executing Until You Reach the Next Breakpoint |
|
|
739 | (2) |
|
|
741 | (1) |
|
|
742 | (1) |
|
Setting the Next Statement to Execute |
|
|
742 | (1) |
|
Using the Call Stack Window |
|
|
743 | (1) |
|
Working with the Locals Window |
|
|
744 | (1) |
|
Working with Watch Expressions |
|
|
745 | (5) |
|
|
745 | (1) |
|
|
745 | (1) |
|
Adding a Watch Expression |
|
|
746 | (2) |
|
Editing a Watch Expression |
|
|
748 | (1) |
|
Breaking When an Expression Is True |
|
|
748 | (1) |
|
Breaking When an Expression Changes |
|
|
749 | (1) |
|
Continuing Execution After a Runtime Error |
|
|
750 | (1) |
|
Looking at Gotchas with the Immediate Window |
|
|
751 | (1) |
|
|
752 | (1) |
|
|
752 | (1) |
|
Practical Examples: Debugging Real Applications |
|
|
753 | (1) |
|
|
753 | (2) |
|
Error Handling: Preparing for the Inevitable |
|
|
755 | (46) |
|
Why This Chapter Is Important |
|
|
755 | (1) |
|
Implementing Error Handling |
|
|
755 | (3) |
|
Using On Error Statements |
|
|
758 | (2) |
|
The On Error GoTo Statement |
|
|
758 | (2) |
|
The On Error Resume Next Statement |
|
|
760 | (1) |
|
|
760 | (4) |
|
|
761 | (1) |
|
The Resume Next Statement |
|
|
762 | (1) |
|
The Resume <LineLabel> Statement |
|
|
763 | (1) |
|
|
764 | (1) |
|
Examining the Cascading Error Effect |
|
|
765 | (1) |
|
|
766 | (1) |
|
|
767 | (2) |
|
Generating an Error on Purpose |
|
|
767 | (1) |
|
Creating User-Defined Errors |
|
|
768 | (1) |
|
Using the Errors Collection |
|
|
769 | (1) |
|
Creating a Generic Error Handler |
|
|
770 | (16) |
|
|
774 | (2) |
|
Determining the Appropriate Response to an Error |
|
|
776 | (4) |
|
|
780 | (2) |
|
|
782 | (3) |
|
|
785 | (1) |
|
Preventing Your Own Error Handling from Being Invoked |
|
|
786 | (1) |
|
|
786 | (4) |
|
Building a Custom Error Handler Class |
|
|
790 | (6) |
|
Working with Error Events |
|
|
796 | (1) |
|
Creating a List of Error Codes and Descriptions |
|
|
797 | (1) |
|
Practical Examples: Incorporating Error Handling |
|
|
798 | (1) |
|
|
799 | (2) |
|
Optimizing Your Application |
|
|
801 | (34) |
|
Why This Chapter Is Important |
|
|
801 | (1) |
|
|
801 | (1) |
|
Modifying Hardware and Software Configurations |
|
|
802 | (4) |
|
Hardware, Hardware, More Hardware, Please! |
|
|
802 | (4) |
|
Change Access's Software Settings |
|
|
806 | (1) |
|
What Is the Access Database Engine? |
|
|
806 | (1) |
|
Letting the Performance Analyzer Determine Problem Areas |
|
|
807 | (1) |
|
Designing Tables to Optimize Performance |
|
|
808 | (2) |
|
|
808 | (1) |
|
I Thought You Just Told Me to Normalize |
|
|
808 | (1) |
|
|
809 | (1) |
|
Select the Correct Data Type |
|
|
809 | (1) |
|
Designing Database Objects to Improve Performance |
|
|
810 | (21) |
|
Optimizing the Performance of Your Queries |
|
|
810 | (1) |
|
Making Coding Changes to Improve Performance |
|
|
811 | (18) |
|
Designing Forms and Reports to Improve Performance |
|
|
829 | (2) |
|
Practical Examples: Improving the Performance of Your Applications |
|
|
831 | (1) |
|
|
832 | (3) |
|
Part III Developing Multiuser and Enterprise Applications |
|
|
|
A Strategy to Developing Access Applications |
|
|
835 | (12) |
|
Why This Chapter Is Important |
|
|
835 | (1) |
|
Splitting Databases into Tables and Other Objects |
|
|
835 | (2) |
|
Basing Forms and Reports on Queries or Embedded SQL Statements |
|
|
837 | (1) |
|
Preparing an Application for Distribution |
|
|
838 | (4) |
|
Basing Your Application Around Forms |
|
|
839 | (1) |
|
Adding Startup Options to Your Database |
|
|
839 | (1) |
|
Securing Your Application |
|
|
839 | (2) |
|
Building Error Handling into Your Application |
|
|
841 | (1) |
|
|
841 | (1) |
|
|
841 | (1) |
|
Using Access as a Front End |
|
|
842 | (3) |
|
Factors You Need to Worry About When Converting to Client/Server |
|
|
842 | (1) |
|
Benefits and Costs of Client/Server Technology |
|
|
843 | (1) |
|
Your Options When Using Access as a Front End |
|
|
844 | (1) |
|
What Are the Considerations for Migrating to a Client/Server Environment? |
|
|
845 | (1) |
|
Practical Examples: Applying the Strategy to the Computer Consulting Firm Application |
|
|
845 | (1) |
|
|
845 | (2) |
|
|
847 | (36) |
|
Why This Chapter Is Important |
|
|
847 | (1) |
|
Importing, Linking, and Opening Files: When and Why |
|
|
848 | (2) |
|
|
848 | (2) |
|
Looking at Supported File Formats |
|
|
850 | (1) |
|
|
850 | (4) |
|
|
850 | (2) |
|
|
852 | (2) |
|
Creating a Link to External Data |
|
|
854 | (10) |
|
|
854 | (5) |
|
|
859 | (5) |
|
Opening an External Table |
|
|
864 | (2) |
|
Providing Connection Information |
|
|
864 | (1) |
|
|
864 | (2) |
|
Understanding Windows Registry Settings |
|
|
866 | (1) |
|
Using the Jet OLEDB: Link Provider String |
|
|
866 | (1) |
|
|
867 | (2) |
|
Refreshing and Removing Links |
|
|
869 | (3) |
|
Updating Links That Have Moved |
|
|
869 | (2) |
|
|
871 | (1) |
|
Making a Local Table from a Linked Table |
|
|
871 | (1) |
|
Looking at Special Considerations |
|
|
872 | (1) |
|
|
872 | (1) |
|
|
873 | (1) |
|
|
873 | (1) |
|
|
873 | (1) |
|
|
874 | (1) |
|
Looking at Performance Considerations and Links |
|
|
874 | (1) |
|
Working with HTML Documents |
|
|
874 | (3) |
|
Practical Examples: Working with External Data from Within Your Application |
|
|
877 | (4) |
|
Splitting the Database Using the Database Splitter |
|
|
877 | (1) |
|
|
877 | (4) |
|
|
881 | (2) |
|
Access 2007 and SharePoint |
|
|
883 | (26) |
|
Why This Chapter Is Important? |
|
|
883 | (2) |
|
Exporting Selected Data to a SharePoint Site |
|
|
883 | (1) |
|
Moving an Entire Database to a SharePoint Site |
|
|
884 | (1) |
|
Opening Access Forms and Reports from a SharePoint Site |
|
|
884 | (1) |
|
Creating Databases from SharePoint Lists |
|
|
884 | (1) |
|
Taking SharePoint Lists Offline with Access |
|
|
884 | (1) |
|
Summary of Benefits of Working with SharePoint |
|
|
884 | (1) |
|
The Access 2007 (accdb) File Format and SharePoint |
|
|
885 | (1) |
|
Exporting Data to a SharePoint Site |
|
|
885 | (6) |
|
Why Export Data to a SharePoint Site? |
|
|
885 | (1) |
|
How to Export Data to a SharePoint Site |
|
|
886 | (5) |
|
Publishing Data to a SharePoint Site |
|
|
891 | (5) |
|
How the Wizard Moves Data to the SharePoint Site |
|
|
896 | (1) |
|
Opening Access Forms and Reports from a SharePoint Site |
|
|
896 | (4) |
|
Linking to and Importing from SharePoint Lists |
|
|
900 | (3) |
|
Taking SharePoint Lists Offline with Access |
|
|
903 | (3) |
|
Synchronizing Your Changes with SharePoint |
|
|
903 | (1) |
|
|
904 | (1) |
|
|
904 | (2) |
|
Reestablishing Links When a SharePoint Site Has Been Moved |
|
|
906 | (1) |
|
|
907 | (2) |
|
Developing Multiuser and Enterprise Applications |
|
|
909 | (26) |
|
Why This Chapter Is Important |
|
|
909 | (1) |
|
Designing Your Application with Multiuser Issues in Mind |
|
|
909 | (4) |
|
Multiuser Design Strategies |
|
|
910 | (2) |
|
The Basics of Linking to External Data |
|
|
912 | (1) |
|
Understanding Access's Locking Mechanisms |
|
|
913 | (1) |
|
Understanding the Client/Server Model |
|
|
914 | (1) |
|
Deciding Whether to Use the Client/Server Model |
|
|
914 | (5) |
|
Dealing with a Large Volume of Data |
|
|
916 | (1) |
|
Dealing with a Large Number of Concurrent Users |
|
|
916 | (1) |
|
Demanding Faster Performance |
|
|
917 | (1) |
|
Handling Increased Network Traffic |
|
|
917 | (1) |
|
Implementing Backup and Recovery |
|
|
917 | (1) |
|
|
918 | (1) |
|
Sharing Data Among Multiple Front-End Tools |
|
|
918 | (1) |
|
Understanding What It All Means |
|
|
918 | (1) |
|
Understanding the Roles That Access Plays in the Application Design Model |
|
|
919 | (3) |
|
The Front End and Back End as Access ACCDB Files |
|
|
919 | (1) |
|
The Front End as an ACCDB File Using Links to Communicateto a Back End |
|
|
919 | (1) |
|
The Front End Using SQL Pass-Through to Communicate to a Back End |
|
|
920 | (1) |
|
The Front End Executing Procedures Stored on a Back End |
|
|
921 | (1) |
|
The Front End as a Microsoft Access Data Project Communicating Directly to a Back End |
|
|
921 | (1) |
|
Learning the Client/Server Buzzwords |
|
|
922 | (1) |
|
Upsizing: What to Worry About |
|
|
923 | (2) |
|
|
923 | (1) |
|
|
923 | (1) |
|
|
924 | (1) |
|
|
924 | (1) |
|
|
924 | (1) |
|
|
924 | (1) |
|
|
924 | (1) |
|
|
925 | (1) |
|
|
925 | (1) |
|
|
925 | (1) |
|
|
925 | (1) |
|
Proactively Preparing for Upsizing |
|
|
925 | (1) |
|
Using Transaction Processing |
|
|
926 | (5) |
|
Understanding the Benefits of Transaction Processing |
|
|
927 | (1) |
|
Modifying the Default Behavior of Transaction Processing |
|
|
927 | (2) |
|
Implementing Explicit Transaction Processing |
|
|
929 | (2) |
|
Practical Examples: Getting Your Application Ready for an Enterprise Environment |
|
|
931 | (1) |
|
|
931 | (4) |
|
Part IV Black Belt Programming |
|
|
|
Working with and Customizing Ribbons |
|
|
935 | (14) |
|
Why This Chapter Is Important |
|
|
935 | (1) |
|
Customizing the Ribbon: An Overview |
|
|
935 | (1) |
|
|
936 | (1) |
|
Enabling the Display of System Errors |
|
|
937 | (1) |
|
Creating the USysRibbons Table |
|
|
938 | (1) |
|
Adding Data to the USysRibbons Table |
|
|
939 | (1) |
|
Applying the Custom Ribbon |
|
|
940 | (3) |
|
Applying a Custom Ribbon to the Entire Database |
|
|
940 | (1) |
|
Applying a Custom Ribbon to a Form or Report |
|
|
941 | (2) |
|
|
943 | (1) |
|
Restoring the Ribbon to Its Default Settings |
|
|
943 | (1) |
|
Adding Additional Groups and Controls |
|
|
944 | (2) |
|
Executing a Macro from the Ribbon |
|
|
946 | (1) |
|
Practical Examples: Securing an Access 2007 Database |
|
|
947 | (1) |
|
|
947 | (2) |
|
Automation: Communicating with Other Applications |
|
|
949 | (36) |
|
Why This Chapter Is Important |
|
|
949 | (1) |
|
Defining Some Automation Terms |
|
|
950 | (1) |
|
Declaring an Object Variable to Reference Your Application |
|
|
950 | (3) |
|
Creating an Automation Object |
|
|
953 | (1) |
|
Declaring an Object Variable |
|
|
953 | (1) |
|
Manipulating an Automation Object |
|
|
953 | (1) |
|
Setting and Retrieving Properties |
|
|
953 | (1) |
|
|
954 | (1) |
|
Using Early Binding Versus Late Binding |
|
|
954 | (2) |
|
CreateObject and GetObject |
|
|
955 | (1) |
|
Controlling Excel from Access |
|
|
956 | (4) |
|
Closing an Excel Automation Object |
|
|
960 | (1) |
|
Creating a Graph from Access |
|
|
961 | (5) |
|
Controlling Word from Access |
|
|
966 | (4) |
|
Using Word to Generate a Mass Mailing |
|
|
966 | (3) |
|
Using Word to Overcome the Limitations of Access as a Report Writer |
|
|
969 | (1) |
|
Controlling PowerPoint from Access |
|
|
970 | (4) |
|
Automating Outlook from Access |
|
|
974 | (2) |
|
Controlling Access from Other Applications |
|
|
976 | (3) |
|
Practical Examples: Using Automation to Extend the Functionality of Your Applications |
|
|
979 | (5) |
|
|
984 | (1) |
|
Exploiting the Powerof the Windows API |
|
|
985 | (26) |
|
Why This Chapter Is Important |
|
|
985 | (1) |
|
Declaring an External Function to the Compiler |
|
|
985 | (6) |
|
Passing Parameters to DLL Functions |
|
|
987 | (2) |
|
|
989 | (2) |
|
Working with Constants and Types |
|
|
991 | (2) |
|
|
991 | (1) |
|
|
992 | (1) |
|
Calling DLL Functions: Important Issues |
|
|
993 | (1) |
|
|
993 | (15) |
|
Manipulating the Windows Registry |
|
|
994 | (3) |
|
Getting Information About the Operating Environment |
|
|
997 | (8) |
|
Determining Drive Types and Available Drive Space |
|
|
1005 | (3) |
|
Practical Examples: Using Windows API Functions in Your Applications |
|
|
1008 | (1) |
|
|
1009 | (2) |
|
Creating Your Own Libraries |
|
|
1011 | (16) |
|
Why This Chapter Is Important |
|
|
1011 | (1) |
|
Preparing a Database to Be a Library |
|
|
1012 | (1) |
|
Structuring Code Modules for Optimal Performance |
|
|
1012 | (1) |
|
Writing Library Code That Runs |
|
|
1013 | (1) |
|
|
1013 | (1) |
|
|
1013 | (9) |
|
Creating a Library Reference |
|
|
1014 | (1) |
|
Creating a Runtime Reference |
|
|
1014 | (3) |
|
Creating an Explicit Reference |
|
|
1017 | (4) |
|
Creating a Reference Using VBA Code |
|
|
1021 | (1) |
|
Debugging a Library Database |
|
|
1022 | (1) |
|
Practical Examples: Building a Library for Your Application |
|
|
1023 | (3) |
|
|
1026 | (1) |
|
Using Buildersand Wizards |
|
|
1027 | (28) |
|
Why This Chapter Is Important |
|
|
1027 | (1) |
|
|
1027 | (12) |
|
Looking at Design Guidelines |
|
|
1028 | (1) |
|
|
1028 | (11) |
|
|
1039 | (6) |
|
Looking at Design Guidelines |
|
|
1039 | (1) |
|
|
1040 | (4) |
|
Getting the Wizard Ready to Go |
|
|
1044 | (1) |
|
|
1045 | (2) |
|
Looking at Design Guidelines |
|
|
1045 | (1) |
|
|
1046 | (1) |
|
Practical Examples: Designing Your Own Add-Ins |
|
|
1047 | (6) |
|
|
1053 | (2) |
|
An Introduction to Access and the Internet/Intranet |
|
|
1055 | (18) |
|
Why This Chapter Is Important |
|
|
1055 | (1) |
|
Saving Database Objects as HTML |
|
|
1055 | (7) |
|
Saving Table Data as HTML |
|
|
1056 | (3) |
|
Saving Query Results as HTML |
|
|
1059 | (1) |
|
|
1059 | (1) |
|
|
1060 | (2) |
|
|
1062 | (3) |
|
|
1065 | (1) |
|
Saving Database Objects as XML |
|
|
1066 | (2) |
|
|
1068 | (1) |
|
|
1069 | (1) |
|
|
1069 | (4) |
|
Part V Adding Polish to Your Application |
|
|
|
Documenting Your Application |
|
|
1073 | (18) |
|
Why This Chapter Is Important |
|
|
1073 | (1) |
|
Preparing Your Application to Be Self-Documenting |
|
|
1074 | (7) |
|
|
1074 | (1) |
|
|
1075 | (1) |
|
|
1075 | (3) |
|
|
1078 | (1) |
|
|
1078 | (1) |
|
|
1078 | (1) |
|
Using Database Properties to Document the Overall Database |
|
|
1079 | (2) |
|
Using the Database Documenter |
|
|
1081 | (5) |
|
Using the Documenter Options |
|
|
1083 | (2) |
|
Producing Documentation in Other Formats |
|
|
1085 | (1) |
|
Using the Object Dependency Feature |
|
|
1086 | (2) |
|
Writing Code to Create Your Own Documentation |
|
|
1088 | (1) |
|
Practical Examples: Applying What You Learned |
|
|
1089 | (1) |
|
|
1089 | (2) |
|
Maintaining Your Application |
|
|
1091 | (12) |
|
Why This Chapter Is Important |
|
|
1091 | (1) |
|
|
1091 | (8) |
|
|
1093 | (2) |
|
|
1095 | (1) |
|
Compacting Whenever a Database Closes |
|
|
1095 | (1) |
|
Using the CompactDatabase Method of the JetEngine Object |
|
|
1096 | (2) |
|
Using the CompactRepair Method of the Application Object |
|
|
1098 | (1) |
|
|
1099 | (1) |
|
Converting an Access Database |
|
|
1100 | (2) |
|
Detecting Broken References |
|
|
1102 | (1) |
|
Practical Examples: Maintaining Your Application |
|
|
1102 | (1) |
|
|
1102 | (1) |
|
Database SecurityMade Easy |
|
|
1103 | (90) |
|
Why This Chapter Is Important |
|
|
1103 | (1) |
|
What's New in Access 2007 Security? |
|
|
1103 | (2) |
|
What Happened to User-Level Security? |
|
|
1105 | (1) |
|
|
1106 | (3) |
|
Trusting a Database for the Current Session |
|
|
1106 | (1) |
|
Trusting a Database Permanently |
|
|
1106 | (3) |
|
Using a Database Password to Encrypt an Office Access 2007 Database |
|
|
1109 | (1) |
|
Removing a Password from a Database |
|
|
1110 | (1) |
|
Packaging, Signing, and Distributing an Access Database |
|
|
1110 | (5) |
|
Creating a Self-Signed Certificate |
|
|
1111 | (1) |
|
Creating a Signed Package |
|
|
1112 | (1) |
|
Extracting and Using a Signed Package |
|
|
1113 | (2) |
|
|
1115 | (8) |
|
Working with the Message Bar |
|
|
1115 | (1) |
|
|
1116 | (1) |
|
Working with Access Macros and VBA Code |
|
|
1116 | (1) |
|
Working with Trusted Locations |
|
|
1117 | (3) |
|
Working with Trusted Publishers |
|
|
1120 | (3) |
|
Understanding How Databases Behave When Trusted and Untrusted |
|
|
1123 | (1) |
|
|
1123 | (2) |
|
Removing User-Level Security |
|
|
1125 | (1) |
|
Enabling or Disabling ActiveX Controls |
|
|
1125 | (1) |
|
Enabling or Disabling Add-Ins |
|
|
1126 | (1) |
|
Adding a Trusted Publisher |
|
|
1127 | (1) |
|
Practical Examples: Securing an Access 2007 Database |
|
|
1128 | (1) |
|
|
1128 | (3) |
|
|
|
|
1131 | (6) |
|
|
1137 | (56) |
|
|
1138 | (5) |
|
The tblClientAddresses Table |
|
|
1143 | (5) |
|
The tblAddressTypes Table |
|
|
1148 | (1) |
|
The tblClientPhones Table |
|
|
1149 | (2) |
|
|
1151 | (1) |
|
The tblCorrespondence Table |
|
|
1152 | (4) |
|
The tblCorrespondenceTypes Table |
|
|
1156 | (1) |
|
|
1157 | (1) |
|
|
1158 | (1) |
|
|
1159 | (5) |
|
|
1164 | (4) |
|
|
1168 | (3) |
|
|
1171 | (1) |
|
The tblExpenseCodes Table |
|
|
1172 | (1) |
|
The tblPaymentMethods Table |
|
|
1173 | (1) |
|
|
1174 | (4) |
|
|
1178 | (4) |
|
The tblTimeCardExpenses Table |
|
|
1182 | (4) |
|
The tblTimeCardHours Table |
|
|
1186 | (4) |
|
|
1190 | (1) |
|
|
1191 | (2) |
Index |
|
1193 | |