Introduction |
|
xxxix | |
Part I: Access Building Blocks |
|
1 | (28) |
|
Chapter 1 An Introduction to Database Development |
|
|
3 | (14) |
|
The Database Terminology of Access |
|
|
3 | (3) |
|
|
3 | (2) |
|
|
5 | (1) |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
7 | (2) |
|
|
7 | (1) |
|
|
8 | (1) |
|
Data-entry and display forms |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
9 | (1) |
|
Planning for database objects |
|
|
9 | (1) |
|
A Five-Step Design Method |
|
|
9 | (8) |
|
Step 1: The overall design-from concept to reality |
|
|
10 | (1) |
|
|
11 | (1) |
|
|
11 | (2) |
|
|
13 | (3) |
|
|
16 | (1) |
|
Chapter 2 Getting Started with Access |
|
|
17 | (12) |
|
The Access Welcome Screen |
|
|
17 | (1) |
|
How to Create a Blank Database |
|
|
18 | (2) |
|
The Access 2019 Interface |
|
|
20 | (11) |
|
|
20 | (4) |
|
|
21 | (1) |
|
|
22 | (1) |
|
|
23 | (1) |
|
|
23 | (1) |
|
|
23 | (1) |
|
|
24 | (1) |
|
|
25 | (4) |
Part II: Understanding Access Tables |
|
29 | (208) |
|
Chapter 3 Creating Access Tables |
|
|
31 | (56) |
|
|
31 | (1) |
|
|
31 | (1) |
|
|
32 | (1) |
|
|
32 | (1) |
|
|
32 | (17) |
|
|
34 | (5) |
|
|
39 | (2) |
|
|
39 | (1) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
41 | (1) |
|
|
41 | (8) |
|
|
41 | (1) |
|
|
42 | (7) |
|
Entering a field description |
|
|
49 | (1) |
|
Specifying data validation rules |
|
|
49 | (1) |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
50 | (1) |
|
|
50 | (18) |
|
|
51 | (1) |
|
|
51 | (1) |
|
Changing a field location |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
52 | (1) |
|
Handling data conversion issues |
|
|
52 | (1) |
|
Assigning field properties |
|
|
53 | (18) |
|
|
54 | (1) |
|
|
55 | (5) |
|
|
60 | (3) |
|
|
63 | (1) |
|
Validation Rule and Validation Text |
|
|
63 | (2) |
|
|
65 | (1) |
|
|
65 | (1) |
|
|
66 | (2) |
|
Understanding tblCustomers Field Properties |
|
|
68 | (3) |
|
|
71 | (2) |
|
|
71 | (1) |
|
|
72 | (1) |
|
Creating composite primary keys |
|
|
72 | (1) |
|
|
73 | (6) |
|
The importance of indexes |
|
|
74 | (2) |
|
|
76 | (2) |
|
|
78 | (1) |
|
|
79 | (2) |
|
Saving the Completed Table |
|
|
81 | (1) |
|
|
81 | (3) |
|
|
81 | (1) |
|
|
82 | (1) |
|
Copying tables in a database |
|
|
82 | (1) |
|
Copying a table to another database |
|
|
83 | (1) |
|
Adding Records to a Database Table |
|
|
84 | (1) |
|
Understanding Attachment Fields |
|
|
84 | (3) |
|
Chapter 4 Understanding Table Relationships |
|
|
87 | (42) |
|
Building Bulletproof Databases |
|
|
88 | (2) |
|
Data Normalization and Denormalization |
|
|
90 | (12) |
|
|
90 | (4) |
|
|
94 | (5) |
|
|
94 | (2) |
|
|
96 | (2) |
|
|
98 | (1) |
|
|
99 | (2) |
|
|
101 | (1) |
|
|
102 | (8) |
|
|
103 | (2) |
|
|
105 | (2) |
|
|
107 | (1) |
|
|
108 | (2) |
|
|
110 | (3) |
|
No primary key can contain a null value |
|
|
112 | (1) |
|
All foreign key values must be matched by corresponding primary keys |
|
|
113 | (1) |
|
|
113 | (16) |
|
Deciding on a primary key |
|
|
114 | (2) |
|
Looking at the benefits of a primary key |
|
|
116 | (1) |
|
Designating a primary key |
|
|
117 | (2) |
|
Single-field versus composite primary keys |
|
|
117 | (1) |
|
Natural versus surrogate primary keys |
|
|
118 | (1) |
|
|
119 | (1) |
|
Creating relationships and enforcing referential integrity |
|
|
119 | (6) |
|
Specifying the join type between tables |
|
|
121 | (2) |
|
Enforcing referential integrity |
|
|
123 | (2) |
|
Viewing all relationships |
|
|
125 | (1) |
|
|
126 | (1) |
|
Following application-specific integrity rules |
|
|
126 | (3) |
|
Chapter 5 Working with Access Tables |
|
|
129 | (40) |
|
|
130 | (1) |
|
Looking at the Datasheet Window |
|
|
131 | (4) |
|
Moving within a datasheet |
|
|
132 | (1) |
|
Using the Navigation buttons |
|
|
133 | (1) |
|
Examining the Datasheet Ribbon |
|
|
133 | (2) |
|
|
134 | (1) |
|
|
134 | (1) |
|
|
134 | (1) |
|
|
134 | (1) |
|
|
134 | (1) |
|
|
134 | (1) |
|
|
135 | (1) |
|
|
135 | (1) |
|
|
135 | (7) |
|
|
138 | (1) |
|
Understanding automatic data-type validation |
|
|
138 | (2) |
|
Knowing how properties affect data entry |
|
|
140 | (2) |
|
|
140 | (1) |
|
|
140 | (1) |
|
Number/Currency data entry with data validation |
|
|
141 | (1) |
|
|
141 | (1) |
|
Long Text field data entry |
|
|
141 | (1) |
|
Navigating Records in a Datasheet |
|
|
142 | (4) |
|
|
143 | (1) |
|
|
143 | (3) |
|
Changing Values in a Datasheet |
|
|
146 | (2) |
|
Manually replacing an existing value |
|
|
146 | (1) |
|
Changing an existing value |
|
|
146 | (2) |
|
|
148 | (1) |
|
Copying and Pasting Values |
|
|
148 | (1) |
|
|
149 | (1) |
|
|
150 | (1) |
|
|
150 | (2) |
|
|
152 | (8) |
|
|
152 | (1) |
|
Changing the field display width |
|
|
153 | (1) |
|
Changing the record display height |
|
|
154 | (1) |
|
|
155 | (1) |
|
Displaying cell gridlines and alternate row colors |
|
|
156 | (2) |
|
|
158 | (1) |
|
Hiding and unhiding columns |
|
|
159 | (1) |
|
|
159 | (1) |
|
Saving the changed layout |
|
|
160 | (1) |
|
|
160 | (1) |
|
Sorting and Filtering Records in a Datasheet |
|
|
160 | (5) |
|
|
161 | (1) |
|
|
161 | (3) |
|
|
164 | (1) |
|
|
165 | (1) |
|
|
166 | (1) |
|
|
167 | (2) |
|
Chapter 6 Importing and Exporting Data |
|
|
169 | (40) |
|
How Access Works with External Data |
|
|
169 | (4) |
|
|
169 | (1) |
|
Ways of working with external data |
|
|
170 | (5) |
|
When to link to external data |
|
|
171 | (1) |
|
When to import external data |
|
|
172 | (1) |
|
|
173 | (1) |
|
Options for Importing and Exporting |
|
|
173 | (2) |
|
|
175 | (27) |
|
Importing from another Access database |
|
|
175 | (3) |
|
Importing from an Excel spreadsheet |
|
|
178 | (7) |
|
Importing a SharePoint list |
|
|
185 | (1) |
|
Importing data from text files |
|
|
185 | (7) |
|
|
185 | (3) |
|
|
188 | (4) |
|
Importing and exporting XML documents |
|
|
192 | (5) |
|
Importing and exporting HTML documents |
|
|
197 | (1) |
|
Importing Access objects other than tables |
|
|
198 | (2) |
|
Importing an Outlook folder |
|
|
200 | (2) |
|
Exporting to External Formats |
|
|
202 | (7) |
|
Exporting objects to other Access databases |
|
|
202 | (1) |
|
Exporting through ODBC drivers |
|
|
203 | (2) |
|
|
205 | (1) |
|
|
205 | (1) |
|
|
206 | (3) |
|
Chapter 7 Linking to External Data |
|
|
209 | (28) |
|
|
210 | (15) |
|
Identifying linked tables |
|
|
211 | (2) |
|
Limitations of linked data |
|
|
213 | (1) |
|
Linking to other Access database tables |
|
|
214 | (2) |
|
Linking to ODBC data sources |
|
|
216 | (1) |
|
Linking to non-database data |
|
|
217 | (8) |
|
|
218 | (2) |
|
|
220 | (2) |
|
|
222 | (3) |
|
Working with Linked Tables |
|
|
225 | (4) |
|
|
225 | (1) |
|
|
226 | (1) |
|
|
226 | (1) |
|
Deleting a linked table reference |
|
|
227 | (1) |
|
Viewing or changing information for linked tables |
|
|
227 | (1) |
|
|
228 | (1) |
|
|
229 | (10) |
|
The benefits of splitting a database |
|
|
229 | (3) |
|
Knowing where to put which objects |
|
|
232 | (1) |
|
Using the Database Splitter add-in |
|
|
232 | (5) |
Part III: Working with Access Queries |
|
237 | (116) |
|
Chapter 8 Selecting Data with Queries |
|
|
239 | (30) |
|
|
240 | (1) |
|
|
240 | (1) |
|
|
241 | (1) |
|
|
241 | (6) |
|
Adding fields to your queries |
|
|
244 | (3) |
|
|
244 | (1) |
|
|
245 | (2) |
|
|
247 | (1) |
|
Working with Query Fields |
|
|
247 | (5) |
|
Selecting a field in the QBD grid |
|
|
247 | (1) |
|
|
248 | (1) |
|
Resizing columns in the QBD grid |
|
|
249 | (1) |
|
|
249 | (1) |
|
|
249 | (1) |
|
|
250 | (1) |
|
Changing the sort order of a field |
|
|
250 | (2) |
|
Adding Criteria to Your Queries |
|
|
252 | (3) |
|
Understanding selection criteria |
|
|
252 | (1) |
|
Entering simple string criteria |
|
|
252 | (2) |
|
Entering other simple criteria |
|
|
254 | (1) |
|
Printing a Query's Recordset |
|
|
255 | (1) |
|
|
256 | (1) |
|
Creating Multi-table Queries |
|
|
256 | (5) |
|
|
258 | (1) |
|
|
258 | (1) |
|
Recognizing the limitations of multi-table queries |
|
|
259 | (1) |
|
Overcoming query limitations |
|
|
260 | (1) |
|
Updating a unique index (primary key) |
|
|
260 | (1) |
|
Replacing existing data in a query with a one-to-many relationship |
|
|
260 | (1) |
|
Updating fields in queries |
|
|
260 | (1) |
|
Working with the Table Pane |
|
|
261 | (1) |
|
|
261 | (1) |
|
|
261 | (1) |
|
|
262 | (1) |
|
|
262 | (1) |
|
Creating and Working with Query Joins |
|
|
262 | (7) |
|
|
262 | (3) |
|
Leveraging ad hoc table joins |
|
|
265 | (1) |
|
Specifying the type of join |
|
|
266 | (1) |
|
|
267 | (2) |
|
Chapter 9 Using Operators and Expressions in Access |
|
|
269 | (42) |
|
|
269 | (14) |
|
|
270 | (12) |
|
|
270 | (3) |
|
|
273 | (2) |
|
|
275 | (3) |
|
Boolean (logical) operators |
|
|
278 | (2) |
|
|
280 | (2) |
|
|
282 | (1) |
|
The mathematical precedence |
|
|
282 | (1) |
|
The comparison precedence |
|
|
283 | (1) |
|
|
283 | (1) |
|
Using Operators and Expressions in Queries |
|
|
283 | (6) |
|
Using query comparison operators |
|
|
284 | (1) |
|
Understanding complex criteria |
|
|
285 | (3) |
|
Using functions in select queries |
|
|
288 | (1) |
|
Referencing fields in select queries |
|
|
289 | (1) |
|
Entering Single-Value Field Criteria |
|
|
289 | (8) |
|
Entering character (Text or Memo) criteria |
|
|
289 | (2) |
|
The Like operator and wildcards |
|
|
291 | (3) |
|
Specifying non-matching values |
|
|
294 | (1) |
|
Entering numeric criteria |
|
|
295 | (1) |
|
Entering true or false criteria |
|
|
296 | (1) |
|
Entering OLE object criteria |
|
|
297 | (1) |
|
Using Multiple Criteria in a Query |
|
|
297 | (7) |
|
Understanding an Or operation |
|
|
297 | (1) |
|
Specifying multiple values with the Or operator |
|
|
298 | (1) |
|
Using the Or cell of the QBD pane |
|
|
299 | (1) |
|
Using a list of values with the In operator |
|
|
299 | (1) |
|
Using And to specify a range |
|
|
300 | (2) |
|
Using the Between...And operator |
|
|
302 | (1) |
|
|
302 | (2) |
|
Entering Criteria in Multiple Fields |
|
|
304 | (7) |
|
Using And and Or across fields in a query |
|
|
304 | (1) |
|
Specifying Or criteria across fields of a query |
|
|
305 | (2) |
|
Using And and Or together in different fields |
|
|
307 | (1) |
|
A complex query on different lines |
|
|
308 | (3) |
|
Chapter 10 Going Beyond Select Queries |
|
|
311 | (42) |
|
|
311 | (9) |
|
Creating an aggregate query |
|
|
311 | (4) |
|
About aggregate functions |
|
|
315 | (5) |
|
|
315 | (1) |
|
Sum, Avg, Count, StDev, Var |
|
|
316 | (1) |
|
|
317 | (1) |
|
|
318 | (2) |
|
|
320 | (16) |
|
|
321 | (2) |
|
|
323 | (4) |
|
|
327 | (5) |
|
|
332 | (4) |
|
|
336 | (12) |
|
Creating a crosstab query using the Crosstab Query Wizard |
|
|
336 | (6) |
|
Creating a crosstab query manually |
|
|
342 | (6) |
|
Using the query design grid to create your crosstab query |
|
|
343 | (3) |
|
Customizing your crosstab queries |
|
|
346 | (2) |
|
Optimizing Query Performance |
|
|
348 | (7) |
|
Normalizing your database design |
|
|
349 | (1) |
|
Using indexes on appropriate fields |
|
|
349 | (1) |
|
Optimizing by improving query design |
|
|
350 | (1) |
|
Compacting and repairing your database regularly |
|
|
351 | (2) |
Part IV: Analyzing Data in Microsoft Access |
|
353 | (134) |
|
Chapter 11 Transforming Data in Access |
|
|
355 | (24) |
|
Finding and Removing Duplicate Records |
|
|
355 | (8) |
|
Defining duplicate records |
|
|
356 | (1) |
|
Finding duplicate records |
|
|
357 | (2) |
|
Removing duplicate records |
|
|
359 | (4) |
|
Common Transformation Tasks |
|
|
363 | (16) |
|
|
363 | (1) |
|
|
364 | (3) |
|
|
364 | (2) |
|
Augmenting field values with your own text |
|
|
366 | (1) |
|
|
367 | (1) |
|
Removing leading and trailing spaces from a string |
|
|
368 | (2) |
|
Finding and replacing specific text |
|
|
370 | (1) |
|
Adding your own text in key positions within a string |
|
|
370 | (4) |
|
Parsing strings using character markers |
|
|
374 | (5) |
|
|
376 | (1) |
|
|
376 | (3) |
|
Chapter 12 Working with Calculations and Dates |
|
|
379 | (26) |
|
Using Calculations in Your Analyses |
|
|
379 | (13) |
|
Common calculation scenarios |
|
|
380 | (4) |
|
Using constants in calculations |
|
|
380 | (1) |
|
Using fields in calculations |
|
|
381 | (1) |
|
Using the results of aggregation in calculations |
|
|
381 | (1) |
|
Using the results of one calculation as an expression in another |
|
|
381 | (1) |
|
Using a calculation as an argument in a function |
|
|
382 | (2) |
|
Constructing calculations with the Expression Builder |
|
|
384 | (4) |
|
Common calculation errors |
|
|
388 | (4) |
|
Understanding the order of operator precedence |
|
|
388 | (1) |
|
Watching out for null values |
|
|
389 | (2) |
|
Watching the syntax in your expressions |
|
|
391 | (1) |
|
Using Dates in Your Analyses |
|
|
392 | (13) |
|
|
392 | (1) |
|
Advanced analysis using functions |
|
|
392 | (13) |
|
|
393 | (4) |
|
The Year, Month, Day, and Weekday functions |
|
|
397 | (2) |
|
|
399 | (1) |
|
Grouping dates into quarters |
|
|
400 | (1) |
|
|
401 | (4) |
|
Chapter 13 Performing Conditional Analyses |
|
|
405 | (20) |
|
|
405 | (9) |
|
How parameter queries work |
|
|
407 | (1) |
|
Ground rules of parameter queries |
|
|
407 | (1) |
|
Working with parameter queries |
|
|
408 | (6) |
|
Working with multiple parameter conditions |
|
|
408 | (1) |
|
Combining parameters with operators |
|
|
408 | (2) |
|
Combining parameters with wildcards |
|
|
410 | (1) |
|
Using parameters as calculation variables |
|
|
411 | (1) |
|
Using parameters as function arguments |
|
|
411 | (3) |
|
Using Conditional Functions |
|
|
414 | (11) |
|
|
414 | (6) |
|
Using IIf to avoid mathematical errors |
|
|
415 | (1) |
|
|
416 | (2) |
|
Nesting IIf functions for multiple conditions |
|
|
418 | (1) |
|
Using IIf functions to create crosstab analyses |
|
|
419 | (1) |
|
|
420 | (1) |
|
Comparing the IIf and Switch functions |
|
|
421 | (4) |
|
Chapter 14 The Fundamentals of Using SQL |
|
|
425 | (20) |
|
|
425 | (5) |
|
|
426 | (2) |
|
Selecting specific columns |
|
|
427 | (1) |
|
|
427 | (1) |
|
|
428 | (1) |
|
|
428 | (2) |
|
|
428 | (1) |
|
|
429 | (1) |
|
Getting Fancy with Advanced SQL Statements |
|
|
430 | (8) |
|
Expanding your search with the Like operator |
|
|
430 | (2) |
|
Selecting unique values and rows without grouping |
|
|
432 | (1) |
|
Grouping and aggregating with the GROUP BY clause |
|
|
432 | (1) |
|
Setting the sort order with the ORDER BY clause |
|
|
433 | (1) |
|
Creating aliases with the AS clause |
|
|
433 | (1) |
|
|
433 | (1) |
|
|
433 | (1) |
|
Showing only the SELECT TOP or SELECT TOP PERCENT |
|
|
433 | (3) |
|
Top values queries explained |
|
|
434 | (1) |
|
|
435 | (1) |
|
The SELECT TOP PERCENT statement |
|
|
436 | (1) |
|
Performing action queries via SQL statements |
|
|
436 | (1) |
|
Make-table queries translated |
|
|
436 | (1) |
|
Append queries translated |
|
|
437 | (1) |
|
Update queries translated |
|
|
437 | (1) |
|
Delete queries translated |
|
|
437 | (1) |
|
Creating crosstabs with the TRANSFORM statement |
|
|
437 | (1) |
|
Using SQL-Specific Queries |
|
|
438 | (7) |
|
Merging data sets with the UNION operator |
|
|
438 | (2) |
|
Creating a table with the CREATE TABLE statement |
|
|
440 | (1) |
|
Manipulating columns with the ALTER TABLE statement |
|
|
440 | (2) |
|
Adding a column with the ADD clause |
|
|
441 | (1) |
|
Altering a column with the ALTER COLUMN clause |
|
|
441 | (1) |
|
Deleting a column with the DROP COLUMN clause |
|
|
441 | (1) |
|
Dynamically adding primary keys with the ADD CONSTRAINT clause |
|
|
442 | (1) |
|
Creating pass-through queries |
|
|
442 | (3) |
|
Chapter 15 Subqueries and Domain Aggregate Functions |
|
|
445 | (24) |
|
Enhancing Your Analyses with Subqueries |
|
|
446 | (13) |
|
|
447 | (1) |
|
|
447 | (1) |
|
Creating subqueries without typing SQL statements |
|
|
447 | (4) |
|
Using IN and NOT IN with subqueries |
|
|
451 | (1) |
|
Using subqueries with comparison operators |
|
|
451 | (1) |
|
Using subqueries as expressions |
|
|
452 | (1) |
|
Using correlated subqueries |
|
|
453 | (3) |
|
|
453 | (1) |
|
|
454 | (1) |
|
Using a correlated subquery as an expression |
|
|
455 | (1) |
|
Using subqueries within action queries |
|
|
456 | (3) |
|
A subquery in a make-table query |
|
|
456 | (1) |
|
A subquery in an append query |
|
|
456 | (1) |
|
A subquery in an update query |
|
|
456 | (1) |
|
A subquery in a delete query |
|
|
456 | (3) |
|
Domain Aggregate Functions |
|
|
459 | (10) |
|
Understanding the different domain aggregate functions |
|
|
460 | (1) |
|
|
460 | (1) |
|
|
460 | (1) |
|
|
460 | (1) |
|
|
461 | (1) |
|
|
461 | (1) |
|
|
461 | (1) |
|
DStDev, DStDevP, DVar, and DvarP |
|
|
461 | (1) |
|
Examining the syntax of domain aggregate functions |
|
|
461 | (2) |
|
|
461 | (1) |
|
|
462 | (1) |
|
|
462 | (1) |
|
|
463 | (1) |
|
Using domain aggregate functions |
|
|
463 | (7) |
|
Calculating the percent of total |
|
|
463 | (2) |
|
|
465 | (1) |
|
Using a value from the previous record |
|
|
466 | (3) |
|
Chapter 16 Running Descriptive Statistics in Access |
|
|
469 | (18) |
|
Basic Descriptive Statistics |
|
|
470 | (9) |
|
Running descriptive statistics with aggregate queries |
|
|
470 | (1) |
|
Determining rank, mode, and median |
|
|
471 | (6) |
|
Ranking the records in your data set |
|
|
471 | (1) |
|
Getting the mode of a data set |
|
|
472 | (3) |
|
Getting the median of a data set |
|
|
475 | (2) |
|
Pulling a random sampling from your data set |
|
|
477 | (2) |
|
Advanced Descriptive Statistics |
|
|
479 | (10) |
|
Calculating percentile ranking |
|
|
479 | (2) |
|
Determining the quartile standing of a record |
|
|
481 | (2) |
|
Creating a frequency distribution |
|
|
483 | (4) |
Part V: Working with Access Forms and Reports |
|
487 | (216) |
|
Chapter 17 Creating Basic Access Forms |
|
|
489 | (42) |
|
|
489 | (1) |
|
Understanding Different Types of Forms |
|
|
490 | (13) |
|
|
491 | (5) |
|
|
492 | (1) |
|
|
492 | (4) |
|
Looking at special types of forms |
|
|
496 | (6) |
|
|
496 | (2) |
|
|
498 | (2) |
|
|
500 | (1) |
|
|
501 | (1) |
|
|
502 | (1) |
|
|
502 | (1) |
|
|
503 | (21) |
|
|
504 | (2) |
|
|
506 | (5) |
|
|
507 | (1) |
|
|
508 | (3) |
|
Selecting and deselecting controls |
|
|
511 | (2) |
|
Selecting a single control |
|
|
512 | (1) |
|
Selecting multiple controls |
|
|
513 | (1) |
|
|
513 | (1) |
|
|
513 | (11) |
|
|
513 | (2) |
|
Sizing controls automatically |
|
|
515 | (1) |
|
|
515 | (2) |
|
|
517 | (2) |
|
Modifying the appearance of a control |
|
|
519 | (1) |
|
|
519 | (1) |
|
Changing a control's type |
|
|
520 | (2) |
|
|
522 | (1) |
|
|
522 | (1) |
|
Reattaching a label to a control |
|
|
522 | (2) |
|
|
524 | (7) |
|
Displaying the Property Sheet |
|
|
524 | (1) |
|
Getting acquainted with the Property Sheet |
|
|
525 | (1) |
|
Changing a control's property setting |
|
|
526 | (1) |
|
Naming control labels and their captions |
|
|
527 | (4) |
|
Chapter 18 Working with Data on Access Forms |
|
|
531 | (32) |
|
|
532 | (5) |
|
Looking at the Home tab of the Ribbon |
|
|
532 | (4) |
|
|
534 | (1) |
|
|
534 | (1) |
|
|
535 | (1) |
|
|
535 | (1) |
|
|
535 | (1) |
|
|
535 | (1) |
|
The Text Formatting group |
|
|
536 | (1) |
|
|
536 | (1) |
|
Moving among records in a form |
|
|
537 | (1) |
|
Changing Values in a Form |
|
|
537 | (7) |
|
Knowing which controls you can't edit |
|
|
538 | (1) |
|
Working with pictures and OLE objects |
|
|
538 | (2) |
|
Entering data in the Long Text field |
|
|
540 | (1) |
|
Entering data in the Date field |
|
|
540 | (2) |
|
|
542 | (1) |
|
Using combo boxes and list boxes |
|
|
542 | (1) |
|
Switching to Datasheet view |
|
|
543 | (1) |
|
|
544 | (1) |
|
|
544 | (1) |
|
Working with Form Properties |
|
|
545 | (11) |
|
Changing the title bar text with the Caption property |
|
|
546 | (1) |
|
|
547 | (1) |
|
Specifying how to view the form |
|
|
548 | (1) |
|
Removing the Record Selector |
|
|
549 | (1) |
|
Looking at other form properties |
|
|
549 | (7) |
|
Adding a Form Header or Footer |
|
|
556 | (1) |
|
Working with Section Properties |
|
|
556 | (2) |
|
|
557 | (1) |
|
|
557 | (1) |
|
|
557 | (1) |
|
The Special Effect property |
|
|
557 | (1) |
|
The Display When property |
|
|
558 | (1) |
|
|
558 | (1) |
|
|
558 | (4) |
|
Changing a control's properties |
|
|
558 | (1) |
|
|
559 | (1) |
|
Modifying the format of text in a control |
|
|
560 | (1) |
|
Using the Field List to add controls |
|
|
561 | (1) |
|
Converting a Form to a Report |
|
|
562 | (1) |
|
Chapter 19 Working with Form Controls |
|
|
563 | (36) |
|
Setting Control Properties |
|
|
563 | (8) |
|
Customizing default properties |
|
|
565 | (1) |
|
Looking at common controls and properties |
|
|
566 | (7) |
|
|
566 | (2) |
|
The Command Button control |
|
|
568 | (1) |
|
The Combo Box and List Box controls |
|
|
568 | (2) |
|
The Check Box and Toggle Button controls |
|
|
570 | (1) |
|
|
570 | (1) |
|
|
570 | (1) |
|
Creating a Calculated Control |
|
|
571 | (1) |
|
|
572 | (1) |
|
|
573 | (3) |
|
Using the Tab Stop property |
|
|
573 | (1) |
|
|
573 | (1) |
|
Setting up combo boxes and list boxes |
|
|
574 | (2) |
|
Tackling Advanced Forms Techniques |
|
|
576 | (7) |
|
Using the Page Number and Date/Time controls |
|
|
576 | (1) |
|
|
577 | (1) |
|
|
578 | (1) |
|
|
579 | (1) |
|
Offering more end-user help |
|
|
580 | (1) |
|
Adding background pictures |
|
|
580 | (2) |
|
Limiting the records shown on a form |
|
|
582 | (1) |
|
|
583 | (3) |
|
Using Dialog Boxes to Collect Information |
|
|
586 | (3) |
|
|
587 | (1) |
|
Setting up the command buttons |
|
|
587 | (1) |
|
|
588 | (1) |
|
|
589 | (1) |
|
Removing the control menu |
|
|
589 | (1) |
|
Designing a Form from Scratch |
|
|
589 | (10) |
|
|
589 | (1) |
|
|
590 | (1) |
|
|
591 | (2) |
|
Changing the form's behavior |
|
|
593 | (3) |
|
Setting the form properties |
|
|
593 | (1) |
|
Looking up values during data entry |
|
|
594 | (1) |
|
|
595 | (1) |
|
Changing the form's appearance |
|
|
596 | (3) |
|
Chapter 20 Presenting Data with Access Reports |
|
|
599 | (58) |
|
|
599 | (5) |
|
Identifying the different types of reports |
|
|
600 | (3) |
|
|
600 | (1) |
|
|
601 | (1) |
|
|
602 | (1) |
|
Distinguishing between reports and forms |
|
|
603 | (1) |
|
Creating a Report, from Beginning to End |
|
|
604 | (18) |
|
Defining the report layout |
|
|
604 | (1) |
|
|
604 | (1) |
|
Creating a report with the Report Wizard |
|
|
605 | (15) |
|
|
605 | (1) |
|
Selecting the grouping levels |
|
|
606 | (1) |
|
|
607 | (1) |
|
|
608 | (1) |
|
Selecting summary options |
|
|
608 | (1) |
|
|
609 | (1) |
|
Opening the report design |
|
|
610 | (1) |
|
Adjusting the report's layout |
|
|
611 | (1) |
|
|
612 | (2) |
|
Creating new theme color schemes |
|
|
614 | (3) |
|
Using the Print Preview window |
|
|
617 | (1) |
|
Publishing in alternate formats |
|
|
618 | (1) |
|
Viewing the report in Design view |
|
|
619 | (1) |
|
Printing or viewing the report |
|
|
620 | (2) |
|
|
620 | (1) |
|
|
621 | (1) |
|
|
622 | (1) |
|
Banded Report Design Concepts |
|
|
622 | (6) |
|
The Report Header section |
|
|
625 | (1) |
|
|
625 | (1) |
|
|
626 | (1) |
|
|
626 | (1) |
|
|
627 | (1) |
|
|
627 | (1) |
|
The Report Footer section |
|
|
627 | (1) |
|
Creating a Report from Scratch |
|
|
628 | (23) |
|
Creating a new report and binding it to a table |
|
|
629 | (2) |
|
Defining the report page size and layout |
|
|
631 | (2) |
|
Placing controls on the report |
|
|
633 | (1) |
|
|
634 | (2) |
|
Modifying the appearance of text in a control |
|
|
635 | (1) |
|
Working with Text Box controls |
|
|
636 | (7) |
|
Adding and using Text Box controls |
|
|
636 | (1) |
|
Entering an expression in a Text Box control |
|
|
636 | (1) |
|
Sizing a Text Box control or Label control |
|
|
637 | (1) |
|
Deleting and cutting attached labels from Text Box controls |
|
|
638 | (2) |
|
Pasting labels into a report section |
|
|
640 | (1) |
|
Moving Label and Text Box controls |
|
|
640 | (2) |
|
Modifying the appearance of multiple controls |
|
|
642 | (1) |
|
Changing Label and Text Box control properties |
|
|
643 | (1) |
|
Growing and shrinking Text Box controls |
|
|
644 | (1) |
|
Sorting and grouping data |
|
|
645 | (2) |
|
Creating a group header or footer |
|
|
645 | (2) |
|
Sorting data within groups |
|
|
647 | (3) |
|
|
648 | (1) |
|
|
648 | (1) |
|
|
648 | (1) |
|
Moving controls between sections |
|
|
649 | (1) |
|
|
650 | (1) |
|
Improving the Report's Appearance |
|
|
651 | (6) |
|
Adjusting the page header |
|
|
652 | (1) |
|
Creating an expression in the group header |
|
|
653 | (1) |
|
|
654 | (3) |
|
Chapter 21 Advanced Access Report Techniques |
|
|
657 | (46) |
|
Grouping and Sorting Data |
|
|
658 | (12) |
|
|
658 | (4) |
|
Grouping on date intervals |
|
|
662 | (3) |
|
Hiding repeating information |
|
|
665 | (3) |
|
|
668 | (2) |
|
Starting a new page number for each group |
|
|
670 | (1) |
|
|
670 | (18) |
|
|
671 | (3) |
|
|
674 | (3) |
|
Adding emphasis at run time |
|
|
677 | (2) |
|
|
679 | (1) |
|
Inserting vertical lines between columns |
|
|
680 | (2) |
|
Adding a blank line every n records |
|
|
682 | (2) |
|
|
684 | (2) |
|
Using different formats in the same text box |
|
|
686 | (1) |
|
|
687 | (1) |
|
|
687 | (1) |
|
|
687 | (1) |
|
|
688 | (2) |
|
Adding more information to a report |
|
|
688 | (1) |
|
Adding the user's name to a bound report |
|
|
688 | (2) |
|
Adding Even More Flexibility |
|
|
690 | (15) |
|
Displaying all reports in a combo box |
|
|
690 | (2) |
|
Fast printing from queried data |
|
|
692 | (1) |
|
Using snaking columns in a report |
|
|
692 | (7) |
|
Exploiting two-pass report processing |
|
|
699 | (2) |
|
Assigning unique names to controls |
|
|
701 | (2) |
Part VI: Microsoft Access Programming Fundamentals |
|
703 | (196) |
|
Chapter 22 Using Access Macros |
|
|
705 | (36) |
|
An Introduction to Macros |
|
|
705 | (4) |
|
|
706 | (2) |
|
Assigning a macro to an event |
|
|
708 | (1) |
|
Understanding Macro Security |
|
|
709 | (4) |
|
|
710 | (2) |
|
|
712 | (1) |
|
|
713 | (3) |
|
|
716 | (4) |
|
|
720 | (3) |
|
Opening reports using conditions |
|
|
720 | (3) |
|
Multiple actions in conditions |
|
|
723 | (1) |
|
|
723 | (5) |
|
Enhancing a macro you've already created |
|
|
723 | (2) |
|
Using temporary variables to simplify macros |
|
|
725 | (2) |
|
Using temporary variables in VBA |
|
|
727 | (1) |
|
Error Handling and Macro Debugging |
|
|
728 | (6) |
|
|
730 | (2) |
|
|
732 | (1) |
|
|
733 | (1) |
|
|
734 | (2) |
|
Macros versus VBA Statements |
|
|
736 | (5) |
|
Choosing between macros and VBA |
|
|
737 | (1) |
|
Converting existing macros to VBA |
|
|
737 | (4) |
|
Chapter 23 Using Access Data Macros |
|
|
741 | (18) |
|
|
742 | (1) |
|
Understanding Table Events |
|
|
742 | (3) |
|
|
743 | (1) |
|
|
744 | (1) |
|
Using the Macro Builder for Data Macros |
|
|
745 | (2) |
|
Understanding the Action Catalog |
|
|
747 | (4) |
|
|
748 | (1) |
|
|
748 | (1) |
|
|
749 | (2) |
|
Creating Your First Data Macro |
|
|
751 | (4) |
|
|
755 | (2) |
|
Collapsing and expanding macro items |
|
|
755 | (1) |
|
|
756 | (1) |
|
|
756 | (1) |
|
Recognizing the Limitations of Data Macros |
|
|
757 | (2) |
|
Chapter 24 Getting Started with Access VBA |
|
|
759 | (42) |
|
Introducing Visual Basic for Applications |
|
|
760 | (1) |
|
Understanding VBA Terminology |
|
|
761 | (1) |
|
Starting with VBA Code Basics |
|
|
762 | (1) |
|
|
763 | (14) |
|
|
763 | (7) |
|
|
764 | (3) |
|
|
767 | (3) |
|
Working in the code window |
|
|
770 | (7) |
|
|
770 | (1) |
|
|
771 | (1) |
|
|
772 | (1) |
|
|
773 | (3) |
|
|
776 | (1) |
|
|
777 | (1) |
|
Understanding VBA Branching Constructs |
|
|
777 | (9) |
|
|
777 | (6) |
|
|
778 | (3) |
|
The Select Case...End Select statement |
|
|
781 | (2) |
|
|
783 | (3) |
|
|
783 | (1) |
|
|
784 | (2) |
|
Working with Objects and Collections |
|
|
786 | (6) |
|
|
786 | (2) |
|
|
788 | (1) |
|
|
788 | (1) |
|
|
788 | (1) |
|
|
789 | (1) |
|
|
790 | (2) |
|
Exploring the Visual Basic Editor |
|
|
792 | (9) |
|
|
792 | (1) |
|
|
793 | (1) |
|
|
794 | (1) |
|
|
794 | (8) |
|
The Editor tab of the Options dialog box |
|
|
795 | (2) |
|
The Project Properties dialog box |
|
|
797 | (4) |
|
Chapter 25 Mastering VBA Data Types and Procedures |
|
|
801 | (42) |
|
|
802 | (7) |
|
|
803 | (1) |
|
|
804 | (5) |
|
|
807 | (1) |
|
|
807 | (1) |
|
|
808 | (1) |
|
|
809 | (20) |
|
Comparing implicit and explicit variables |
|
|
811 | (2) |
|
Forcing explicit declaration |
|
|
813 | (1) |
|
Using a naming convention with variables |
|
|
813 | (3) |
|
Understanding variable scope and lifetime |
|
|
816 | (3) |
|
|
816 | (1) |
|
Determining a variable's lifetime |
|
|
817 | (2) |
|
Deciding on a variable's scope |
|
|
819 | (1) |
|
|
819 | (3) |
|
|
820 | (1) |
|
Using a naming convention with constants |
|
|
821 | (1) |
|
Eliminating hard-coded values |
|
|
821 | (1) |
|
|
822 | (7) |
|
|
822 | (3) |
|
|
825 | (1) |
|
|
826 | (3) |
|
Understanding Subs and Functions |
|
|
829 | (6) |
|
Understanding where to create a procedure |
|
|
830 | (1) |
|
|
830 | (1) |
|
|
831 | (4) |
|
|
835 | (5) |
|
|
836 | (1) |
|
Calling a function and passing parameters |
|
|
836 | (2) |
|
Creating a function to calculate sales tax |
|
|
838 | (2) |
|
Simplifying Code with Named Arguments |
|
|
840 | (3) |
|
Chapter 26 Understanding the Access Event Model |
|
|
843 | (22) |
|
|
844 | (3) |
|
Understanding how events trigger VBA code |
|
|
844 | (1) |
|
Creating event procedures |
|
|
845 | (2) |
|
Identifying Common Events |
|
|
847 | (9) |
|
|
848 | (3) |
|
|
848 | (1) |
|
Form mouse and keyboard events |
|
|
849 | (1) |
|
|
850 | (1) |
|
|
851 | (2) |
|
|
853 | (1) |
|
Report section event procedures |
|
|
854 | (2) |
|
Paying Attention to Event Sequence |
|
|
856 | (9) |
|
Looking at common event sequences |
|
|
857 | (1) |
|
Writing simple form and control event procedures |
|
|
858 | (9) |
|
Opening a form with an event procedure |
|
|
859 | (3) |
|
Running an event procedure when closing a form |
|
|
862 | (1) |
|
Using an event procedure to confirm record deletion |
|
|
862 | (3) |
|
Chapter 27 Debugging Your Access Applications |
|
|
865 | (34) |
|
|
866 | (1) |
|
Testing Your Applications |
|
|
867 | (6) |
|
|
868 | (3) |
|
|
871 | (2) |
|
Traditional Debugging Techniques |
|
|
873 | (6) |
|
|
874 | (4) |
|
|
878 | (1) |
|
Using the Access Debugging Tools |
|
|
879 | (14) |
|
Running code with the Immediate window |
|
|
880 | (1) |
|
Suspending execution with breakpoints |
|
|
881 | (6) |
|
Looking at variables with the Locals window |
|
|
887 | (2) |
|
Setting watches with the Watches window |
|
|
889 | (2) |
|
Using conditional watches |
|
|
891 | (1) |
|
Using the Call Stack window |
|
|
892 | (1) |
|
Trapping Errors in Your Code |
|
|
893 | (8) |
|
Understanding error trapping |
|
|
893 | (3) |
|
|
893 | (2) |
|
|
895 | (1) |
|
|
895 | (1) |
|
|
895 | (1) |
|
|
896 | (1) |
|
Including error handling in your procedures |
|
|
897 | (2) |
Part VII: Advanced Access Programming Techniques |
|
899 | (156) |
|
Chapter 28 Accessing Data with VBA |
|
|
901 | (36) |
|
|
901 | (3) |
|
Understanding DAO Objects |
|
|
904 | (13) |
|
|
906 | (1) |
|
|
906 | (1) |
|
|
907 | (1) |
|
|
908 | (1) |
|
|
909 | (2) |
|
|
911 | (5) |
|
|
912 | (2) |
|
Detecting the recordset end or beginning |
|
|
914 | (1) |
|
|
915 | (1) |
|
The DAO Field objects (recordsets) |
|
|
916 | (1) |
|
Understanding ADO Objects |
|
|
917 | (6) |
|
The ADO Connection object |
|
|
918 | (2) |
|
|
920 | (2) |
|
|
922 | (1) |
|
Writing VBA Code to Update a Table |
|
|
923 | (14) |
|
Updating fields in a record using ADO |
|
|
924 | (2) |
|
Updating a calculated control |
|
|
926 | (6) |
|
Recalculating a control when updating or adding a record |
|
|
927 | (2) |
|
Checking the status of a record deletion |
|
|
929 | (2) |
|
Eliminating repetitive code |
|
|
931 | (1) |
|
|
932 | (1) |
|
|
933 | (1) |
|
Deleting related records in multiple tables |
|
|
933 | (4) |
|
Chapter 29 Advanced Data Access with VBA |
|
|
937 | (18) |
|
Adding an Unbound Combo Box to a Form to Find Data |
|
|
937 | (8) |
|
Using the FindRecord method |
|
|
939 | (2) |
|
|
941 | (4) |
|
|
945 | (10) |
|
|
945 | (2) |
|
|
947 | (8) |
|
Creating a parameter query |
|
|
947 | (3) |
|
Creating an interactive filter dialog box |
|
|
950 | (2) |
|
Linking the dialog box to another form |
|
|
952 | (3) |
|
Chapter 30 Customizing the Ribbon |
|
|
955 | (38) |
|
|
955 | (6) |
|
Controls for Access Ribbons |
|
|
956 | (4) |
|
|
957 | (1) |
|
|
957 | (1) |
|
|
958 | (1) |
|
|
958 | (1) |
|
|
959 | (1) |
|
|
960 | (1) |
|
|
960 | (1) |
|
|
960 | (6) |
|
|
960 | (1) |
|
|
961 | (1) |
|
Editing the Default Ribbon |
|
|
961 | (3) |
|
Working with the Quick Access Toolbar |
|
|
964 | (2) |
|
Developing Custom Ribbons |
|
|
966 | (3) |
|
The Ribbon creation process |
|
|
967 | (1) |
|
|
967 | (2) |
|
|
969 | (8) |
|
Step 1: Design the Ribbon and build the XML |
|
|
969 | (3) |
|
Step 2: Write the callback routines |
|
|
972 | (1) |
|
Step 3: Create the USysRibbons table |
|
|
973 | (1) |
|
Step 4: Add XML to USysRibbons |
|
|
974 | (1) |
|
Step 5: Specify the custom Ribbon property |
|
|
975 | (2) |
|
|
977 | (2) |
|
|
979 | (10) |
|
|
979 | (1) |
|
|
980 | (2) |
|
|
982 | (1) |
|
|
983 | (1) |
|
|
983 | (2) |
|
|
985 | (2) |
|
|
987 | (2) |
|
Attaching Ribbons to Forms and Reports |
|
|
989 | (1) |
|
Removing the Ribbon Completely |
|
|
990 | (3) |
|
Chapter 31 Preparing Your Access Application for Distribution |
|
|
993 | (46) |
|
Defining the Current Database Options |
|
|
994 | (9) |
|
|
994 | (5) |
|
|
994 | (1) |
|
|
995 | (1) |
|
|
996 | (1) |
|
|
996 | (1) |
|
|
996 | (1) |
|
|
996 | (2) |
|
|
998 | (1) |
|
Remove Personal Information from File Properties on Save |
|
|
998 | (1) |
|
Use Windows-Themed Controls on Forms |
|
|
998 | (1) |
|
|
998 | (1) |
|
Enable Design Changes for Tables in Datasheet View |
|
|
999 | (1) |
|
Check for Truncated Number Fields |
|
|
999 | (1) |
|
Picture Property Storage Format |
|
|
999 | (1) |
|
|
999 | (2) |
|
The Display Navigation Pane check box |
|
|
1000 | (1) |
|
The Navigation Options button |
|
|
1000 | (1) |
|
Ribbon and toolbar options |
|
|
1001 | (1) |
|
|
1002 | (1) |
|
|
1002 | (1) |
|
|
1002 | (1) |
|
Allow Default Shortcut Menus |
|
|
1002 | (1) |
|
|
1002 | (1) |
|
Developing the Application |
|
|
1003 | (6) |
|
Building to a specification |
|
|
1003 | (2) |
|
|
1005 | (2) |
|
Documenting the code you write |
|
|
1005 | (1) |
|
Documenting the application |
|
|
1006 | (1) |
|
Testing the application before distribution |
|
|
1007 | (2) |
|
Polishing Your Application |
|
|
1009 | (13) |
|
Giving your application a consistent look and feel |
|
|
1009 | (1) |
|
Adding common professional components |
|
|
1010 | (11) |
|
|
1010 | (1) |
|
An application switchboard |
|
|
1011 | (1) |
|
|
1012 | (2) |
|
|
1014 | (2) |
|
|
1016 | (5) |
|
Making the application easy to start |
|
|
1021 | (1) |
|
Bulletproofing an Application |
|
|
1022 | (12) |
|
Using error trapping on all Visual Basic procedures |
|
|
1023 | (4) |
|
|
1023 | (4) |
|
Separating tables from the rest of the application |
|
|
1027 | (1) |
|
Building bulletproof forms |
|
|
1027 | (1) |
|
|
1028 | (1) |
|
|
1028 | (1) |
|
Encrypting or encoding a database |
|
|
1029 | (3) |
|
Removing a database password |
|
|
1031 | (1) |
|
Protecting Visual Basic code |
|
|
1032 | (2) |
|
|
1034 | (5) |
|
Setting startup options in code |
|
|
1035 | (1) |
|
|
1036 | (1) |
|
|
1037 | (1) |
|
|
1038 | (1) |
|
Chapter 32 Integrating Access with SharePoint |
|
|
1039 | (16) |
|
|
1039 | (1) |
|
Understanding SharePoint Sites |
|
|
1040 | (3) |
|
|
1040 | (1) |
|
|
1041 | (2) |
|
Sharing Data between Access and SharePoint |
|
|
1043 | (9) |
|
Linking to SharePoint lists |
|
|
1043 | (3) |
|
Importing SharePoint lists |
|
|
1046 | (1) |
|
Exporting Access tables to SharePoint |
|
|
1047 | (2) |
|
Moving Access tables to SharePoint |
|
|
1049 | (3) |
|
Using SharePoint Templates |
|
|
1052 | (3) |
Index |
|
1055 | |