第一部分 Access开发基础 3
第1章 Access作为开发工具 3
1.1 Access中可开发的应用程序类型 3
1.1.1 Access作为个人应用程序开发平台 3
1.1.2 Access作为小型商务应用程序开发平台 4
1.1.3 Access作为部门管理应用程序开发平台 4
1.1.4 Access 作为公司管理应用程序开发平台 4
1.1.5 Access 作为企业级客户/服务器应用程序开发平台 5
1.1.6 Access作为内部网/Internet应用程序开发平台 6
1.2 具有缩放能力的Access 6
1.3 什么是数据库 6
1.4 什么是数据库对象 7
1.4.1 表:数据的仓库 7
1.4.2 关系:联接表 9
1.4.3 查询:存储应用到数据的问题和操作 10
1.4.4 窗体:显示、修改和添加数据的手段 11
1.4.5 报表:将数据整理成信息 12
1.4.6 数据访问页:在浏览器内查看的窗体 14
1.4.7 宏:加强系统的自动化能力 14
1.4.8 模块:应用程序开发过程的基础 16
1.5 对象命名约定 16
1.6 硬件要求 17
1.6.1 开发人员的系统硬件要求 17
1.6.2 用户系统的硬件要求 18
1.7 Access应用程序的开发过程 18
1.7.1 任务分析 18
1.7.2 数据分析和设计 18
1.7.3 规范化的作用 19
1.7.4 原型开发 20
1.7.6 程序的实现 21
1.7.7 维护 22
1.8 小结 23
第2章 表的必要知识 24
2.1 创建新表 24
2.2 为数据选择合适的字段类型 27
2.2.1 文本字段:最常用的字段类型 29
2.2.2 备注字段:处理较长的注释和描述 29
2.2.3 数字字段:计算 29
2.2.4 日期/时间字段:跟踪事件的发生 29
2.2.5 货币字段:存储钱数 29
2.2.6 自动编号字段:唯一的记录标识符 30
2.2.7 是/否字段:从两个答案中选择一个正确答案 30
2.2.8 OLE对象字段:具有强大的存储功能 30
2.2.9 超级链接字段:实现与Internet的链接 30
2.3 字段属性操作 31
2.3.1 字段大小:限制对字段的输入 31
2.3.2 格式:决定数据的显示方式 32
2.3.3 输入掩码:决定何种数据能进入字段 32
2.3.4 标题:节省时间 34
2.3.5 默认值:节省数据输入时间 34
2.3.6 有效性规则:控制字段的输入 34
2.3.7 有效性文本:为用户提供错误消息 36
2.3.8 必填字段属性:强制用户输入字段值 36
2.3.9 允许空字符串:适应无数据的情况 37
2.3.10 索引:加速搜索 37
2.3.11 Unicode压缩 38
2.4 至关重要的主键 39
2.5 查阅操作 39
2.6 表的属性操作 41
2.7 使用索引提高性能 43
2.8 Access表和Internet 43
2.8.1 超级链接字段类型 43
2.8.2 将表的数据保存为HTML 45
2.9 小结 49
第3章 关系:数据完整性的关键 50
第3章 关系:数据完整性的关键 50
3.1 检查关系的类型 50
3.1.1 一对多关系 50
3.1.2 一对一关系 51
3.1.3 多对多关系 52
3.2 建立关系 52
3.2.1 在两个表之间建立关系 53
3.2.2 建立关系的原则 53
3.2.3 修改现有的关系 55
3.3 建立参照完整性 55
3.3.1 级联更新相关字段 57
3.3.2 级联删除相关记录 57
3.4 关系的作用 59
3.5 检查索引和关系 59
3.6 小结 61
第4章 查询的必要知识 62
4.1 什么是查询以及何时使用查询 62
4.2 查询基础 62
4.2.1 添加表到查询中 64
4.2.2 添加字段到查询中 64
4.2.3 从查询网格中删除字段 66
4.2.4 在查询创建后插入字段 67
4.2.5 在查询网格中移动字段的位置 67
4.2.6 保存查询以及为其命名 68
4.3 排序查询结构 68
4.4 用准则提炼查询 69
4.5 准则的日期操作 72
4.6 查询结果的更新 73
4.7 基于多个表创建查询 73
4.7.1 多表查询的缺陷 76
4.7.2 多表查询的行修复 77
4.8 创建计算字段 78
4.9 从表达式生成器获取帮助 81
4.10 以总计查询汇总数据 83
4.11 在输出中屏蔽字段 87
4.12 NULL值和查询结果 87
4.13 使用字段、字段列表和查询的属性提炼查询 90
4.13.1 字段属性:改变字段的特性 90
4.13.2 字段列表属性:改变字段列表的属性 91
4.13.3 查询属性:改变整个查询的性能 91
4.14 建立设计阶段不知道准则时可用的参数查询 92
4.15 小结 96
第5章 窗体的必要知识 97
5.1 窗体的应用 97
5.2 窗体剖析 99
5.3 创建新窗体 99
5.3.1 使用窗体向导创建窗体 100
5.3.2 从设计视图中创建窗体 102
5.4 窗体设计窗口的操作 103
5.4.1 理解和操作窗体设计工具 103
5.4.2 为窗体添加字段 105
5.4.3 窗体对象的选定、移动、对齐和调整大小 105
5.4.4 修改对象的Tab键次序 110
5.5 选择适当的控件 111
5.5.1 标签 111
5.5.2 文本框 112
5.5.3 组合框 112
5.5.4 列表框 115
5.5.5 复选框 116
5.5.6 选项按钮 116
5.5.7 切换按钮 116
5.5.8 选项组 116
5.6 控件转换 119
5.6.1 文本框转换为组合框 119
5.6.2 组合框转换为列表框 120
5.7 条件格式 120
5.8 可用的窗体属性 121
5.8.1 属性窗口的操作 121
5.8.2 窗体属性的操作 122
5.9 控件属性及其使用 126
5.9.1 控件的格式属性 126
5.9.2 控件的数据属性 128
5.9.3 控件的其他属性 129
5.10 绑定控件、非绑定控件和计算控件 130
5.11 使用表达式强化窗体 130
5.12 命令按钮向导:无需键入的编程 131
5.13 创建基于多个表的窗体 134
5.13.1 创建一对多窗体 134
5.13.2 对子窗体的操作 137
5.14 基于查询的窗体:原因及方式 137
5.15 Access窗体和Internet 138
5.15.1 在窗体中添加超级链接 139
5.15.2 窗体保存为HTML 141
5.15.3 窗体保存为Microsoft ⅡS1-2或者Microsoft Active Server Pages 141
5.15.4 设计客户窗体 141
5.15.5 设计时间卡窗体 143
5.15.6 设计付款窗体 144
5.15.7 设计工程窗体 145
5.15.8 要做的工作 145
5.16 小结 146
第6章 报表的必要知识 147
6.1 报表的类型 147
6.1.1 明细报表 147
6.1.2 汇总报表 148
6.1.3 交叉列表报表 148
6.1.4 具有图形和图表的报表 150
6.1.5 具有窗体的报表 150
6.1.6 具有标签的报表 151
6.2 报表剖析 151
6.3 创建新的报表 153
6.3.1 使用报表向导创建报表 154
6.3.2 从设计视图中创建报表 155
6.4 报表设计窗口的操作 156
6.4.1 理解报表设计工具 156
6.4.2 为报表添加字段 157
6.4.3 报表对象的选定、移动、对齐和调整大小 157
6.5 选择适当的控件 159
6.5.1 标签 160
6.5.2 文本框 160
6.5.3 直线 160
6.5.4 矩形 160
6.5.5 绑定对象框 161
6.5.6 非绑定对象框 161
6.5.7 图像控件 162
6.5.8 其他控件 163
6.6 报表属性及使用 163
6.6.1 属性窗口的操作 163
6.6.2 报表的格式属性 163
6.6.3 报表的数据属性 164
6.6.4 报表的其他属性 164
6.7 控件属性及其使用 165
6.7.1 控件的格式属性 165
6.7.2 控件的数据属性 166
6.7.3 其他控件属性 167
6.8 插入分页符 167
6.9 非绑定控件、绑定控件和计算控件 167
6.10 使用表达式加强报表 168
6.11 创建基于多个表的报表 168
6.11.1 创建一对多报表 168
6.11.2 子报表的操作 174
6.12 排序和分组操作 174
6.12.1 添加排序和分组 175
6.12.2 排序和分组属性 175
6.12.3 组页眉和组页脚的属性及使用 177
6.13 基于存储查询的报表改善性能和可重用性 177
6.14 Access报表和Internet 178
6.14.1 对报表添加超级链接 178
6.14.2 报表保存为HTML 179
6.14.3 设计rptClientListing报表 179
6.14.4 设计rptTimeSheet报表 182
6.15 小结 184
第7章 VBA简介 185
7.1 VBA解释 185
7.2 Access的类模块、标准模块、窗体模块和报表模块 187
7.2.1 VBA代码的编写位置 187
7.2.2 模块概述 187
7.2.3 Option Explicit语句 190
7.2.4 创建事件过程 191
7.2.5 创建函数和子程序 191
7.2.6 调用事件和用户定义例程 192
7.2.7 过程的适用范围和生存期 193
7.3 变量的操作 196
7.3.1 声明变量 196
7.3.2 VBA数据类型 196
7.3.3 变量的适用范围和生存期:合理地开发变量 197
7.4 为代码添加注释 199
7.5 使用续行符 200
7.6 使用VBA控制结构 200
7.6.1 If...Then...Else 201
7.6.2 Immediate If(IIf)语句 202
7.6.3 条件If:条件编译 202
7.6.4 Select Case语句 203
7.6.5 循环 204
7.6.6 For...Next循环 206
7.6.7 With...End With语句 206
7.6.8 For Each..Next语句 207
7.7 传递参数和返回值 207
7.8 在模块窗口中执行过程 209
7.9 DoCmd对象:执行宏操作 209
7.10 内置函数的操作 210
7.10.1 内置函数 210
7.10.2 使用对象浏览器简化函数的编写 212
7.11 常数的操作 214
7.11.1 符号常数的操作 214
7.11.2 内部常数的操作 215
7.12 VBE的工具 217
7.12.1 属性/方法列表 217
7.12.2 常数列表 217
7.12.3 快速信息 218
7.12.4 参数信息 219
7.12.5 自动完成关键字 220
7.12.6 定义 220
7.12.7 熟悉编码环境 220
7.12.8 “工程”窗口 222
7.12.9 “属性”窗口 223
7.12.10 “视图Microsoft Access”工具 223
7.12.11 查找和替换 223
7.12.12 帮助 224
7.12.13 “代码”窗口的拆分 225
7.12.14 使用书签保存位置信息 227
7.13 自定义VBE 227
7.13.1 代码选项:“编辑器”选项卡 228
7.13.2 代码的颜色、字体和字体大小:“编辑器格式”选项卡 228
7.13.3 通用选项:“通用”选项卡 228
7.13.4 可连接选项:“可连接”选项卡 229
7.14 小结 231
第8章 对象、属性、方法和事件 232
8.1 理解Access的对象模型 232
8.1.1 Application对象 232
8.1.2 Forms集合 233
8.1.3 Reports集合 233
8.1.4 DataAccessPages集合 234
8.1.5 Modules集合 234
8.1.6 CurrentProject对象 234
8.1.7 CurrentData对象 235
8.1.8 CodeProject对象 235
8.1.9 CodeData对象 235
8.1.10 Screen对象 235
8.1.11 DoCmd对象 236
8.2 理解对象、属性、事件和方法 236
8.2.1 什么是对象 236
8.2.2 什么是属性 236
8.2.3 什么是事件 239
8.2.4 什么是方法 240
8.3 使用对象浏览器熟悉Access的对象 242
8.3.1 对象浏览器的使用方式 242
8.3.2 代码模板粘贴到过程中 243
8.4 对象的引用 244
8.5 属性和方法 244
8.6 对象变量的声明和赋值 246
8.6.1 对象变量和普通变量 246
8.6.2 通用对象变量和特殊对象变量 247
8.6.3 对象变量的清除 247
8.7 对象与集合的区别 248
8.7.1 操作单个对象 248
8.7.2 操作对象集合 248
8.8 对象传递给子程序和函数 249
8.9 确定控件的类型 249
8.10 引用对象的特殊属性 251
8.11 小结 254
第9章 高级窗体技术 255
9.1 本章的重要性 255
9.2 窗体事件及应用 255
9.2.1 Current事件 255
9.2.2 BeforeInsert事件 256
9.2.3 AfterInsert事件 256
9.2.4 BeforeUpdate事件 256
9.2.5 AfterUpdate事件 258
9.2.6 Dirty事件 258
9.2.7 Delete事件 258
9.2.8 BeforeDelConfirm事件 258
9.2.9 AfterDelConfirm事件 259
9.2.10 Open事件 259
9.2.11 Load事件 259
9.2.12 Resize事件 259
9.2.13 Unload事件 260
9.2.14 Close事件 260
9.2.15 Activate事件 261
9.2.16 Deactivate事件 261
9.2.17 Gotfocus事件 261
9.2.18 LostFocus事件 261
9.2.19 Click事件 262
9.2.20 DblClick事件 262
9.2.21 MouseDown 262
9.2.22 MouseMove事件 262
9.2.23 MouseUp事件 262
9.2.24 KeyDown事件 262
9.2.25 KeyUp事件 263
9.2.26 KeyPress事件 263
9.2.27 Error事件 263
9.2.28 Filter事件 263
9.2.29 ApplyFilter事件 263
9.2.30 Timer事件 263
9.2.31 窗体事件的顺序 264
9.3 节和控件事件及应用 265
9.3.1 BeforeUpdate事件 265
9.3.2 AfterUpdate事件 266
9.3.3 Updated事件 266
9.3.4 Change事件 266
9.3.5 NotInList事件 266
9.3.6 Enter事件 267
9.3.7 Exit事件 268
9.3.8 GotFocus事件 268
9.3.9 LostFocus事件 268
9.3.10 Click事件 268
9.3.11 DblClick事件 269
9.3.12 MouseDown事件 270
9.3.13 MouseMove事件 270
9.3.14 MouseUp事件 270
9.3.15 KeyDown事件 270
9.3.16 KeyUp事件 270
9.3.17 KeyPress事件 270
9.3.18 控件事件的顺序 270
9.4 引用Me 271
9.5 可创建的窗体类型及应用 272
9.5.1 单一窗体:一次只看一个记录 272
9.5.2 连续窗体:一次查看多个记录 272
9.5.3 多页窗体:一屏无法显示所有项目的窗体 274
9.5.4 选项卡窗体:充分利用屏幕空间 276
9.5.5 切换面板窗体:控制应用程序 278
9.5.6 初始屏幕窗体:通向应用程序的专业途径 278
9.5.7 对话框窗体:收集信息 279
9.6 使用内建对话框 279
9.6.1 消息框 279
9.6.2 输入框 282
9.6.3 通用对话框 282
9.7 对窗体添加自定义菜单、工具栏和快捷菜单 282
9.8 利用内置窗体筛选功能 287
9.9 包含其他应用程序的对象:链接与嵌入 288
9.9.1 绑定OLE对象 288
9.9.2 未绑定OLE对象 289
9.10 OpenArgs属性 290
9.11 转换窗体记录源 290
9.12 增强组合框和列表框技术 293
9.12.1 处理NotInList事件 293
9.12.2 利用弹出式窗体 294
9.12.3 用Callback函数修改组合框或列表框内容 295
9.12.4 处理列表框中的多重选择 298
9.13 强大的子窗体技术 299
9.14 窗体与原始记录集的同步 300
9.15 创建自定义属性和方法 300
9.15.1 创建自定义属性 301
9.15.2 建立自定义方法 304
9.15.3 启动窗体的用途 305
9.15.4 建立初始屏幕 305
9.16 小结 306
第10章 高级报表技术 307
10.1 本章的重要性 307
10.2 报表事件及其应用 307
10.2.1 Open事件 307
10.2.2 Close事件 308
10.2.3 Activate事件 308
10.2.4 Deactivate事件 309
10.2.5 NoData事件 309
10.2.6 Page事件 309
10.2.7 Error事件 310
10.3 报表事件的顺序 310
10.4 报表节事件及其应用 310
10.4.1 Format事件 311
10.4.2 Print事件 312
10.4.3 Retreat事件 314
10.4.4 节事件的顺序 314
10.5 报表的特殊属性 314
10.5.1 MoveLayout 314
10.5.2 NextRecord 315
10.5.3 PrintSection 315
10.5.4 MoveLayout、NextRecord和PrintSection的相互作用 315
10.5.5 FormatCount 315
10.5.6 PrintCount 316
10.5.7 HasContinued 316
10.5.8 WillContinue 316
10.6 报表事件和属性的实际应用 316
10.6.1 改变报表的记录来源 316
10.6.2 用同一个报表显示汇总数据、明细数据或两者都显示 318
10.6.3 打印多份标签 320
10.6.4 确定标签打印位置 321
10.6.5 从交叉表查询建立报表 322
10.6.6 在页面页眉上打印第一项和最后一项 329
10.6.7 建立多细节交叉表报表 331
10.7 小结 334
第11章 高级查询技术 335
11.1 操作查询 335
11.1.1 更新查询 336
11.1.2 删除查询 337
11.1.3 追加查询 339
11.1.4 生成表查询 341
11.1.5 操作查询的特别注意事项 343
11.1.6 操作查询与使用代码处理记录的对比 343
11.2 查询的特殊属性 344
11.2.1 唯一值 345
11.2.2 唯一的记录 345
11.2.3 上限值 345
11.3 优化查询 348
11.3.1 了解查询编译过程 348
11.3.2 分析查询性能 349
11.3.3 提高查询性能的方法 349
11.3.4 Rushmore技术 350
11.4 交叉表查询 351
11.4.1 使用“交叉表查询向导”建立交叉表查询 351
11.4.2 不使用“交叉表查询向导”创建交叉表查询 354
11.4.3 创建固定的列标题 356
11.4.4 交叉表查询的重要注意事项 357
11.5 外部联接 357
11.6 自联接 359
11.7 了解SQL 360
11.7.1 什么是SQL?它从何而来 360
11.7.2 需要了解的SQL内容 360
11.7.3 应用知识 363
11.8 联合查询 365
11.9 传递查询 366
11.10 NullS的传播和查询结果 367
11.11 子查询 368
11.12 函数的结果作为查询的准则 369
11.13 从窗体中传递参数查询值 371
11.13.1 存档付款 372
11.13.2 显示所有付款 374
11.13.3 创建State表 374
11.14 小结 375
第12章 ADO、DAO及其重要性 376
12.1 了解DAO 376
12.2 比较ADO和DAO 376
12.3 ADO模型 377
12.3.1 Connection对象 377
12.3.2 Recordset对象 378
12.3.3 Command对象 380
12.4 ADO记录集类型 381
12.4.1 CursorType参数 382
12.4.2 LockType参数 383
12.4.3 Options参数 384
12.5 使用ADO记录集属性及方法 385
12.5.1 移动记录的方法 385
12.5.2 检测记录集的边界 386
12.5.3 统计记录集中的记录数目 387
12.5.4 排序、筛选和查找记录 389
12.5.5 AbsolutePosition属性 392
12.5.6 Bookmark属性 392
12.5.7 运行参数查询 393
12.6 使用ADO代码修改表数据 394
12.6.1 一次改变一个记录数据 394
12.6.2 批量更改 396
12.6.3 删除现有的记录 396
12.6.4 添加新记录 397
12.7 使用ADO代码创建和修改数据库对象 398
12.7.1 使用代码添加表 398
12.7.2 使用代码删除表 400
12.7.3 使用代码建立关系 400
12.7.4 使用代码创建查询 401
12.8 DAO模型 402
12.8.1 Workspaces集合 402
12.8.2 Users集合 403
12.8.3 Groups集合 403
12.8.4 Databases集合 403
12.8.5 TableDefs集合 404
12.8.6 Indexes集合 404
12.8.7 QueryDefs集合 404
12.8.8 Fields集合 405
12.8.9 Parameters集合 406
12.8.10 Recordsets集合 406
12.8.11 Relations集合 407
12.8.12 Containers集合 407
12.8.13 Documents集合 408
12.8.14 Properties集合 408
12.8.15 Errors集合 409
12.9 DBEngine对象 409
12.10 使用CurrentDB()函数 410
12.11 DAO记录集类型 410
12.11.1 动态集 410
12.11.2 数据快照 411
12.11.3 表 411
12.12 选取可用的DAO记录集对象类型 411
12.13 使用DAO Recordset的属性和方法 411
12.13.1 创建Recordset变量 412
12.13.2 使用参数打开记录集 413
12.13.3 检查移动记录的方法 414
12.13.4 检测记录集的边界 415
12.13.5 统计记录集中的记录数目 416
12.13.6 排序、筛选和查找记录 417
12.13.7 使用AbsolutePosition属性 420
12.13.8 使用Bookmark属性 420
12.13.9 使用RecordsetClone属性 421
12.13.10 运行Parameter查询 422
12.14 使用DAO代码修改表数据 422
12.14.1 一次改变一个记录中的记录数据 422
12.14.2 批量更改 423
12.14.3 删除现有的记录 424
12.14.4 添加新记录 424
12.14.5 使用LastModified属性 425
12.15 使用DAO代码创建和修改数据库对象 426
12.15.1 使用代码添加表 426
12.15.2 使用代码删除表 427
12.15.3 使用代码建立关系 428
12.15.4 使用代码创建查询 428
12.16 使用DAO容器集合 429
12.17 小结 433
第二部分 解决问题 437
第13章 调试:开发成功的关键 437
13.1 避免错误 437
13.1.1 Option Explicit 438
13.1.2 强制类型 438
13.1.3 命名规范 438
13.1.4 变量的作用范围 438
13.1.5 错误发生 438
13.2 立即窗口的应用 438
13.2.1 测试变量和属性值 439
13.2.2 设置变量和属性的值 440
13.2.3 清空立即窗口 441
13.2.4 使用内置函数 442
13.2.5 执行子程序、函数和方法 442
13.2.6 在运行时打印到立即窗口 442
13.3 调用调试程序 443
13.4 用断点排除故障 444
13.5 单步运行代码 445
13.5.1 逐语句 446
13.5.2 运行到下一个断点 448
13.5.3 逐过程 449
13.5.4 跳出 450
13.6 设置下一条执行语句 450
13.7 使用“调用”窗口 451
13.8 使用本地窗口 452
13.9 使用监视表达式 452
13.9.1 使用“自动显示数据提示” 453
13.9.2 使用“快速监视” 453
13.9.3 添加监视表达式 454
13.9.4 编辑监视表达式 455
13.9.5 表达式值为真时中断 455
13.9.6 表达式值改变时中断 456
13.10 出现运行阶段错误后继续运行 457
13.11 在立即窗口查看错误 458
13.12 小结 459
第14章 错误处理:处理不可避免的错误 460
14.1 本章的重要性 460
14.2 实现错误处理 460
14.3 使用错误事件 462
14.4 使用On Error语句 463
14.5 使用Resume语句 465
14.5.1 Resume语句 465
14.5.2 Resume Next语句 467
14.5.3 Resume<LineLabel>语句 467
14.6 清除错误 468
14.7 检查级联错误影响 468
14.8 使用Err对象 469
14.9 触发错误 470
14.9.1 有目的地产生错误 470
14.9.2 创建用户自定义错误 470
14.10 使用Errors集合 471
14.11 创建通用错误处理程序 472
14.11.1 记录错误 475
14.11.2 对错误采取适当的响应 477
14.11.3 创建错误窗体 480
14.11.4 打印错误窗体 483
14.12 防止调用自己的错误处理 483
14.13 小结 485
第15章 优化应用程序 486
15.1 本章的重要性 486
15.2 优化简介 486
15.3 修改硬件和软件的配置 487
15.3.1 硬件升级:多多益善 487
15.3.2 改变Access的软件设置 489
15.4 Jet4.0改进性能的方式 490
15.5 用性能分析器确定问题范围 491
15.6 设计表以优化性能 491
15.6.1 规范化的原因 492
15.6.2 规范化的缺陷 492
15.6.3 索引 493
15.6.4 选择正确的数据类型 493
15.7 设计查询以优化性能 493
15.8 改变编码以改进性能 494
15.8.1 删除变体和用最小的数据类型 494
15.8.2 使用特定的对象类型 494
15.8.3 使用内联代码 495
15.8.4 使用Not触发布尔变量 495
15.8.5 利用内置集合 496
15.8.6 应用长度函数 496
15.8.7 用True和Fale代替0 496
15.8.8 使用事务 497
15.8.9 删除无用的Dim和Declare语句 497
15.8.10 删除无用的代码 497
15.8.11 使用变量引用属性、控件和数据访问对象 498
15.8.12 使用With....End With 498
15.8.13 使用Me关键字 498
15.8.14 尽可能使用字符串函数 499
15.8.15 使用动态数组 499
15.8.16 尽可能使用常数 499
15.8.17 使用书签 499
15.8.18 设置对象变量等于Nothing 500
15.8.19 用操作查询代替循环记录集 500
15.8.20 用编译的模块交付应用程序 501
15.8.21 保持编译状态 501
15.8.22 作为MDE分发应用程序 501
15.8.23 组织模块 502
15.9 设计窗体和报表以改进性能 502
15.9.1 设计窗体 502
15.9.2 设计报表 503
15.10 小结 504
第三部分 开发多用户和企业应用程序 507
第16章 开发Access应用程序的策略 507
16.1 本章的重要性 507
16.2 数据库划分成表和其他对象 507
16.3 基于查询或嵌入式SQL语句的窗体和报表 509
16.4 Access运行引擎 510
16.4.1 MOD的特征 510
16.4.2 Access标准版本与运行版本的区别 511
16.4.3 准备发行应用程序的步骤 512
16.4.4 Access运行引擎概述 514
16.5 EXE与Access数据库:这意味着什么 515
16.6 数据库安全的重要性 515
16.7 Access作为前端 516
16.7.1 转换到客户/服务器时的考虑问题 516
16.7.2 客户/服务器技术的优缺点 517
16.7.3 Access作为前端的选项 518
16.7.4 迁移到客户/服务器环境的考虑问题 518
16.8 小结 519
第17章 开发多用户应用程序 520
17.1 开发应用程序的多用户问题考虑 520
17.1.1 多用户设计策略 520
17.1.2 安装应用程序的策略 521
17.1.3 链接外部数据的基础知识 522
17.2 Access的锁定机制 524
17.3 锁定和更新策略 525
17.3.1 默认记录锁定 526
17.3.2 记录级锁定 526
17.3.3 默认打开模式 527
17.3.4 更新重试次数 527
17.3.5 ODBC刷新间隔 527
17.3.6 刷新间隔 528
17.3.7 更新重试间隔 528
17.3.8 刷新与重新查询数据的对比 529
17.4 窗体锁定策略 529
17.4.1 无锁定 529
17.4.2 所有记录 529
17.4.3 编辑记录 530
17.5 记录集锁定 531
17.5.1 保守式锁定 531
17.5.2 开放式锁定 533
17.6 有效处理锁定冲突 535
17.6.1 保守式锁定的错误 535
17.6.2 保守式锁定冲突的编码 536
17.6.3 开放式锁定时的错误 539
17.6.4 开放式锁定冲突的编码 539
17.7 测试记录的锁定状态 542
17.8 用代码刷新或重新查询 543
17.9 理解LDB文件 544
17.10 用户名单 544
17.11 创建自定义计数器 545
17.12 使用非绑定窗体 545
17.13 用同步复制改进性能 546
17.14 小结 547
第18章 使用外部数据 548
18.1 本章的重要性 548
18.2 导入、链接和打开的时机和原因 549
18.2.1 选择选项 549
18.2.2 查看支持的文件格式 550
18.3 导入外部数据 551
18.3.1 使用用户界面 551
18.3.2 使用代码 552
18.4 创建到外部数据的链接 554
18.4.1 使用用户界面 554
18.4.2 使用代码 558
18.5 打开外部表 561
18.5.1 提供连接信息 562
18.5.2 打开表 562
18.6 理解Windows注册表设置 563
18.7 使用Jet OLED:Link Provider String 564
18.8 使用密码 564
18.9 更新和删除链接 566
18.9.1 更新已经移动的链接 566
18.9.2 删除链接 567
18.10 特殊考虑 567
18.10.1 dBase 568
18.10.2 文本数据 568
18.11 故障排除 569
18.11.1 连接问题 569
18.11.2 临时空间 569
18.12 性能考虑与链接 569
18.13 使用HTML文档 569
18.13.1 用“数据库拆分器”拆分表 572
18.13.2 更新链接 572
18.14 小结 576
第19章 客户/服务器技术 577
19.1 理解客户/服务器模型 577
19.2 确定是否用客户/服务器模型 578
19.2.1 处理大量数据 578
19.2.2 处理大量并发用户 579
19.2.3 需要更快的性能 579
19.2.4 处理增加的网张通信量 580
19.2.5 实现备份和还原 580
19.2.6 安全性重点 581
19.2.7 在多个前端工具之间共享数据 581
19.2.8 理解全部意义 581
19.3 Access在应用程序设计模型中的作用 582
19.3.1 Access为前端和MDB文件为后端 582
19.3.2 前端用MDB文件,用链接同后端通信 583
19.3.3 前端用SQL传递查询同后端通信 584
19.3.4 Microsoft Access数据工程做前端直接与后端通信 584
19.4 客户/服务器术语 584
19.5 升迁的考虑问题 585
19.5.1 索引 587
19.5.2 自动编号字段 587
19.5.3 默认值 588
19.5.4 有效性验证规则 588
19.5.5 关系 588
19.5.6 安全性 588
19.5.7 表和字段的名称 588
19.5.8 保留字 589
19.5.9 区分大小写 589
19.5.10 属性 589
19.5.11 Visual Basic代码 589
19.6 预先准备升迁 589
19.7 使用升迁向导 589
19.8 定义ODBC数据源 593
19.9 连接到数据库服务器 597
19.10 使用链接表 598
19.10.1 通过用户界面链接外部表 598
19.10.2 用代码链接外部表 600
19.10.3 链接到视图而不是表 601
19.11 使用传递查询 605
19.11.1 使用用户界面在MDB文件中创建传递查询 605
19.11.2 用代码执行传递查询 606
19.12 执行和创建存储过程 607
19.13 用Microsoft Access数据工程访问客户/服务器数据 610
19.13.1 创建ADP 610
19.13.2 使用SQL Server表 613
19.13.3 使用SQL Server视图 614
19.13.4 使用数据库图表 615
19.13.5 使用存储过程 617
19.13.6 创建并使用窗体、报表、宏和模块 618
19.13.7 探索ADP的其他特性 618
19.14 小结 618
第20章 客户/服务器方案 619
20.1 本章的重要性 619
20.2 选择最好的记录集类型 619
20.2.1 CursorType类型 619
20.2.2 LockType属性 620
20.2.3 Open方法的Options参数 620
20.3 使用传递查询和存储过程 621
20.4 使用ADP 621
20.5 优化数据处理 622
20.6 优化查询和窗体 622
20.6.1 优化查询 622
20.6.2 优化窗体 622
20.7 小结 627
第21章 运行的客户/服务器应用程序 628
21.1 本章的重要性 628
21.2 用链接表创建客户/服务器应用程序 628
21.2.1 链接到包含在SQL Server数据库中的表 629
21.2.2 生成Customer窗体 631
21.3 用ADP创建客户/服务器应用程序 647
21.4 小结 655
第22章 事务处理 657
22.1 本章的重要性 657
22.2 对优越性的理解 658
22.3 修改默认状态 659
22.4 实现显式的事务处理 660
22.5 事务处理问题 662
22.5.1 认识工作空间中发生的事务 662
22.5.2 确保数据源支持事务 662
22.5.3 嵌套事务 666
22.5.4 忽略显式提交事务 666
22.5.5 查看可用内存 666
22.5.6 结合窗体和事务 667
22.6 在多用户环境中使用事务处理 667
22.7 在客户/服务器环境中使用事务处理 672
22.7.1 隐含事务 672
22.7.2 显式事务 672
22.7.3 锁定的局限性 674
22.7.4 特定服务器事务命令的负面作用 674
22.8 小结 676
第23章 同步复制简化工作 677
23.1 本章的重要性 677
23.2 同步复制的使用 677
23.2.1 多个办公室之间共享数据 678
23.2.2 分散用户之间共享数据 678
23.2.3 减少网络负荷 678
23.2.4 分布的应用程序更新 678
23.2.5 备份应用程序中的数据 679
23.3 同步复制的局限性 679
23.4 同步复制的实现 679
23.4.1 Access用户界面 679
23.4.2 “我的公文包”同步复制 680
23.4.3 同步复制管理器 680
23.4.4 ADO代码 680
23.4.5 支持使用ADO代码进行同步复制的程序 680
23.5 同步复制的整体结构:同步复制的过程 680
23.5.1 跟踪层 681
23.5.2 Microsoft同步复制管理器 681
23.5.3 同步器 681
23.5.4 文件系统传输 682
23.5.5 公文包协调器 682
23.5.6 注册表条目 682
23.6 同步复制的拓扑结构 683
23.6.1 星形拓扑结构 683
23.6.2 环形拓扑结构 684
23.6.3 完全连接的拓扑结构 684
23.6.4 线型拓扑结构 684
23.6.5 混合型拓扑结构 684
23.7 同步复制对数据库的改变 685
23.7.1 添加到每个同步复制表中的字段 685
23.7.2 添加到数据库的系统表 685
23.7.3 为数据库对象添加的属性 685
23.7.4 对连续的“自动编号”字段的改变 686
23.7.5 对数据库大小所作的改变 686
23.8 使数据库具有可同步复制性 686
23.8.1 为可同步复制数据库提供Access用户界面 686
23.8.2 为可同步复制数据库提供Windows“我的公文包” 688
23.9 防止同步复制某些对象 688
23.10 创建附加副本 689
23.10.1 使用Access用户界面创建附加副本 690
23.10.2 使用Windows“我的公文包”创建附加副本 690
23.11 同步副本 691
23.11.1 使用Access用户界面同步数据库 691
23.11.2 使用Windows“我的公文包”同步数据库 692
23.12 解决同步复制冲突 692
23.13 使用同步复制管理器 693
23.13.1 第一次运行同步复制管理器 694
23.13.2 使用Replication Manager同步复制数据库 699
23.13.3 使用RepLication Manager创建副本 701
23.13.4 使用Replication Manager同步副本 702
23.13.5 查看同步历史 703
23.13.6 使用同步属性 705
23.14 使用部分同步复制 705
23.15 使用代码进行同步复制 708
23.15.1 使用代码同步复制数据库 708
23.15.2 将某个对象标记为本地的 709
23.15.3 使用代码创建副本 709
23.15.4 使用代码创建部分副本 710
23.15.5 使用代码同步数据库 711
23.15.6 使用代码处理冲突 711
23.16 小结 712
第四部分 高级编程 715
第24章 高级VBA技术 715
24.1 本章的重要性 715
24.2 用户定义类型的定义及使用原因 715
24.2.1 声明用户定义类型 716
24.2.2 创建Type变量 716
24.2.3 将窗体中的记录信息存储在Type变量中 716
24.2.4 检索Type变量元素中的信息 717
24.3 使用常量 717
24.3.1 定义自己的常量 718
24.3.2 内部变量的使用 719
24.4 使用数组 720
24.4.1 声明和使用固定的数组 721
24.4.2 声明和使用动态数组 722
24.4.3 将数组作为参数传递 723
24.5 高级函数技术 724
24.5.1 引用传递和值传递 724
24.5.2 可选参数:灵活性内置在函数中 726
24.5.3 命名参数:消除计算逗号的需要 728
24.6 使用Empty和Null 728
24.6.1 Empty的使用 728
24.6.2 Null的使用 729
24.7 创建和使用自定义集合 733
24.7.1 创建集合 734
24.7.2 将条目添加到集合中 734
24.7.3 访问集合中的条目 734
24.7.4 删除集合中的条目 735
24.7.5 遍历集合元素 735
24.8 理解和有效使用编译选项 735
24.8.1 请求时编译 736
24.9 导入和导出代码模块 736
24.10 工程属性的使用 737
24.10.1 Null、DoCmd对象和内部常量实例 738
24.10.2 使用类型结构的例子 738
24.11 小结 740
第25章 使用ActiveX控件 741
25.1 介绍ActiveX控件 741
25.2 在Access 2000中合并ActiveX控件 742
25.2.1 安装ActiveX控件 742
25.2.2 注册ActiveX控件 742
25.2.3 向窗体中添加ActiveX控件 744
25.2.4 理解和管理Access应用程序中引用的控件 746
25.3 在设计阶段设置ActiveX控件的属性 747
25.4 ActiveX控件的编码事件 747
25.5 使用Calender控件 749
25.5.1 Calender控件属性 749
25.5.2 Calender控件的方法 751
25.6 使用UpDown控件 752
25.6.1 使用StatusBar控件 753
25.6.2 使用Common Dialog控件 755
25.6.3 使用Rich Textbox控件 758
25.6.4 使用TabStrip控件 760
25.7 使用ImageList控件 762
25.8 许可证和分布问题 763
25.9 小结 765
第26章 自动功能:与其他应用程序通信 766
26.1 本章的重要性 766
26.2 定义自动功能术语 767
26.3 声明对象变量以引用应用程序 767
26.4 创建自动功能对象 768
26.5 操作自动功能对象 770
26.5.1 设置和查询属性 770
26.5.2 执行方法 770
26.6 在Access中控制Excel 770
26.7 关闭Excel自动功能对象 774
26.8 在Access中创建图表 774
26.9 在Access中控制Word 779
26.10 在Access中控制PowerPoint 780
27.11 在其他应用程序中控制Access 784
26.12 小结 792
第27章 深入Windows API的功能 793
27.1 本章的重要性 793
27.2 向编译器声明外部函数 793
27.2.1 按引用传递和按值传递 794
27.2.2 传递字符串参数 795
27.2.3 为函数取别名 796
27.2.4 函数调用和非法字符 796
27.2.5 有重复名称的DLL函数 796
27.2.6 删去ANSI所需的A 797
27.2.7 Access库或模块中的唯一过程名 797
27.2.8 调用序数引用的函数 798
27.3 使用常数和类型 798
27.3.1 使用常数 798
27.3.2 使用类型 798
27.3.3 使用Windows API Text Viewer 800
27.3.4 加载文本文件 801
27.3.5 加载数据库文件 802
27.3.6 粘贴API声明、类型和常数 802
27.4 调用DLL函数:重要的问题 804
27.5 16位和32位API的区别 805
27.6 使用API函数 805
27.7 获得操作环境的信息 805
27.8 确定驱动器类型和可用的驱动器空间 811
27.9 小结 814
第28章 利用类模块的功能 815
28.1 类模块的好处 815
28.2 面向对象介绍 815
28.3 创建和使用类模块 816
28.3.1 添加属性 816
28.3.2 添加方法 817
28.3.3 实例化和使用类 817
28.3.4 Property Let和Property Get:正确添加属性 818
28.4 创建多个类实例 819
28.5 Initialize事件和Terminate事件 820
28.5.1 Initialize事件 820
28.5.2 Terminate事件 820
28.6 使用自定义集合 820
28.6.1 创建集合 821
28.6.2 向集合中添加数据项 821
28.6.3 对自定义集合中的元素循环 822
28.6.4 引用集合中的数据项 822
28.6.5 从集合中删除数据项 823
28.6.6 文件信息类 823
28.6.7 使用集合操作文件信息类的多个实例 825
28.6.8 数据访问类 826
28.6.9 系统信息类 833
28.6.10 自定义错误处理程序类 836
28.7 小结 841
第29章 创建自己的库 842
29.1 本章的重要性 842
29.2 数据库到库的准备工作 842
29.2.1 构造优化性能的代码模块 843
29.2.2 编写运行的库代码 843
29.2.3 编译库 844
29.3 创建引用 844
29.3.1 创建库引用 844
29.3.2 创建运行阶段的引用 844
29.3.3 运行阶段调用库中的函数 846
29.3.4 创建显式引用 847
29.3.5 使用VBA代码创建引用 850
29.4 调试库数据库 851
29.5 保护Access库 852
29.6 小结 855
第30章 使用生成器、向导和菜单加载项 856
30.1 本章的重要性 856
30.2 使用生成器 856
30.2.1 设计原则 857
30.2.2 创建生成器 857
30.2.3 编写生成器函数 857
30.2.4 设计生成器窗体 860
30.2.5 注册生成器 861
30.2.6 自动创建注册表条目 865
30.3 使用向导 867
30.3.1 设计原则 867
30.3.2 创建向导 867
30.3.3 准备使用向导 872
30.4 使用菜单加载项 872
30.4.1 设计原则 873
30.4.2 创建菜单加载项 873
30.5 小结 879
第31章 Access和Internet 880
31.1 Access和Internet的新特征 880
31.2 数据库对象保存为HTML 880
31.2.1 将表数据保存为HTML 881
31.2.2 查询结果保存为HTML 881
31.2.3 窗体保存为HTML 882
31.2.4 报表保存为HTML 883
31.3 链接HTML文件 884
31.4 导入HTML文件 885
31.5 确定HTML格式是静态还是动态 887
31.6 使用.ASP文件 887
31.7 使用HTX/IDC文件 888
31.8 测试ASP和HTX/IDC文件 889
31.9 使用HTML模块 890
31.10 向FTP或HTTP服务器发送数据 890
31.10.1 在FTP和HTTP服务器上导入和链接数据 891
31.10.2 向FTP服务器发送对象 892
31.11 利用超级链接 892
31.11.1 在表中保存超级链接 892
31.11.2 将超级链接放置到窗体和报表上 892
31.12 Web工具栏 892
31.13 在Internet上实现同步复制 894
31.14 小结 894
第32章 使用数据访问页 895
32.1 了解数据访问页 895
32.2 创建数据访问页 895
32.2.1 使用自动创建数据页特征创建数据访问页 896
32.2.2 使用向导创建数据访问页 897
32.2.3 从现有的Web页创建数据访问页 900
32.2.4 从头开始创建数据访问页 901
32.3 修改数据访问页的重要属性 904
32.3.1 DataEntry属性 904
32.3.2 MaxRecords属性 905
32.3.3 RecordsetType属性 905
32.3.4 UseRemoteProvider属性 905
32.4 修改记录浏览控件属性 906
32.4.1 RecordSource属性 906
32.4.2 ShowNextButton、ShowPrevButton、ShowFirst 907
32.4.3 ShowNewButton属性 907
32.4.4 ShowDelButton属性 907
32.4.5 ShowSaveButton属性 907
32.4.6 ShowUndoButton属性 907
32.4.7 ShowSortAscendingButton和ShowDescendingButton属性 907
32.4.8 ShowToggleFilterButton属性 908
32.5 创建分组的数据访问页 908
32.6 使用VbScript增强数据访问页 911
32.6.1 重要的数据访问页事件 913
32.6.2 VBScript与VBA的比较 914
32.6.3 VBScript与JavaScript的比较 916
32.7 小结 916
第五部分 修饰应用程序 919
第33章 容易实现的数据库安全性 919
33.1 本章的重要性 919
33.2 实现共享级的安全性:建立数据库密码 919
33.3 数据库加密 921
33.4 建立用户级安全性 921
33.4.1 步骤1:创建工作组 922
33.4.2 步骤2:更改“管理员”用户的密码 926
33.4.3 步骤3:创建管理级的用户 927
33.4.4 步骤4:使管理级的用户成为“管理员”组的成员 928
33.4.5 步骤5:退出Access,并以系统管理员的身份登录 929
33.4.6 步骤6:从“管理员”组中删除“管理员”用户 930
33.4.7 步骤7:为系统管理员指定密码 930
33.4.8 步骤8:打开想保护的数据库 931
33.4.9 步骤9:运行“安全机制向导” 931
33.4.10 步骤10:创建用户和组 936
33.4.11 步骤11:为用户和组指定权力 938
33.5 提供附加的安全级别:创建MDE 940
33.6 特殊问题 941
33.6.1 密码 941
33.6.2 安全性和链接表 942
33.6.3 所有者 942
33.6.4 打印安全性 943
33.7 小结 946
第34章 高级安全技术 947
34.1 本章的重要性 947
34.2 使用代码维护组 947
34.2.1 添加组 948
34.2.2 删除组 949
34.3 使用代码维护用户 951
34.3.1 添加用户 951
34.3.2 把用户分配到一个组中 952
34.3.3 从组中删除用户 954
34.3.4 删除用户 955
34.4 列出所有组和用户 957
34.4.1 列出所有组 957
34.4.2 列出所有用户 958
34.5 使用密码 959
34.5.1 为用户指定密码 960
34.5.2 列出未使用密码的用户 961
34.5.3 确保用户使用密码 963
34.6 使用代码指定和取消对对象的访问权限 964
34.7 使用代码给数据库加密 966
34.8 使用查询完成字段级的安全性 967
34.9 禁止用户和组创建对象 967
34.10 以另一个用户的身份登录完成未授权的任务 969
34.11 保护客户/服务器应用程序 969
34.12 安全性和复制 969
34.13 小结 970
第35章 应用程序文档管理 971
35.1 本章的重要性 971
35.2 准备说明应用程序 971
35.2.1 表的说明 972
35.2.2 查询的说明 972
35.2.3 窗体的说明 973
35.2.4 报表的说明 975
35.2.5 宏的说明 975
35.2.6 模块的说明 975
35.2.7 使用数据库属性说明整个数据库 976
35.3 使用数据库文档管理器 978
35.3.1 使用文档管理器选项 979
35.3.2 产生其他格式的文档 982
35.4 编写代码创建自己的文档资料 982
35.5 小结 984
第36章 维护应用程序 985
36.1 本章的重要性 985
36.2 压缩数据库 985
36.2.1 使用用户界面 986
36.2.2 使用快捷方式 988
36.2.3 当关闭数据库时 988
36.2.4 使用代码 988
36.3 小结 990
第37章 Microsoft Office Developer 991
37.1 分布应用程序简介 991
37.2 讨论MOD 991
37.2.1 Developer Application 992
37.2.2 Developer Tools 993
37.2.3 MOD组件的杂项 1006
37.3 小结 1018
第38章 使用Visual SourceSafe管理应用程序开发 1019
38.1 本章的重要性 1019
38.2 如何安装Visual SourceSafe 1019
38.3 使用Visual SourceSafe概述 1020
38.4 使用Visual SourceSafe管理工程的善后处理 1021
38.4.1 将数据库添加到Visual SourceSafe中 1021
38.4.2 从SourceSafe工程创建数据库 1025
38.4.3 Visual SourceSafe工程创建数据库 1026
38.4.4 签入和签出数据库对象 1027
38.4.5 获得最新版本 1028
38.4.6 将对象添加到Visual SourceSafe中 1029
38.4.7 刷新对象的状态 1029
38.5 权衡使用Visual SourceSafe 1029
38.5.1 显示模块之间的差别 1029
38.5.2 显示对象的历史 1030
38.5.3 还原为对象的以前版本 1031
38.6 Visual SourceSafe对Access行为的更改 1031
38.6.1 压缩命令 1031
38.6.2 打开数据库 1031
38.6.3 关闭数据库 1031
38.6.4 在设计视图中打开对象 1032
38.6.5 保存新对象,或者使用“另存为”保存现有对象 1032
38.6.6 重命名对象 1032
38.6.7 删除对象 1032
38.7 获得Visual SourceSafe的帮助 1033
38.8 了解Visual SourceSafe的限制 1033
38.9 小结 1034
第39章 分布应用程序 1035
39.1 本章的重要性 1035
39.2 Package and Deployment Wizard简介 1035
39.3 加载Package and Deployment Wizard 1036
39.4 分布应用程序用Access的完全版本运行 1036
39.5 使用Access的运行版本与完全版本 1037
39.5.1 隐藏“数据库”窗口 1038
39.5.2 隐藏设计视图 1038
39.5.3 不支持内置的工具栏 1038
39.5.4 不可用菜单项 1038
39.5.5 禁用的键 1038
39.6 准备让数据库在Access的运行版本下使用 1039
39.6.1 创建应用程序 1039
39.6.2 将自定义的帮助文件添加到应用程序中 1045
39.6.3 测试和调试应用程序 1045
39.6.4 使用/Runtime命令行参数运行和测试应用程序 1045
39.6.5 运行Package and Deployment Wizard 1046
39.6.6 配置应用程序 1053
39.6.7 分布应用程序 1056
39.7 讨论其他问题 1057
39.7.1 自动进行与表的链接处理 1057
39.7.2 采用同步复制技术有效地分布应用程序 1061
39.8 小结 1062
第六部分 附录 1065
附录A 表结构 1065
A.1 tblClients表 1065
A.2 tblCompanyInfo表 1074
A.3 tblEmployees表 1079
A.4 tblErrorLog表 1084
A.5 tblErros表 1087
A.6 tblExpenseCodes表 1089
A.7 tblPaymentMethods表 1089
A.8 tblPayments表 1091
A.9 tblProjects表 1094
A.10 tblTimeCardExpenses表 1099
A.11 tblTimeCardHours表 1103
A.12 tblTimeCards表 1107
A.13 tblWorkCodes表 1109
附录B 1111