| Preface | ix |
1. | Queries | 1 |
1.1 | Specify Query Criteria at Runtime | 2 |
1.2 | Using a Form-Based Parameter Query | 4 |
1.3 | Limit the Items in One Combo Box Based on the Selected Item in Another | 7 |
1.4 | Make Formatted Date Columns Sort Correctly in a Crosstab Query | 12 |
1.5 | Group Mailing Labels by Address | 15 |
1.6 | Use a Field in One Table to Update a Field in Another Table | 18 |
1.7 | Use a VBA Variable to Filter a Query | 22 |
1.8 | Use a Query to Retrieve a Random Set of Rows | 26 |
1.9 | Create a Query That Will Show Aging of Receivables | 28 |
1.10 | Create a Join That's Based on a Comparison Other than Equality | 33 |
1.11 | Create a Query to Combine Data from Two Tables with Similar Structures | 37 |
1.12 | Create a Combo Box That Allows a User to Select N/A | 40 |
1.13 | Use a Query to Show the Relationship Between Employees and Supervisors | 44 |
1.14 | Create a Query That Uses Case-Sensitive Criteria | 49 |
1.15 | Use a Query to Create a New Table Complete with Indexes | 51 |
1.16 | Save My Queries in a Table for Better Programmatic Access and Security | 54 |
1.17 | Create a Recordset Based on a Parameter Query from VBA Code | 57 |
2. | Forms | 61 |
2.1 | Make Custom Templates for Forms and Reports | 61 |
2.2 | Highlight the Current Field in Data-Entry Forms | 65 |
2.3 | Restrict the User to a Single Row on a Form | 69 |
2.4 | Use an Option Group to Collect and Display Textual Information | 72 |
2.5 | Display Multiple Pages of Information on One Form | 76 |
2.6 | Provide Record Navigation Buttons on a Form | 79 |
2.7 | Size a Form's Controls to Match the Form's Size | 85 |
2.8 | Make a Simple "Searching" List Box | 90 |
2.9 | Create a Replacement for Access's InputBox | 94 |
2.10 | Store the Sizes and Locations of Forms | 101 |
2.11 | Open Multiple Instances of a Form | 105 |
3. | Reports | 110 |
3.1 | Create a Report with Line Numbers | 111 |
3.2 | Print the Value of a Parameter on a Report | 112 |
3.3 | Create a Report with Multiple Columns | 116 |
3.4 | Print a Message on a Report if Certain Conditions Are Met | 120 |
3.5 | Create a Page-Range Indicator on Each Page | 125 |
3.6 | Create a Simple Bar Graph on a Report | 128 |
3.7 | Create a Page Total | 131 |
3.8 | Avoid Unwanted Blank Rows on Mailing Labels | 134 |
3.9 | Suppress Printing a Report if There Are No Records to Print | 138 |
3.10 | Print Different Headers or Footers on Odd and Even Pages | 140 |
3.11 | Make a Vertical Line the Same Height as a CanGrow/CanShrink Control | 144 |
3.12 | Alternate Gray Bars on My Reports | 148 |
3.13 | Print Only Records Matching a Form's Filter | 151 |
3.14 | Keep a Report from Breaking at an Inappropriate Place | 156 |
3.15 | Customize a Report's Grouping and Sorting at Runtime | 160 |
4. | Applications | 171 |
4.1 | Convert Queries into Embedded SQL Statements | 171 |
4.2 | Build an Object Inventory | 174 |
4.3 | Verify That Objects Use Consistent Settings | 181 |
4.4 | Hide Access Screen Activity | 192 |
4.5 | Find out What Language Version of Access Is Installed | 197 |
4.6 | Internationalize Text in Your Applications | 200 |
4.7 | Change and Reset the Access Caption Bar | 206 |
4.8 | Use the Windows File Open/Save Common Dialogs | 210 |
4.9 | Clean Test Data out of a Database When You're Ready to Ship It | 218 |
4.10 | Secure Your Access Database | 221 |
5. | Printers | 227 |
5.1 | Retrieve a List of All the Installed Output Devices | 228 |
5.2 | Set and Retrieve the Name of the Default Output Device | 231 |
5.3 | Programmatically Change Margin and Column Settings for Reports | 233 |
5.4 | Programmatically Change Printer Options | 237 |
5.5 | Programmatically Control the Paper Source | 241 |
5.6 | Retrieve Information About a Report or Form's Selected Printer | 244 |
5.7 | Choose an Output Device at Runtime | 246 |
5.8 | Find Which Reports Are Not Set to Print to the Default Printer | 248 |
6. | Data | 252 |
6.1 | Save with Each Record the Name of the Last Person Who Edited It and the Date and Time | 252 |
6.2 | Determine if You're on a New Record in a Form | 257 |
6.3 | Find All Records with Names That Sound Alike | 260 |
6.4 | Find the Median Value for a Field | 264 |
6.5 | Quickly Find a Record in a Linked Table | 270 |
6.6 | Get a Complete List of Field Properties from a Table or Query | 274 |
6.7 | Create and Use Flexible AutoNumber Fields | 278 |
6.8 | Back Up Selected Objects to Another Database | 283 |
7. | VBA | 293 |
7.1 | Build Up String References with Embedded Quotes | 293 |
7.2 | Create a Global Procedure Stack | 298 |
7.3 | Create an Execution Time Profiler | 304 |
7.4 | Multitask Your VBA Code | 309 |
7.5 | Programmatically Add Items to a List or Combo Box | 313 |
7.6 | Pass a Variable Number of Parameters to a Procedure | 325 |
7.7 | Sort an Array in VBA | 330 |
7.8 | Fill a List Box with a List of Files | 334 |
7.9 | Handle Object Properties, in General | 338 |
7.10 | Detect Whether an Object Exists | 345 |
8. | Optimization | 349 |
8.1 | Accelerate the Load Time of Forms | 349 |
8.2 | Make Slow Forms Run Faster | 357 |
8.3 | Make Combo Boxes Load Faster | 366 |
8.4 | Use Jet Engine Optimizations to Speed Up Queries | 367 |
8.5 | Accelerate VBA Code | 371 |
8.6 | Test the Comparative Benefits of Various Optimization Techniques | 375 |
8.7 | Accelerate Multiuser Applications | 377 |
8.8 | Accelerate Client/Server Applications | 383 |
9. | User Interface | 387 |
9.1 | Create Context-Sensitive Keyboard Shortcuts | 388 |
9.2 | Create a Form with No Menu or Toolbar | 393 |
9.3 | Create a Geographical Map Interface | 396 |
9.4 | Mark a Record on a Form and Return to It Later | 400 |
9.5 | Carry Data Forward from Record to Record | 407 |
9.6 | Create a Combo Box That Accepts New Entries | 411 |
9.7 | Create Animated Buttons | 416 |
9.8 | Create an Expanding Dialog | 421 |
9.9 | Use an ActiveX Control | 426 |
9.10 | Create a Generic, Reusable Status Meter | 434 |
10. | Multiuser Applications | 441 |
10.1 | Properly Secure Your Database | 441 |
10.2 | Maintain Multiple Synchronized Copies of the Same Database | 451 |
10.3 | Create a Transaction Log | 456 |
10.4 | Send Messages to Other Users Without Using Email | 459 |
10.5 | Programmatically Track Users and Groups | 468 |
10.6 | Adjust an Application Based on Who's Logged In | 474 |
10.7 | List All Users with Blank Passwords | 477 |
10.8 | Track Which Users Have a Shared Database Open | 481 |
10.9 | Determine if a Record Is Locked and by Whom | 484 |
10.10 | Set a Maximum Locking Interval for a Record | 488 |
11. | Windows APIs | 494 |
11.1 | Remove a Form's System Menu and Maximize/Minimize Buttons | 495 |
11.2 | Flash a Window's Titlebar or Icon | 499 |
11.3 | Classify Keypresses in a Language-Independent Manner | 502 |
11.4 | Restrict Mouse Movement to a Specific Region | 505 |
11.5 | Run Another Program and Pause Until It's Done | 507 |
11.6 | Exit Windows Under Program Control | 511 |
11.7 | Run the Application Associated with a Data File | 514 |
11.8 | Check to See if an Application Is Already Running | 519 |
11.9 | Retrieve a List of All Top-Level Windows | 523 |
11.10 | Close a Running Windows Application | 526 |
11.11 | Set File Date and Time Stamps | 528 |
11.12 | Retrieve Information About Available Drives | 531 |
11.13 | Collect and Display Information on the System and the Access Installation | 535 |
11.14 | Create and Cancel Network Connections Programmatically | 544 |
12. | Automation | 553 |
12.1 | Play an Embedded Sound File from Within an Application | 554 |
12.2 | Print an Access Report from Excel | 559 |
12.3 | Use Excel's Functions from Within Access | 564 |
12.4 | Perform a Mail Merge from Access to Word | 573 |
12.5 | Add an Item to the Startup Group | 577 |
12.6 | Send Access Data to Excel and Create an Excel Chart | 588 |
12.7 | Create a PowerPoint Presentation from Access Data | 595 |
12.8 | Add a Contact and Send Email Through Outlook | 609 |
13. | Data Access Pages | 616 |
13.1 | Replace Navigation Button Images with Your Own Images | 617 |
13.2 | Use Labels or Other Controls for Record Navigation | 620 |
13.3 | Change the Text Displayed with a Navigation Control | 622 |
13.4 | Create a DAP that Allows You to Update Data | 624 |
13.5 | Create One File to Store Connection Information for All DAPs in an Application | 626 |
13.6 | Programmatically Change the Connection String for All Pages in a Database | 632 |
13.7 | Change the Default Settings for New DAPs | 636 |
13.8 | Use Parameters Set in One DAP to Open Another | 639 |
14. | SQL Server | 645 |
14.1 | Dynamically Link SQL Server Tables at Runtime | 645 |
14.2 | Dynamically Connect to SQL Server from an ADP | 651 |
14.3 | Share an ADP from a Shared Network Folder | 654 |
14.4 | Fill the Drop-Down Lists When Using ServerFilterByForm in an ADP | 656 |
14.5 | Pass Parameters to Stored Procedures from Pass-Through Queries in an MDB | 659 |
14.6 | Pass Parameters to Stored Procedures from an ADP | 663 |
14.7 | Use Controls as Parameters for the Row Source of Combo and List Boxes in an ADP | 665 |
14.8 | Reference Data from More than One SQL Server Database in an ADP | 668 |
14.9 | Use Views to Update Data in an ADP When Users Don't Have Permissions on Tables | 670 |
15. | Office Web and SharePoint | 674 |
15.1 | Work with SharePoint Data from Access | 674 |
15.2 | Create a SharePoint Data View Web Part Based on Access Data | 677 |
15.3 | Conditionally Format a Data View Web Part | 680 |
15.4 | Create a Master/Detail Page using Data View Web Parts | 682 |
15.5 | Post Web Form Data to an Access Database | 687 |
15.6 | Create a Web Frontend to an Access Table Using FrontPage | 692 |
16. | Smart Tags | 698 |
16.1 | Use the Built-in Smart Tags | 699 |
16.2 | Display Multiple Smart Tags on Multiple Forms | 702 |
16.3 | Display Smart Tags when Application Starts | 704 |
16.4 | Execute a Smart Tag Action Without Displaying the Smart Tag | 706 |
16.5 | Create a Smart Tag on a Table in an Access Project | 709 |
16.6 | Create a Custom Smart Tag to Get a Weather Report | 711 |
16.7 | Create a Custom Smart Tag DLL | 714 |
17. | .NET | 723 |
17.1 | Call a .NET Component from Access | 724 |
17.2 | Call a .NET Component Containing a Parameterized Constructor | 728 |
17.3 | Retrieve Access Data from an ASP.NET Application | 731 |
17.4 | Call a Web Service from Access | 734 |
17.5 | Work with a Web Service that Returns a DataSet | 738 |
17.6 | Print an Access Report from .NET Windows Form Application | 744 |
18. | XML | 751 |
18.1 | Import XML Structured as Elements | 755 |
18.2 | Import XML into Existing Tables | 757 |
18.3 | Import XML Using a Schema (XSD) | 760 |
18.4 | Export XML | 764 |
18.5 | Exporting Selected Columns to an HTML Table | 767 |
18.6 | Export Unrelated Tables | 771 |
18.7 | Export Using a Where Clause | 773 |
18.8 | Export a Report | 775 |
| Index | 783 |