Introduction |
|
xxxix | |
Part I: Access Building Blocks |
|
1 | (30) |
|
Chapter 1 An Introduction to Database Development |
|
|
3 | (16) |
|
The Database Terminology of Access |
|
|
3 | (3) |
|
|
3 | (2) |
|
|
5 | (1) |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
7 | (3) |
|
|
8 | (1) |
|
|
8 | (1) |
|
Data-entry and display forms |
|
|
8 | (1) |
|
|
9 | (1) |
|
|
9 | (1) |
|
Planning for Database Objects |
|
|
10 | (1) |
|
A Five-Step Design Method |
|
|
10 | (9) |
|
Step 1: The overall designfrom concept to reality |
|
|
10 | (1) |
|
|
11 | (1) |
|
|
12 | (1) |
|
|
13 | (4) |
|
|
17 | (2) |
|
Chapter 2 Getting Started with Access |
|
|
19 | (12) |
|
The Access Welcome Screen |
|
|
19 | (2) |
|
How to Create a Blank Desktop Database |
|
|
21 | (2) |
|
The Access 2016 Interface |
|
|
23 | (10) |
|
|
23 | (3) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
25 | (1) |
|
|
25 | (1) |
|
|
25 | (1) |
|
|
26 | (2) |
|
|
28 | (3) |
Part II: Understanding Access Tables |
|
31 | (204) |
|
Chapter 3 Creating Access Tables |
|
|
33 | (56) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
34 | (17) |
|
|
36 | (5) |
|
|
41 | (1) |
|
|
41 | (1) |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
42 | (9) |
|
|
43 | (1) |
|
|
44 | (6) |
|
Entering a field description |
|
|
50 | (1) |
|
Specifying data validation rules |
|
|
50 | (1) |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
52 | (18) |
|
|
52 | (1) |
|
|
52 | (1) |
|
Changing a field location |
|
|
53 | (1) |
|
|
53 | (1) |
|
|
53 | (1) |
|
Handling data conversion issues |
|
|
54 | (1) |
|
Assigning field properties |
|
|
55 | (18) |
|
|
55 | (1) |
|
|
56 | (6) |
|
|
62 | (3) |
|
|
65 | (1) |
|
Validation Rule and Validation Text |
|
|
65 | (2) |
|
|
67 | (1) |
|
|
67 | (1) |
|
|
68 | (2) |
|
Understanding tblCustomers Field Properties |
|
|
70 | (3) |
|
|
73 | (2) |
|
|
73 | (1) |
|
|
74 | (1) |
|
Creating composite primary keys |
|
|
74 | (1) |
|
|
75 | (6) |
|
The importance of indexes |
|
|
76 | (2) |
|
|
78 | (2) |
|
|
80 | (1) |
|
|
81 | (2) |
|
Saving the Completed Table |
|
|
83 | (1) |
|
|
83 | (2) |
|
|
83 | (1) |
|
|
84 | (1) |
|
Copying tables in a database |
|
|
84 | (1) |
|
Copying a table to another database |
|
|
85 | (1) |
|
Adding Records to a Database Table |
|
|
85 | (1) |
|
Understanding Attachment Fields |
|
|
86 | (3) |
|
Chapter 4 Understanding Table Relationships |
|
|
89 | (42) |
|
Building Bulletproof Databases |
|
|
90 | (2) |
|
Data Normalization and Denormalization |
|
|
92 | (12) |
|
|
93 | (3) |
|
|
96 | (5) |
|
|
96 | (3) |
|
|
99 | (2) |
|
|
101 | (1) |
|
|
101 | (2) |
|
|
103 | (1) |
|
|
104 | (9) |
|
|
105 | (3) |
|
|
108 | (1) |
|
|
109 | (2) |
|
|
111 | (2) |
|
|
113 | (3) |
|
No primary key can contain a null value |
|
|
115 | (1) |
|
All foreign key values must be matched by corresponding primary keys |
|
|
115 | (1) |
|
|
116 | (15) |
|
Deciding on a primary key |
|
|
117 | (2) |
|
Looking at the benefits of a primary key |
|
|
119 | (1) |
|
Designating a primary key |
|
|
120 | (2) |
|
Single-field versus composite primary keys |
|
|
120 | (1) |
|
Natural versus surrogate primary keys |
|
|
121 | (1) |
|
|
122 | (1) |
|
Creating relationships and enforcing referential integrity |
|
|
122 | (6) |
|
Specifying the join type between tables |
|
|
124 | (2) |
|
Enforcing referential integrity |
|
|
126 | (2) |
|
Viewing all relationships |
|
|
128 | (1) |
|
|
129 | (1) |
|
Following application-specific integrity rules |
|
|
129 | (2) |
|
Chapter 5 Working with Access Tables |
|
|
131 | (40) |
|
|
132 | (2) |
|
Looking at the Datasheet Window |
|
|
134 | (4) |
|
Moving within a datasheet |
|
|
134 | (1) |
|
Using the Navigation buttons |
|
|
135 | (1) |
|
Examining the Datasheet Ribbon |
|
|
135 | (3) |
|
|
136 | (1) |
|
|
136 | (1) |
|
|
136 | (1) |
|
|
137 | (1) |
|
|
137 | (1) |
|
|
137 | (1) |
|
|
137 | (1) |
|
|
138 | (1) |
|
|
138 | (7) |
|
|
140 | (1) |
|
Understanding automatic data-type validation |
|
|
141 | (1) |
|
Knowing how properties affect data entry |
|
|
142 | (3) |
|
|
142 | (1) |
|
|
143 | (1) |
|
Number/Currency data entry with data validation |
|
|
143 | (1) |
|
|
143 | (1) |
|
Long Text field data entry |
|
|
144 | (1) |
|
Navigating Records in a Datasheet |
|
|
145 | (3) |
|
|
145 | (1) |
|
|
146 | (2) |
|
Changing Values in a Datasheet |
|
|
148 | (2) |
|
Manually replacing an existing value |
|
|
148 | (1) |
|
Changing an existing value |
|
|
149 | (1) |
|
|
150 | (1) |
|
Copying and Pasting Values |
|
|
151 | (1) |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
153 | (1) |
|
|
154 | (9) |
|
|
154 | (2) |
|
Changing the field display width |
|
|
156 | (1) |
|
Changing the record display height |
|
|
157 | (1) |
|
|
158 | (1) |
|
Displaying cell gridlines and alternate row colors |
|
|
159 | (2) |
|
|
161 | (1) |
|
Hiding and unhiding columns |
|
|
161 | (1) |
|
|
162 | (1) |
|
Saving the changed layout |
|
|
162 | (1) |
|
|
163 | (1) |
|
Sorting and Filtering Records in a Datasheet |
|
|
163 | (5) |
|
Sorting your records with QuickSort |
|
|
163 | (1) |
|
|
164 | (3) |
|
|
167 | (1) |
|
|
168 | (1) |
|
|
169 | (1) |
|
|
170 | (1) |
|
Chapter 6 Importing and Exporting Data |
|
|
171 | (38) |
|
How Access Works with External Data |
|
|
171 | (4) |
|
|
172 | (1) |
|
Ways of working with external data |
|
|
172 | (5) |
|
When to link to external data |
|
|
173 | (1) |
|
When to import external data |
|
|
174 | (1) |
|
When to export internal data |
|
|
175 | (1) |
|
Options for Importing and Exporting |
|
|
175 | (2) |
|
|
177 | (23) |
|
Importing from another Access database |
|
|
177 | (3) |
|
Importing from an Excel spreadsheet |
|
|
180 | (4) |
|
Importing a SharePoint list |
|
|
184 | (1) |
|
Importing data from text files |
|
|
185 | (7) |
|
|
185 | (3) |
|
|
188 | (4) |
|
Importing and exporting XML documents |
|
|
192 | (3) |
|
Importing and exporting HTML documents |
|
|
195 | (2) |
|
Importing Access objects other than tables |
|
|
197 | (2) |
|
Importing an Outlook folder |
|
|
199 | (1) |
|
Exporting to External Formats |
|
|
200 | (9) |
|
Exporting objects to other Access databases |
|
|
201 | (1) |
|
Exporting through ODBC drivers |
|
|
201 | (3) |
|
|
204 | (2) |
|
|
204 | (2) |
|
|
206 | (3) |
|
Chapter 7 Linking to External Data |
|
|
209 | (26) |
|
|
210 | (14) |
|
Identifying linked tables |
|
|
211 | (2) |
|
Limitations of linked data |
|
|
213 | (1) |
|
Linking to other Access database tables |
|
|
214 | (3) |
|
Linking to ODBC data sources |
|
|
217 | (1) |
|
Linking to non-database data |
|
|
217 | (7) |
|
|
217 | (3) |
|
|
220 | (2) |
|
|
222 | (2) |
|
Working with Linked Tables |
|
|
224 | (4) |
|
|
224 | (1) |
|
|
225 | (1) |
|
|
225 | (1) |
|
Deleting a linked table reference |
|
|
226 | (1) |
|
Viewing or changing information for linked tables |
|
|
226 | (1) |
|
|
227 | (1) |
|
|
228 | (9) |
|
The benefits of splitting a database |
|
|
228 | (3) |
|
Knowing where to put which objects |
|
|
231 | (1) |
|
Using the Database Splitter add-in |
|
|
232 | (3) |
Part III: Working with Access Queries |
|
235 | (114) |
|
Chapter 8 Selecting Data with Queries |
|
|
237 | (30) |
|
|
238 | (2) |
|
|
238 | (1) |
|
|
239 | (1) |
|
|
240 | (6) |
|
Adding fields to your queries |
|
|
243 | (2) |
|
|
243 | (1) |
|
|
243 | (2) |
|
|
245 | (1) |
|
Working with Query Fields |
|
|
246 | (4) |
|
Selecting a field in the QBE grid |
|
|
246 | (1) |
|
|
246 | (1) |
|
Resizing columns in the QBE grid |
|
|
247 | (1) |
|
|
248 | (1) |
|
|
248 | (1) |
|
|
248 | (1) |
|
Changing the sort order of a field |
|
|
249 | (1) |
|
Adding Criteria to Your Queries |
|
|
250 | (4) |
|
Understanding selection criteria |
|
|
250 | (1) |
|
Entering simple string criteria |
|
|
251 | (1) |
|
Entering other simple criteria |
|
|
252 | (2) |
|
Printing a Query's Recordset |
|
|
254 | (1) |
|
|
254 | (1) |
|
Creating Multi-Table Queries |
|
|
254 | (5) |
|
|
256 | (1) |
|
|
257 | (1) |
|
Recognizing the limitations of multi-table queries |
|
|
257 | (1) |
|
Overcoming query limitations |
|
|
258 | (1) |
|
Updating a unique index (primary key) |
|
|
258 | (1) |
|
Replacing existing data in a query with a one-to-many relationship |
|
|
258 | (1) |
|
Updating fields in queries |
|
|
259 | (1) |
|
Working with the Table Pane |
|
|
259 | (2) |
|
|
259 | (1) |
|
|
260 | (1) |
|
|
260 | (1) |
|
|
260 | (1) |
|
Creating and Working with Query Joins |
|
|
261 | (6) |
|
|
261 | (2) |
|
Leveraging ad hoc table joins |
|
|
263 | (1) |
|
Specifying the type of join |
|
|
264 | (2) |
|
|
266 | (1) |
|
Chapter 9 Using Operators and Expressions in Access |
|
|
267 | (42) |
|
|
267 | (15) |
|
|
268 | (13) |
|
|
268 | (3) |
|
|
271 | (2) |
|
|
273 | (4) |
|
Boolean (logical) operators |
|
|
277 | (2) |
|
|
279 | (2) |
|
|
281 | (1) |
|
The mathematical precedence |
|
|
281 | (1) |
|
The comparison precedence |
|
|
282 | (1) |
|
|
282 | (1) |
|
Using Operators and Expressions in Queries |
|
|
282 | (6) |
|
Using query comparison operators |
|
|
283 | (1) |
|
Understanding complex criteria |
|
|
284 | (4) |
|
Using functions in select queries |
|
|
288 | (1) |
|
Referencing fields in select queries |
|
|
288 | (1) |
|
Entering Single-Value Field Criteria |
|
|
288 | (8) |
|
Entering character (Text or Memo) criteria |
|
|
289 | (1) |
|
The Like operator and wildcards |
|
|
290 | (3) |
|
Specifying non-matching values |
|
|
293 | (1) |
|
Entering numeric criteria |
|
|
294 | (1) |
|
Entering true or false criteria |
|
|
295 | (1) |
|
Entering OLE object criteria |
|
|
296 | (1) |
|
Using Multiple Criteria in a Query |
|
|
296 | (6) |
|
Understanding an Or operation |
|
|
297 | (1) |
|
Specifying multiple values with the Or operator |
|
|
297 | (1) |
|
Using the Or cell of the QBE pane |
|
|
297 | (2) |
|
Using a list of values with the In operator |
|
|
299 | (1) |
|
Using And to specify a range |
|
|
299 | (2) |
|
Using the Between...And operator |
|
|
301 | (1) |
|
|
301 | (1) |
|
Entering Criteria in Multiple Fields |
|
|
302 | (7) |
|
Using And and Or across fields in a query |
|
|
303 | (1) |
|
Specifying Or criteria across fields of a query |
|
|
304 | (2) |
|
Using And and Or together in different fields |
|
|
306 | (1) |
|
A complex query on different lines |
|
|
306 | (3) |
|
Chapter 10 Going Beyond Select Queries |
|
|
309 | (40) |
|
|
309 | (9) |
|
Creating an aggregate query |
|
|
309 | (4) |
|
About aggregate functions |
|
|
313 | (5) |
|
|
313 | (2) |
|
Sum, Avg, Count, StDev, Var |
|
|
315 | (1) |
|
|
315 | (1) |
|
|
315 | (3) |
|
|
318 | (15) |
|
|
318 | (3) |
|
|
321 | (3) |
|
|
324 | (6) |
|
|
330 | (3) |
|
|
333 | (12) |
|
Creating a crosstab query using the Crosstab Query Wizard |
|
|
333 | (7) |
|
Creating a crosstab query manually |
|
|
340 | (5) |
|
Using the query design grid to create your crosstab query |
|
|
340 | (3) |
|
Customizing your crosstab queries |
|
|
343 | (2) |
|
Optimizing Query Performance |
|
|
345 | (6) |
|
Normalizing your database design |
|
|
346 | (1) |
|
Using indexes on appropriate fields |
|
|
346 | (1) |
|
Optimizing by improving query design |
|
|
347 | (1) |
|
Compacting and repairing your database regularly |
|
|
348 | (1) |
Part IV: Analyzing Data in Access |
|
349 | (134) |
|
Chapter 11 Transforming Data in Access |
|
|
351 | (24) |
|
Finding and Removing Duplicate Records |
|
|
351 | (8) |
|
Defining duplicate records |
|
|
352 | (1) |
|
Finding duplicate records |
|
|
353 | (3) |
|
Removing duplicate records |
|
|
356 | (3) |
|
Common Transformation Tasks |
|
|
359 | (16) |
|
|
359 | (1) |
|
|
360 | (3) |
|
|
360 | (2) |
|
Augmenting field values with your own text |
|
|
362 | (1) |
|
|
363 | (2) |
|
Removing leading and trailing spaces from a string |
|
|
365 | (1) |
|
Finding and replacing specific text |
|
|
366 | (1) |
|
Adding your own text in key positions within a string |
|
|
367 | (3) |
|
Parsing strings using character markers |
|
|
370 | (5) |
|
|
372 | (1) |
|
|
372 | (3) |
|
Chapter 12 Working with Calculations and Dates |
|
|
375 | (26) |
|
Using Calculations in Your Analyses |
|
|
375 | (13) |
|
Common calculation scenarios |
|
|
376 | (4) |
|
Using constants in calculations |
|
|
376 | (1) |
|
Using fields in calculations |
|
|
376 | (1) |
|
Using the results of aggregation in calculations |
|
|
377 | (1) |
|
Using the results of one calculation as an expression in another |
|
|
378 | (1) |
|
Using a calculation as an argument in a function |
|
|
378 | (2) |
|
Constructing calculations with the Expression Builder |
|
|
380 | (4) |
|
Common calculation errors |
|
|
384 | (4) |
|
Understanding the order of operator precedence |
|
|
384 | (1) |
|
Watching out for null values |
|
|
385 | (2) |
|
Watching the syntax in your expressions |
|
|
387 | (1) |
|
Using Dates in Your Analyses |
|
|
388 | (13) |
|
|
388 | (1) |
|
Advanced analysis using functions |
|
|
389 | (12) |
|
|
389 | (4) |
|
The Year, Month, Day, and Weekday functions |
|
|
393 | (2) |
|
|
395 | (1) |
|
Grouping dates into quarters |
|
|
396 | (2) |
|
|
398 | (3) |
|
Chapter 13 Performing Conditional Analyses |
|
|
401 | (20) |
|
|
401 | (9) |
|
How parameter queries work |
|
|
403 | (1) |
|
Ground rules of parameter queries |
|
|
403 | (1) |
|
Working with parameter queries |
|
|
404 | (6) |
|
Working with multiple parameter conditions |
|
|
404 | (1) |
|
Combining parameters with operators |
|
|
404 | (1) |
|
Combining parameters with wildcards |
|
|
405 | (1) |
|
Using parameters as calculation variables |
|
|
406 | (1) |
|
Using parameters as function arguments |
|
|
407 | (3) |
|
Using Conditional Functions |
|
|
410 | (11) |
|
|
410 | (6) |
|
Using IIf to avoid mathematical errors |
|
|
411 | (1) |
|
|
412 | (2) |
|
Nesting IIf functions for multiple conditions |
|
|
414 | (1) |
|
Using IIf functions to create crosstab analyses |
|
|
415 | (1) |
|
|
416 | (1) |
|
Comparing the IIf and Switch functions |
|
|
417 | (4) |
|
Chapter 14 The Fundamentals of Using SQL |
|
|
421 | (20) |
|
|
421 | (5) |
|
|
422 | (2) |
|
Selecting specific columns |
|
|
423 | (1) |
|
|
423 | (1) |
|
|
424 | (1) |
|
|
424 | (2) |
|
|
424 | (1) |
|
|
425 | (1) |
|
Getting Fancy with Advanced SQL Statements |
|
|
426 | (7) |
|
Expanding your search with the Like operator |
|
|
426 | (2) |
|
Selecting unique values and rows without grouping |
|
|
428 | (1) |
|
Grouping and aggregating with the GROUP BY clause |
|
|
428 | (1) |
|
Setting the sort order with the ORDER BY clause |
|
|
429 | (1) |
|
Creating aliases with the AS clause |
|
|
429 | (1) |
|
|
429 | (1) |
|
|
429 | (1) |
|
Showing only the SELECT TOP or SELECT TOP PERCENT |
|
|
429 | (3) |
|
Top values queries explained |
|
|
430 | (1) |
|
|
431 | (1) |
|
The SELECT TOP PERCENT statement |
|
|
432 | (1) |
|
Performing action queries via SQL statements |
|
|
432 | (1) |
|
Make-table queries translated |
|
|
432 | (1) |
|
Append queries translated |
|
|
432 | (1) |
|
Update queries translated |
|
|
433 | (1) |
|
Delete queries translated |
|
|
433 | (1) |
|
Creating crosstabs with the TRANSFORM statement |
|
|
433 | (1) |
|
Using SQL-Specific Queries |
|
|
433 | (8) |
|
Merging datasets with the UNION operator |
|
|
434 | (2) |
|
Creating a table with the CREATE TABLE statement |
|
|
436 | (1) |
|
Manipulating columns with the ALTER TABLE statement |
|
|
436 | (2) |
|
Adding a column with the ADD clause |
|
|
437 | (1) |
|
Altering a column with the ALTER COLUMN clause |
|
|
437 | (1) |
|
Deleting a column with the DROP COLUMN clause |
|
|
437 | (1) |
|
Dynamically adding primary keys with the ADD CONSTRAINT clause |
|
|
437 | (1) |
|
Creating pass-through queries |
|
|
438 | (3) |
|
Chapter 15 Subqueries and Domain Aggregate Functions |
|
|
441 | (26) |
|
Enhancing Your Analyses with Subqueries |
|
|
442 | (13) |
|
|
443 | (1) |
|
|
443 | (1) |
|
Creating subqueries without typing SQL statements |
|
|
444 | (3) |
|
Using IN and NOT IN with subqueries |
|
|
447 | (1) |
|
Using subqueries with comparison operators |
|
|
447 | (1) |
|
Using subqueries as expressions |
|
|
448 | (1) |
|
Using correlated subqueries |
|
|
449 | (3) |
|
|
450 | (1) |
|
|
450 | (1) |
|
Using a correlated subquery as an expression |
|
|
451 | (1) |
|
Using subqueries within action queries |
|
|
452 | (3) |
|
A subquery in a make-table query |
|
|
452 | (1) |
|
A subquery in an append query |
|
|
452 | (1) |
|
A subquery in an update query |
|
|
453 | (1) |
|
A subquery in a delete query |
|
|
453 | (2) |
|
Domain Aggregate Functions |
|
|
455 | (12) |
|
Understanding the different domain aggregate functions |
|
|
457 | (1) |
|
|
457 | (1) |
|
|
457 | (1) |
|
|
457 | (1) |
|
|
457 | (1) |
|
|
457 | (1) |
|
|
457 | (1) |
|
DStDev, DStDevP, DVar, and DvarP |
|
|
458 | (1) |
|
Examining the syntax of domain aggregate functions |
|
|
458 | (2) |
|
|
458 | (1) |
|
|
458 | (1) |
|
|
459 | (1) |
|
|
459 | (1) |
|
Using domain aggregate functions |
|
|
460 | (8) |
|
Calculating the percent of total |
|
|
460 | (1) |
|
|
461 | (2) |
|
Using a value from the previous record |
|
|
463 | (4) |
|
Chapter 16 Running Descriptive Statistics in Access |
|
|
467 | (16) |
|
Basic Descriptive Statistics |
|
|
468 | (8) |
|
Running descriptive statistics with aggregate queries |
|
|
468 | (1) |
|
Determining rank, mode, and median |
|
|
469 | (5) |
|
Ranking the records in your dataset |
|
|
469 | (1) |
|
Getting the mode of a dataset |
|
|
470 | (2) |
|
Getting the median of a dataset |
|
|
472 | (2) |
|
Pulling a random sampling from your dataset |
|
|
474 | (2) |
|
Advanced Descriptive Statistics |
|
|
476 | (9) |
|
Calculating percentile ranking |
|
|
476 | (2) |
|
Determining the quartile standing of a record |
|
|
478 | (2) |
|
Creating a frequency distribution |
|
|
480 | (3) |
Part V: Working with Access Forms and Reports |
|
483 | (212) |
|
Chapter 17 Creating Basic Access Forms |
|
|
485 | (40) |
|
|
486 | (12) |
|
|
487 | (4) |
|
|
487 | (2) |
|
|
489 | (2) |
|
Looking at special types of forms |
|
|
491 | (6) |
|
|
491 | (3) |
|
|
494 | (1) |
|
|
495 | (1) |
|
|
496 | (1) |
|
|
497 | (1) |
|
|
497 | (1) |
|
|
498 | (19) |
|
|
498 | (3) |
|
|
501 | (4) |
|
|
501 | (1) |
|
|
502 | (3) |
|
Selecting and deselecting controls |
|
|
505 | (2) |
|
Selecting a single control |
|
|
506 | (1) |
|
Selecting multiple controls |
|
|
507 | (1) |
|
|
507 | (1) |
|
|
507 | (10) |
|
|
507 | (2) |
|
Sizing controls automatically |
|
|
509 | (1) |
|
|
509 | (1) |
|
|
510 | (2) |
|
Modifying the appearance of a control |
|
|
512 | (1) |
|
|
513 | (2) |
|
Changing a control's type |
|
|
515 | (1) |
|
|
515 | (1) |
|
|
515 | (1) |
|
Reattaching a label to a control |
|
|
516 | (1) |
|
|
517 | (8) |
|
Displaying the Property Sheet |
|
|
518 | (1) |
|
Getting acquainted with the Property Sheet |
|
|
519 | (1) |
|
Changing a control's property setting |
|
|
520 | (1) |
|
Naming control labels and their captions |
|
|
521 | (4) |
|
Chapter 18 Working with Data on Access Forms |
|
|
525 | (32) |
|
|
526 | (5) |
|
Looking at the Home tab of the Ribbon |
|
|
526 | (4) |
|
|
528 | (1) |
|
|
528 | (1) |
|
|
529 | (1) |
|
|
529 | (1) |
|
|
529 | (1) |
|
|
529 | (1) |
|
The Text Formatting group |
|
|
530 | (1) |
|
|
530 | (1) |
|
Moving among records in a form |
|
|
531 | (1) |
|
Changing Values in a Form |
|
|
531 | (7) |
|
Knowing which controls you can't edit |
|
|
532 | (1) |
|
Working with pictures and OLE objects |
|
|
533 | (1) |
|
Entering data in the Long Text field |
|
|
534 | (1) |
|
Entering data in the Date field |
|
|
535 | (1) |
|
|
536 | (1) |
|
Using combo boxes and list boxes |
|
|
536 | (1) |
|
Switching to Datasheet view |
|
|
537 | (1) |
|
|
538 | (1) |
|
|
538 | (1) |
|
Working with Form Properties |
|
|
539 | (11) |
|
Changing the title bar text with the Caption property |
|
|
540 | (1) |
|
|
541 | (1) |
|
Specifying how to view the form |
|
|
542 | (1) |
|
Removing the Record Selector |
|
|
543 | (1) |
|
Looking at other form properties |
|
|
543 | (7) |
|
Adding a Form Header or Footer |
|
|
550 | (1) |
|
Working with Section Properties |
|
|
550 | (2) |
|
|
551 | (1) |
|
|
551 | (1) |
|
|
551 | (1) |
|
The Special Effect property |
|
|
551 | (1) |
|
The Display When property |
|
|
552 | (1) |
|
|
552 | (1) |
|
|
552 | (4) |
|
Changing a control's properties |
|
|
552 | (1) |
|
|
553 | (1) |
|
Modifying the format of text in a control |
|
|
554 | (1) |
|
Using the Field List to add controls |
|
|
554 | (2) |
|
Converting a Form to a Report |
|
|
556 | (1) |
|
Chapter 19 Working with Form Controls |
|
|
557 | (34) |
|
Setting Control Properties |
|
|
558 | (7) |
|
Customizing default properties |
|
|
559 | (1) |
|
Looking at common controls and properties |
|
|
560 | (7) |
|
|
560 | (2) |
|
The Command Button control |
|
|
562 | (1) |
|
The Combo Box and List Box controls |
|
|
562 | (2) |
|
The Check Box and Toggle Button controls |
|
|
564 | (1) |
|
|
564 | (1) |
|
|
564 | (1) |
|
Creating a Calculated Control |
|
|
565 | (1) |
|
|
565 | (2) |
|
|
567 | (3) |
|
Using the Tab Stop property |
|
|
567 | (1) |
|
|
567 | (1) |
|
Setting up combo boxes and list boxes |
|
|
568 | (2) |
|
Tackling Advanced Forms Techniques |
|
|
570 | (7) |
|
Using the Page Number and Date/Time controls |
|
|
570 | (1) |
|
|
571 | (1) |
|
|
572 | (1) |
|
|
573 | (1) |
|
Offering more end-user help |
|
|
574 | (1) |
|
Adding background pictures |
|
|
574 | (2) |
|
Limiting the records shown on a form |
|
|
576 | (1) |
|
|
577 | (2) |
|
Using Dialog Boxes to Collect Information |
|
|
579 | (3) |
|
|
580 | (1) |
|
Setting up the command buttons |
|
|
581 | (1) |
|
|
581 | (1) |
|
|
582 | (1) |
|
Removing the control menu |
|
|
582 | (1) |
|
Designing a Form from Scratch |
|
|
582 | (9) |
|
|
583 | (1) |
|
|
584 | (1) |
|
|
584 | (3) |
|
Changing the form's behavior |
|
|
587 | (2) |
|
Setting the form properties |
|
|
587 | (1) |
|
Looking up values during data entry |
|
|
587 | (1) |
|
|
588 | (1) |
|
Changing the form's appearance |
|
|
589 | (2) |
|
Chapter 20 Presenting Data with Access Reports |
|
|
591 | (58) |
|
|
592 | (4) |
|
Identifying the different types of reports |
|
|
592 | (3) |
|
|
592 | (1) |
|
|
592 | (3) |
|
|
595 | (1) |
|
Distinguishing between reports and forms |
|
|
595 | (1) |
|
Creating a Report, from Beginning to End |
|
|
596 | (18) |
|
Defining the report layout |
|
|
596 | (1) |
|
|
596 | (1) |
|
Creating a report with the Report Wizard |
|
|
597 | (15) |
|
|
597 | (1) |
|
Selecting the grouping levels |
|
|
598 | (1) |
|
|
599 | (1) |
|
|
600 | (1) |
|
Selecting summary options |
|
|
601 | (1) |
|
|
602 | (1) |
|
Opening the report design |
|
|
602 | (1) |
|
Adjusting the report's layout |
|
|
603 | (1) |
|
|
604 | (2) |
|
Creating new theme color schemes |
|
|
606 | (2) |
|
Using the Print Preview window |
|
|
608 | (2) |
|
Publishing in alternate formats |
|
|
610 | (1) |
|
Viewing the report in Design view |
|
|
611 | (1) |
|
Printing or viewing the report |
|
|
612 | (2) |
|
|
612 | (1) |
|
|
612 | (2) |
|
|
614 | (1) |
|
Banded Report Design Concepts |
|
|
614 | (6) |
|
The Report Header section |
|
|
617 | (1) |
|
|
617 | (1) |
|
|
618 | (1) |
|
|
618 | (1) |
|
|
619 | (1) |
|
|
619 | (1) |
|
The Report Footer section |
|
|
619 | (1) |
|
Creating a Report from Scratch |
|
|
620 | (22) |
|
Creating a new report and binding it to a query |
|
|
621 | (1) |
|
Defining the report page size and layout |
|
|
622 | (3) |
|
Placing controls on the report |
|
|
625 | (1) |
|
|
626 | (1) |
|
Modifying the appearance of text in a control |
|
|
627 | (1) |
|
Working with Text Box controls |
|
|
627 | (7) |
|
Adding and using Text Box controls |
|
|
628 | (1) |
|
Entering an expression in a Text Box control |
|
|
628 | (1) |
|
Sizing a Text Box control or Label control |
|
|
629 | (1) |
|
Deleting and cutting attached labels from Text Box controls |
|
|
630 | (1) |
|
Pasting labels into a report section |
|
|
631 | (1) |
|
Moving Label and Text Box controls |
|
|
631 | (2) |
|
Modifying the appearance of multiple controls |
|
|
633 | (1) |
|
Changing Label and Text Box control properties |
|
|
634 | (2) |
|
Growing and shrinking Text Box controls |
|
|
636 | (1) |
|
Sorting and grouping data |
|
|
637 | (1) |
|
Creating a group header or footer |
|
|
637 | (1) |
|
Sorting data within groups |
|
|
638 | (3) |
|
|
639 | (1) |
|
|
639 | (1) |
|
|
640 | (1) |
|
Moving controls between sections |
|
|
640 | (1) |
|
|
641 | (1) |
|
Improving the Report's Appearance |
|
|
642 | (7) |
|
Adjusting the page header |
|
|
643 | (1) |
|
Creating an expression in the group header |
|
|
644 | (1) |
|
|
645 | (4) |
|
Chapter 21 Advanced Access Report Techniques |
|
|
649 | (46) |
|
Grouping and Sorting Data |
|
|
650 | (12) |
|
|
650 | (5) |
|
Grouping on date intervals |
|
|
655 | (1) |
|
Hiding repeating information |
|
|
656 | (4) |
|
|
660 | (1) |
|
Starting a new page number for each group |
|
|
661 | (1) |
|
|
662 | (18) |
|
|
662 | (4) |
|
|
666 | (3) |
|
Adding emphasis at run time |
|
|
669 | (2) |
|
|
671 | (1) |
|
Inserting vertical lines between columns |
|
|
672 | (2) |
|
Adding a blank line every n records |
|
|
674 | (2) |
|
|
676 | (2) |
|
Using different formats in the same text box |
|
|
678 | (1) |
|
|
679 | (1) |
|
|
679 | (1) |
|
|
679 | (1) |
|
|
680 | (2) |
|
Adding more information to a report |
|
|
680 | (1) |
|
Adding the user's name to a bound report |
|
|
681 | (1) |
|
Adding Even More Flexibility |
|
|
682 | (15) |
|
Displaying all reports in a combo box |
|
|
682 | (2) |
|
Fast printing from queried data |
|
|
684 | (1) |
|
Using snaking columns in a report |
|
|
684 | (7) |
|
Exploiting two-pass report processing |
|
|
691 | (2) |
|
Assigning unique names to controls |
|
|
693 | (2) |
Part VI: Access Programming Fundamentals |
|
695 | (200) |
|
Chapter 22 Using Access Macros |
|
|
697 | (36) |
|
An Introduction to Macros |
|
|
698 | (4) |
|
|
698 | (3) |
|
Assigning a macro to an event |
|
|
701 | (1) |
|
Understanding Macro Security |
|
|
702 | (4) |
|
|
702 | (3) |
|
|
705 | (1) |
|
|
706 | (3) |
|
|
709 | (4) |
|
|
713 | (3) |
|
Opening reports using conditions |
|
|
713 | (3) |
|
Multiple actions in conditions |
|
|
716 | (1) |
|
|
716 | (5) |
|
Enhancing a macro you've already created |
|
|
716 | (2) |
|
Using temporary variables to simplify macros |
|
|
718 | (2) |
|
Using temporary variables in VBA |
|
|
720 | (1) |
|
Error Handling and Macro Debugging |
|
|
721 | (6) |
|
|
723 | (2) |
|
|
725 | (1) |
|
|
726 | (1) |
|
|
727 | (2) |
|
Macros versus VBA Statements |
|
|
729 | (4) |
|
Choosing between macros and VBA |
|
|
730 | (1) |
|
Converting existing macros to VBA |
|
|
730 | (3) |
|
Chapter 23 Using Access Data Macros |
|
|
733 | (18) |
|
|
734 | (1) |
|
Understanding Table Events |
|
|
735 | (3) |
|
|
735 | (2) |
|
|
737 | (1) |
|
Using the Macro Designer for Data Macros |
|
|
738 | (2) |
|
Understanding the Action Catalog |
|
|
740 | (3) |
|
|
740 | (1) |
|
|
740 | (1) |
|
|
741 | (2) |
|
Creating Your First Data Macro |
|
|
743 | (4) |
|
|
747 | (2) |
|
Collapsing and expanding macro items |
|
|
747 | (1) |
|
|
748 | (1) |
|
|
748 | (1) |
|
Recognizing the Limitations of Data Macros |
|
|
749 | (2) |
|
Chapter 24 Getting Started with Access VBA |
|
|
751 | (44) |
|
Introducing Visual Basic for Applications |
|
|
752 | (2) |
|
Understanding VBA Terminology |
|
|
754 | (1) |
|
Starting with VBA Code Basics |
|
|
755 | (1) |
|
|
755 | (15) |
|
|
756 | (7) |
|
|
759 | (1) |
|
|
760 | (3) |
|
Working in the code window |
|
|
763 | (7) |
|
|
764 | (1) |
|
|
764 | (2) |
|
|
766 | (1) |
|
|
766 | (3) |
|
|
769 | (1) |
|
|
770 | (1) |
|
Understanding VBA Branching Constructs |
|
|
770 | (10) |
|
|
771 | (5) |
|
|
771 | (3) |
|
The Select Case...End Select statement |
|
|
774 | (2) |
|
|
776 | (4) |
|
|
777 | (1) |
|
|
778 | (2) |
|
Working with Objects and Collections |
|
|
780 | (5) |
|
|
780 | (2) |
|
|
782 | (1) |
|
|
782 | (1) |
|
|
782 | (1) |
|
|
782 | (2) |
|
|
784 | (1) |
|
Exploring the Visual Basic Editor |
|
|
785 | (10) |
|
|
786 | (1) |
|
|
787 | (1) |
|
|
788 | (1) |
|
|
789 | (7) |
|
The Editor tab of the Options dialog box |
|
|
789 | (2) |
|
The Project Properties dialog box |
|
|
791 | (4) |
|
Chapter 25 Mastering VBA Data Types and Procedures |
|
|
795 | (44) |
|
|
796 | (7) |
|
|
797 | (1) |
|
|
798 | (5) |
|
|
801 | (1) |
|
|
802 | (1) |
|
|
803 | (1) |
|
|
803 | (21) |
|
Comparing implicit and explicit variables |
|
|
806 | (1) |
|
Forcing explicit declaration |
|
|
807 | (1) |
|
Using a naming convention with variables |
|
|
808 | (2) |
|
Understanding variable scope and lifetime |
|
|
810 | (4) |
|
|
810 | (2) |
|
Determining a variable's lifetime |
|
|
812 | (1) |
|
Deciding on a variable's scope |
|
|
813 | (1) |
|
|
814 | (3) |
|
|
814 | (1) |
|
Using a naming convention with constants |
|
|
815 | (1) |
|
Eliminating hard-coded values |
|
|
816 | (1) |
|
|
817 | (7) |
|
|
817 | (3) |
|
|
820 | (1) |
|
|
821 | (3) |
|
Understanding Subs and Functions |
|
|
824 | (6) |
|
Understanding where to create a procedure |
|
|
825 | (1) |
|
|
825 | (1) |
|
|
826 | (4) |
|
|
830 | (6) |
|
|
831 | (1) |
|
Calling a function and passing parameters |
|
|
832 | (2) |
|
Creating a function to calculate sales tax |
|
|
834 | (2) |
|
Simplifying Code with Named Arguments |
|
|
836 | (3) |
|
Chapter 26 Understanding the Access Event Model |
|
|
839 | (22) |
|
|
840 | (3) |
|
Understanding how events trigger VBA code |
|
|
840 | (1) |
|
Creating event procedures |
|
|
841 | (2) |
|
Identifying Common Events |
|
|
843 | (9) |
|
|
844 | (3) |
|
|
844 | (1) |
|
Form mouse and keyboard events |
|
|
845 | (1) |
|
|
846 | (1) |
|
|
847 | (2) |
|
|
849 | (1) |
|
Report section event procedures |
|
|
850 | (2) |
|
Paying Attention to Event Sequence |
|
|
852 | (9) |
|
Looking at common event sequences |
|
|
852 | (2) |
|
Writing simple form and control event procedures |
|
|
854 | (9) |
|
Opening a form with an event procedure |
|
|
855 | (1) |
|
Running an event procedure when closing a form |
|
|
856 | (2) |
|
Using an event procedure to confirm record deletion |
|
|
858 | (3) |
|
Chapter 27 Debugging Your Access Applications |
|
|
861 | (34) |
|
|
862 | (1) |
|
Testing Your Applications |
|
|
863 | (7) |
|
|
864 | (3) |
|
|
867 | (3) |
|
Traditional Debugging Techniques |
|
|
870 | (6) |
|
|
870 | (4) |
|
|
874 | (2) |
|
Using the Access Debugging Tools |
|
|
876 | (13) |
|
Running code with the Immediate window |
|
|
876 | (1) |
|
Suspending execution with breakpoints |
|
|
877 | (6) |
|
Looking at variables with the Locals window |
|
|
883 | (1) |
|
Setting watches with the Watches window |
|
|
884 | (2) |
|
Using conditional watches |
|
|
886 | (2) |
|
Using the Call Stack window |
|
|
888 | (1) |
|
Trapping Errors in Your Code |
|
|
889 | (8) |
|
Understanding error trapping |
|
|
889 | (3) |
|
|
889 | (2) |
|
|
891 | (1) |
|
|
891 | (1) |
|
|
891 | (1) |
|
|
892 | (1) |
|
Including error handling in your procedures |
|
|
893 | (2) |
Part VII: Advanced Access Programming Techniques |
|
895 | (150) |
|
Chapter 28 Accessing Data with VBA Code |
|
|
897 | (44) |
|
|
897 | (4) |
|
Understanding ADO Objects |
|
|
901 | (13) |
|
The ADO Connection object |
|
|
902 | (3) |
|
|
905 | (3) |
|
|
908 | (6) |
|
|
909 | (2) |
|
|
911 | (1) |
|
Detecting the recordset end or beginning |
|
|
912 | (1) |
|
|
913 | (1) |
|
Understanding DAO Objects |
|
|
914 | (10) |
|
|
916 | (1) |
|
|
916 | (1) |
|
|
916 | (1) |
|
|
917 | (2) |
|
|
919 | (2) |
|
|
921 | (1) |
|
The DAO Field objects (recordsets) |
|
|
922 | (2) |
|
Writing VBA Code to Update a Table |
|
|
924 | (17) |
|
Updating fields in a record using ADO |
|
|
925 | (5) |
|
Updating a calculated control |
|
|
930 | (5) |
|
Recalculating a control when updating or adding a record |
|
|
930 | (2) |
|
Checking the status of a record deletion |
|
|
932 | (2) |
|
Eliminating repetitive code |
|
|
934 | (1) |
|
|
935 | (1) |
|
|
935 | (1) |
|
Deleting related records in multiple tables |
|
|
936 | (5) |
|
Chapter 29 Advanced Data Access with VBA |
|
|
941 | (18) |
|
Adding an Unbound Combo Box to a Form to Find Data |
|
|
941 | (8) |
|
Using the FindRecord method |
|
|
944 | (2) |
|
|
946 | (3) |
|
|
949 | (10) |
|
|
949 | (2) |
|
|
951 | (8) |
|
Creating a parameter query |
|
|
952 | (3) |
|
Creating an interactive filter dialog box |
|
|
955 | (2) |
|
Linking the dialog box to another form |
|
|
957 | (2) |
|
Chapter 30 Customizing the Ribbon |
|
|
959 | (40) |
|
|
959 | (6) |
|
Controls for Access Ribbons |
|
|
960 | (4) |
|
|
961 | (1) |
|
|
962 | (1) |
|
|
962 | (1) |
|
|
962 | (1) |
|
|
963 | (1) |
|
|
963 | (1) |
|
|
964 | (1) |
|
|
964 | (7) |
|
|
964 | (1) |
|
|
965 | (1) |
|
Editing the Default Ribbon |
|
|
965 | (3) |
|
Working with the Quick Access Toolbar |
|
|
968 | (3) |
|
Developing Custom Ribbons |
|
|
971 | (3) |
|
The Ribbon creation process |
|
|
971 | (1) |
|
|
972 | (2) |
|
|
974 | (9) |
|
Step 1: Design the Ribbon and build the XML |
|
|
974 | (3) |
|
Step 2: Write the callback routines |
|
|
977 | (1) |
|
Step 3: Create the USysRibbons table |
|
|
978 | (1) |
|
Step 4: Add XML to USysRibbons |
|
|
979 | (2) |
|
Step 5: Specify the custom Ribbon property |
|
|
981 | (2) |
|
|
983 | (2) |
|
|
985 | (9) |
|
|
985 | (1) |
|
|
985 | (2) |
|
|
987 | (1) |
|
|
988 | (1) |
|
|
989 | (1) |
|
|
990 | (3) |
|
|
993 | (1) |
|
Attaching Ribbons to Forms and Reports |
|
|
994 | (2) |
|
Removing the Ribbon Completely |
|
|
996 | (3) |
|
Chapter 31 Preparing Your Access Application for Distribution |
|
|
999 | (46) |
|
Defining the Current Database Options |
|
|
1000 | (9) |
|
|
1000 | (6) |
|
|
1000 | (1) |
|
|
1001 | (1) |
|
|
1002 | (1) |
|
|
1002 | (1) |
|
|
1002 | (1) |
|
|
1003 | (1) |
|
|
1004 | (1) |
|
Remove Personal Information from File Properties on Save |
|
|
1004 | (1) |
|
Use Windows-Themed Controls on Forms |
|
|
1004 | (1) |
|
|
1004 | (1) |
|
Enable Design Changes for Tables in Datasheet View |
|
|
1005 | (1) |
|
Check for Truncated Number Fields |
|
|
1005 | (1) |
|
Picture Property Storage Format |
|
|
1005 | (1) |
|
|
1006 | (1) |
|
The Display Navigation Pane check box |
|
|
1006 | (1) |
|
The Navigation Options button |
|
|
1006 | (1) |
|
Ribbon and toolbar options |
|
|
1007 | (1) |
|
|
1008 | (1) |
|
|
1008 | (1) |
|
|
1008 | (1) |
|
Allow Default Shortcut Menus |
|
|
1008 | (1) |
|
|
1008 | (1) |
|
Developing the Application |
|
|
1009 | (6) |
|
Building to a specification |
|
|
1009 | (2) |
|
|
1011 | (2) |
|
Documenting the code you write |
|
|
1011 | (1) |
|
Documenting the application |
|
|
1012 | (1) |
|
Testing the application before distribution |
|
|
1013 | (2) |
|
Polishing Your Application |
|
|
1015 | (14) |
|
Giving your application a consistent look and feel |
|
|
1015 | (1) |
|
Adding common professional components |
|
|
1016 | (11) |
|
|
1016 | (2) |
|
An application switchboard |
|
|
1018 | (1) |
|
|
1018 | (2) |
|
|
1020 | (1) |
|
|
1021 | (6) |
|
Making the application easy to start |
|
|
1027 | (2) |
|
Bulletproofing an Application |
|
|
1029 | (11) |
|
Using error trapping on all Visual Basic procedures |
|
|
1029 | (4) |
|
|
1030 | (3) |
|
Separating tables from the rest of the application |
|
|
1033 | (1) |
|
Building bulletproof forms |
|
|
1033 | (1) |
|
|
1034 | (1) |
|
Using the /runtime option |
|
|
1034 | (2) |
|
Encrypting or encoding a database |
|
|
1036 | (2) |
|
Removing a database password |
|
|
1037 | (1) |
|
Protecting Visual Basic code |
|
|
1038 | (2) |
|
|
1040 | (7) |
|
Setting startup options in code |
|
|
1041 | (1) |
|
|
1041 | (1) |
|
|
1042 | (2) |
|
|
1044 | (1) |
Part VIII: Access and Windows SharePoint Services |
|
1045 | (46) |
|
Chapter 32 Integrating Access with SharePoint |
|
|
1047 | (16) |
|
|
1047 | (1) |
|
Understanding SharePoint Sites |
|
|
1048 | (3) |
|
|
1049 | (1) |
|
|
1049 | (2) |
|
Sharing Data between Access and SharePoint |
|
|
1051 | (9) |
|
Linking to SharePoint lists |
|
|
1051 | (3) |
|
Importing SharePoint lists |
|
|
1054 | (1) |
|
Exporting Access tables to SharePoint |
|
|
1055 | (3) |
|
Moving Access tables to SharePoint |
|
|
1058 | (2) |
|
Using SharePoint Templates |
|
|
1060 | (3) |
|
Chapter 33 Deploying Access Applications to SharePoint |
|
|
1063 | (28) |
|
Understanding Web Publishing with Access |
|
|
1064 | (3) |
|
Understanding Access Services |
|
|
1065 | (1) |
|
|
1066 | (1) |
|
Examining the Limitations of Access Web Applications |
|
|
1067 | (3) |
|
Limitations of Access Services |
|
|
1068 | (1) |
|
Transactional limitations |
|
|
1069 | (1) |
|
Publishing a Custom Access Application to SharePoint |
|
|
1070 | (21) |
|
Preparing the Access data model |
|
|
1070 | (3) |
|
Initializing and configuring the custom web application |
|
|
1073 | (12) |
|
Reviewing and editing table views |
|
|
1076 | (1) |
|
Adding a validation rule to a table |
|
|
1077 | (3) |
|
|
1080 | (2) |
|
Creating your own queries and views |
|
|
1082 | (2) |
|
A final word on configuring your web application |
|
|
1084 | (1) |
|
Launching and managing your web application |
|
|
1085 | (6) |
Index |
|
1091 | |