目录 1
译者序 1
前言 1
第一部分 ActiveX数据对象和绑定控件 1
第1章 Visual Basic对企业级开发的支持 1
1.1 与Visual Basic 6数据相关的新特性 1
1.2 过渡到OLE DB和ADO 4
1.2.1 OLE DB 5
1.2.2 ActiveX数据对象 6
1.3 剖析Data Environment Designer和Data View窗口 7
1.4 采用ADO兼容的控件 11
1.5 绑定层次型FlexGrid到Recordset 13
1.6 利用Data Report Designer设计打印报表 14
1.7 利用Data Form Wizard自动化设计 16
1.8 绑定数据源和使用者 17
1.9 使用Visual Data Tools 18
1.10 掌握Microsoft SQL Server 20
第2章 理解OLE DB和Universal Data Access 22
2.1 数据接口 22
2.1.1 利用OLE DB自下而上重新设计 23
2.1.2 映射OLE DB接口到ADO 25
2.2 创建ADODB.Recordset 26
2.2.1 编码打开ADODB.Connection之上的ADODB.Recordset对象 27
2.2.2 从DataEnvironment对象打开ADODB.Recordset对象 28
2.2.3 绑定DataGrid控件到Command对象 31
2.2.4 使基于Command的Recordset成为可更新的 32
2.3 剖析顶层ADO的属性、方法和事件 33
2.3.1 Object Browser和ADO 33
2.3.2 ADODB Connection对象 34
2.3.3 ADODB.Command对象 45
2.3.4 ADODB.Recordset对象 51
2.4 分析特定提供者ADODB.Properties集合 60
2.4.1 Connection对象的Properties集合 61
2.4.2 Command对象的Properties集合 65
2.4.3 Recordset对象的Properties集合 66
第3章 从DAO和RDO过渡到ADO 68
3.1 比较ADO、DAO和RDO对象模型 68
3.1.1 ADO 2.0和DAO 3.5x 69
3.1.2 ADO 2.0和RDO 2.0 71
3.2 从DAO.Recordset到ADODB.Recordset对象 72
3.2.1 比较DAO.Recordset和ADODB..Recordset的属性 72
3.2.2 比较DAO.Recordset和ADODB.Recordset的方法 73
3.3 利用VBA代码处理ADODB.Recordset对象 74
3.3.1 直接创建Recordset 75
3.3.2 在Connection对象上打开Recordset 76
3.3.3 在Command对象上打开Recordset 77
3.3.4 为安全的数据库指定Jet Workgroup文件 78
3.3.5 表的批量更新 79
3.4 利用ADODB.Recordset的新特性 80
3.4.1 存储和打开文件型Recordset 80
3.4.2 用Variant值和数组来编辑和添加记录行 81
3.4.3 用Close和Open方法重用Connection和Recordset对象 82
3.5 采用ADODB.Recordset的Find方法 86
3.6 从rdoResultsets和ODBCDirect Recordset过渡到ADODB.Recordset 89
3.6.1 比较rdoResultset和ADODB.Recordset 89
的属性 89
3.6.3 比较rdoResultset和ADODB.Recordset的事件 90
3.7 理解层次型Recordset 90
3.6.2 比较rdoResultset和ADODB.Recordset的方法 90
3.7.1 用Data Environment Designer创建Relational Hierarchical Recordset 93
3.7.2 在层次型FlexGrid控件中显示层次型Recordset 95
3.7.3 用层次型Recordset取代Access的Form/Subform组合 96
第4章 使用ADO Data控件和绑定控件 98
4.1 创建带有用来显示和编辑数据的文本框的窗体 98
4.1.1 使用Data Form Wizard创建数据项窗体 98
4.1.2 向Data Environment Designer窗体中添加ADODC 103
4.2 剖析ADODC数据相关的属性和事件 107
4.2.1 ADODC的属性 107
4.2.2 ADODC的事件 109
4.3 介绍成批乐观更新 109
4.4 简单绑定数据使用者控件 110
4.4.1 设置DataFormat属性值 110
4.4.2 用代码对控件实现简单绑定 112
4.5 复杂绑定数据使用者控件 113
4.5.1 绑定DataGrid到DataEnvironment对象 113
4.5.2 从绑定DataList控件中选择条目 116
4.5.3 绑定DataList控件 119
第二部分 数据库和查询设计概念 123
第5章 优化关系数据库的设计 123
5.1 数据库系统分类 123
5.1.1 数据库术语 125
5.1.2 平面文件数据库 127
5.1.3 网络和层次数据库模型 127
5.1.4 关系数据库模型 128
5.1.5 关系数据库管理者类型 129
5.1.6 关系型SQL数据库管理系统 130
5.1.7 三层客户/服务器体系结构和商业规则 130
5.2 数据建模 132
5.1.8 Microsoft Access:混合的RDBMS 132
5.2.1 数据库图表 133
5.2.2 在数据库设计中使用建模工具 134
5.3 关系数据库的设计规则 134
5.3.1 组织实体类 135
5.3.2 规范化表数据 136
5.4 为提高性能和域完整性而建立索引表 140
5.4.1 表索引方法 141
5.4.2 选择建立索引的字段 142
5.5 数据仓库和OLTP数据分析 143
第6章 学习结构化查询语言 146
6.1 SQL基础回顾 147
6.1.1 SQL语句的成份 147
6.1.2 SQL与计算机程序语言的差异 148
6.1.3 ANSI SQL的类型 149
6.2 书写ANSI SQL语句 150
6.2.1 SQL语句的分类 151
6.2.2 SQL语法格式 152
6.2.3 一个简单的SQL SELECT语句的实用语法 153
6.2.4 利用可视化数据示例应用程序来浏览查询 154
6.2.5 SQL操作符和表达式 157
6.2.6 连接表 159
6.2.7 使用嵌套查询和子查询 166
6.2.8 联合查询 168
6.2.9 SQL汇总函数和GROUP BY及HAVING子句 169
6.3 比较Jet SQL方言和ANSI SQL-92 171
6.3.1 ANSI SQL保留字和Jet SQL关键字 171
6.3.2 ANSI SQL和Jet SQL间的数据类型 173
转换 173
7.1 用交叉表查询表示汇总数据 175
第7章 运行交叉表和动作查询 175
7.2 用TRANSFORM和PIVOT创建交叉表查询 178
7.2.1 用谓词IN创建固定列标题 180
7.2.2 创建分类交叉表查询 181
7.3 把交叉表查询作为DataEnvironment命令执行 181
7.4 定义动作查询 183
7.4.1 用VBA代码执行动作查询 184
7.4.2 VBA代码中动作查询的等价体 184
7.4.3 执行动作查询时维护引用一致性 185
7.5 使用SQL动作查询 185
7.5.1 用制表查询创建新表 185
7.5.2 向已存在的表中添加记录 186
7.5.3 更新表中数据值 187
7.5.4 从表中删除记录 187
第8章 用ODBC连接桌面数据源 188
8.1 理解ODBC API的结构 189
8.1.1 单层和多层ODBC驱动程序 190
8.1.2 ODBC API的一致性级别 190
8.1.3 ODBC SQL一致性级别 190
8.1.4 内置的ODBC标量函数 192
8.2 浏览ODBC初始化文件和注册表记录 193
8.2.1 三种DSN类型 193
8.2.2 Odbcinst.ini 194
8.2.3 Odbc.ini 196
8.2.4 ODBCINST.INI和ODBC.INI的注册表键值 197
8.2.5 连接组合和跟踪 197
8.3 为dBASE表创建和使用DSN 198
8.3.1 创建新的System DSN 199
8.3.2 通过Kagera连接到dBASE数据源 200
9.1 组织决策支持前端应用程序幕后的数据 203
第三部分 数据库前端应用程序设计介绍 203
第9章 设计一个决策支持前端应用程序 203
9.1.1 指定数据源 204
9.1.2 确定所需细节的层次 205
9.1.3 利用Rollup(累计)保证性能和数据一致性 206
9.2 设计查询策略 207
9.2.1 放弃Jet QueryDef对象 207
9.2.2 设计SQL累计查询 208
9.2.3 从Access导入QueryDef SQL语句 210
9.2.4 实现特定查询 214
9.3 设计用户界面 214
9.3.1 优化应用程序的易用性 214
9.3.2 确认Toolbar按钮的功能 218
9.4.1 获得和修改按钮的位图 219
9.4 创建和使用按钮栏和工具栏 219
9.4.2 添加代码以显示和隐藏窗体 220
9.5 由累计数据创建图表 220
9.5.1 创建Line Graph 221
9.5.2 制作Bar和Area Chart 223
9.5.3 显示Pie Chart 225
9.6 用MSFlexGrid控件来显示详细数据 226
第10章 利用数据绑定ActiveX控件 230
10.1 操作DataGrid和分层FlexGrid 230
10.1.1 定义DataGrid控件格式 231
10.1.2 DataGrid控件的特殊属性、方法和事件 234
10.1.3 定义MSFlexGrid和MSHFlexGrid控件的格式 237
10.2 创建和显示分层Recordset 243
10.2.1 用数据环境设计工具生成层式命令 243
10.2.2 在MSHFlexGrid中显示rsCustomerRecordset 245
10.2.3 用代码操作层次Recordset 247
10.3 用PICTUREBOX和图像控件保存和显示图像 249
10.3.1 用于索尼VISCA设备的VB视频播放系统 249
10.3.2 使用AVIT Research的LANC 254
ActiveX控件 254
10.3.3 捕获、显示和存储视频图片 254
10.3.4 为Adobe Premiere创建批捕获日志 255
第11章 图形化显示Crosstab查询所产生的汇总数据 257
11.1 组织一个基于Chart的决策支持应用程序 257
11.1.1 在单一应用程序中组合管理级别 258
11.1.2 开发一个图表的定义表格 259
11.1.3 创建测试应用程序的数据 261
11.2 为复杂决策支持应用程序确定导航方法 264
11.2.1 使用多文档界面 265
11.2.2 设计导航工具条 266
11.2.3 MDI父窗体的菜单结构 267
11.2.4 用代码来改变工具条按钮、MDI子窗体和图的大小 268
11.2.5 在设计状态下设置Graph的属性 269
11.2.6 实现前两个图表级别 271
11.2.7 为MDI子窗体增加详细网格 276
11.2.8 添加图和表的导航代码 281
11.2.9 打印和保存图和表 283
第12章 利用Report Designer和VBA代码创建报表 285
12.1 设计和打印一个简单的DataReport 285
12.1.1 首先设计一个半格式化的简单报表 286
12.1.2 调整大小、对齐和格式化数据控件 288
12.1.3 设置打印边界 288
12.2 对细节记录进行分组 289
12.2.1 为实现分组创建子Command 289
12.2.2 添加Group Header和Footer到报表 290
12.3.1 添加组Subtotal到Command层次 291
12.3 使用Command汇总进行Subtotal和GrandTotal 291
12.3.2 添加Product子汇总到Group Footer 292
12.3.3 在层次型FlexGrid中显示Subtotal汇总 294
12.3.4 为组汇总格式化MSHFlexGrid控件 295
12.3.5 添加报表GrandTotal 298
12.3.6 在Page Footer插入页号和日期 300
12.4 用行汇总实现Crossfooting报表 301
12.4.1 处理Crosstab查询结果集中的Null值 302
12.4.2 添加行汇总到DataReport 303
12.5 用RptFunction控件取代汇总值 304
12.6 输出DataReport到HTML和Text文件 306
12.7 用VBA代码实现打印 307
12.7.1 打印录像带标签 309
12.7.2 打印录像带目录 316
13.1 利用Chart事件 323
第四部分 数据存取和自动化的高级编程 323
第13章 从图表中追踪数据 323
13.1.1 用SeriesSelected事件选择一个MSHFlexGrid行 325
13.1.2 用PointSelected事件选择单个单元 326
13.2 从栈式区域图表显示单序列 327
13.3 在Drilldn.vbp项目中增加一个Drilldown饼图 330
13.3.1 选择一个Drilldown加载策略 330
13.3.2 在设计阶段设置饼图的属性 331
13.3.3 生成饼图数据 331
13.4 利用MouseDown和Double_Click事件激活Drilldown 333
13.5 用饼图选择追踪路径 335
13.6 用选定的Drilldown数据实例化一个MSHFlexGrid 338
第14章 通过Jet和VBA进行调度和设备控制 343
14.1 浏览Visual Basic节目单 344
14.1.2 打开录制和设备控制的窗体 346
14.1.1 使用键盘浏览功能 346
14.1.3 指定C波段卫星映射和IRD控制 347
14.2 使用WebTV的时间表数据库 348
14.3 比较大Recordset的DAO和ADO的性能 351
14.4 将项目从DAO升级到ADO 354
14.4.1 打开新的ADODB.Recordset对象 356
14.4.2 用Find代替复合的FindFirst和FindNext方法 357
14.5 利用Recordset填充定制的网格 359
14.6 开发Visual Basic 6PG项目的剩余部分 368
14.6.1 实时操作 368
14.6.2 打印带盒标签和磁带目录 369
第15章 编写本地Automation组件和ActiveXDLL 371
15.1 定义Automation组件的作用 371
15.2.1 进程内Automation组件 373
15.2 确定使用进程内组件还是进程外组件 373
15.2.2 进程外Automation组件 374
15.3 建立一个简单的Automation组件 374
15.3.1 将时间段选择组件升级为32位 375
15.3.2 将32位Period Selection窗体转换为Automation组件 376
15.3.3 调试Automation组件 382
15.3.4 Period Selection组件的错误处理 383
15.4 创建一个复杂的三层Automation组件 384
15.4.1 设计Product Grouping组件 384
15.4.2 给Product Grouping类加入一个Show方法 385
第16章 为数据库应用程序创建用户控件 387
16.1 使用DataRepeater控件仿制Access连续窗体 387
16.1.1 设计和编辑简单的用户控件 389
16.1.2 在ActiveX控件中增加DataRepeater控件 391
16.1.3 克服Recordset更新故障 393
16.2.2 使用ActiveX控件接口向导 395
16.2 使用向导生成Automation控件 395
16.2.1 设计可重用控件以节省窗体资源 395
16.2.3 在Customer Phone List中创建最终窗体 398
16.2.4 使用属性页向导增加属性页 400
16.3 浏览BindingCollection对象 402
16.3.1 BindingCollection、Binding和stdData-Format对象的属性、方法和事件 402
16.3.2 使用DataBinding属性将Binding-Collection加入到用户控件中 404
16.4 调试数据绑定ActiveX控件 405
第五部分 多用户与客户/服务器数据库前端 409
第17章 多用户Jet数据库的网络安全 409
17.1 理解拓扑网络结构与操作 410
17.1.1 依据范围分类的PC网络 410
17.1.2 域、工作组、服务器和工作站 413
17.2.1 网络驱动程序接口说明和网络适配卡驱动程序 414
17.2 网络硬件和操作协议 414
17.2.2 Windows NT中的网络协议栈 415
17.2.3 Windows 9x和Windows NT中的TCP/IP 416
17.2.4 TCP/IP上的NetBIOS、Windows Socket API以及远程访问 417
17.2.5 Hub、变换机、网桥、路由器和网关 418
17.2.6 数据存储冗余和备份系统 419
17.2.7 本章例子中使用的拓扑结构和协议 420
17.3 登录到服务器并加入工作组 422
17.4 在网络环境中维护数据库安全 427
17.4.1 网络授权、权限和帐户 427
17.4.2 网络管理员、操作者和用户 429
17.4.3 使用NTFS分区的文件权限 430
17.5 理解Jet安全系统 433
17.5.1 分配用户帐户并保证Jet数据库安全 433
17.5.2 使用Access 97 User Level Security Wizard 435
17.5.3 在Access早期版本中分配和撤销组和用户的访问权限 437
17.6 使用Visual Basic 6和DAO 3.5编程实现Jet安全特性 438
17.6.1 使用DAO 3.5浏览Users和Groups集合 439
17.6.2 使用Container和Document对象修改权限 441
17.7 OLE DB、ADO2.0与Jet安全 442
第18章 使用客户/服务器数据库 443
18.1 使用Microsoft SQL Server 444
18.1.1 SQL Server的网络特性 444
18.1.2 连接、线程和对称多处理 445
18.1.3 SQL Server 7.0 446
18.2 使用Access 97向导转换Nwind.mdb至SQL Server6.5 448
18.2.1 准备转换 449
18.2.2 使用Access 97转换向导 449
18.2.3 检验转换后的SQL Server 6.5数据库 453
18.2.4 使用ISQL-w运行测试查询 455
18.2.6 创建一个新的nwind数据库 456
18.2.5 将Jet表导入到SQL Server 7.0 456
18.2.7 使用数据转换服务导入表 458
18.2.8 使用SQL Server查询分析器测试nwind数据库 462
18.2.9 修改导入到SQL Server 7.0的表 463
18.2.10 修改表属性 463
18.2.11 增加表的索引 465
18.2.12 在Order-Details表中增加唯一的混合索引 466
18.3 在数据库图表中指定主键和关系 468
18.4 使用本地SQL Server提供者 471
18.5 连接Oracle 8数据库 476
18.6 使用Visual Basic 6的可视化数据工具 476
18.6.1 从Visual Basic中运行可视化数据工具 477
18.6.2 创建SQL Server视图 477
18.7 在VBA代码中实现客户/服务器连接 479
19.1 事务的定义和ACID测试 481
第19章 事务处理和块操作 481
19.1.1 Explicit与Implicit事务 482
19.1.2 连续性与事务孤立性级别 483
19.1.3 理解事务监视器的角色 484
19.2 使用ADO 2.x和VBA代码处理事务 485
19.2.1 事务指令的结构 485
19.2.2 Jet数据库的多表事务代码 487
19.2.3 在事务中使用Jet SQL 489
19.2.4 用Transact-SQL实现订单入口事务 491
19.3 在多个数据库中分布事务 494
19.3.1 两段式提交和分布式事务坐标 495
19.3.2 复制 497
19.3.3 消息与事务 498
19.4.2 断开连接的Recordsets 499
19.4.3 使用绑定控件测试块更新 499
19.4.1 使用块更新 499
19.4 使用块更新和断开连接的Recordsets 499
第20章 把ACCESS OLTP应用程序移植到Visual Basic 6 507
20.1 为热线数据入口设计前端 507
20.2 OLTP项目的升级过程 509
20.3 步进完成移植过程的第一阶段 510
20.3.1 准备Access应用程序 511
20.3.2 创建所需的Visual Basic对象 511
20.3.3 导入并调试DAO代码 513
20.3.4 运行项目Vb5oltp或Ado2oltp 516
20.4 从DAO到ADO的变换 519
20.5 Ado2oltp项目代码概述 521
第21章 使用Transact-SQL存储过程 537
21.1 使用存储过程提高性能 538
21.2 存储过程语法 539
21.3 用存储过程替换SQL语句 542
21.3.1 存储过程命名约定 542
21.3.2 把Ado2oltp.frm的SELECT语句转换为过程 543
21.3.3 创建存储过程 544
21.3.4 测试SELECT过程 549
21.3.5 用存储过程替换INSERT、UPDATE和Transaction代码 550
21.4 在VBA代码中调用存储过程 553
21.4.1 执行只带输入参数的过程 554
21.4.2 使用带参数的DataEnvironment.Command对象 555
21.4.3 对参数集合编程 557
21.5 修改Ado2oltp应用程序 559
21.5.1 打开连接 559
21.5.2 设置存储过程参数 561
21.5.3 另一个存储过程执行方法 564
21.5.4 用本地存储的Recordset对象取代Jet表 565
21.5.5 把Command对象传送给子过程 567
21.5.6 增加字段列表以容纳Timestamp字段 569
21.6 使用T-SQL调试器调试存储过程 570
21.6.1 设置和测试T-SQL调试器 570
21.6.2 在设计模式下调试存储过程 573
21.6.3 在运行模式下进行调试 574
第六部分 数据库、INTRANET和INTERNET 575
第22章 把数据库与intranet和Internet集成起来 575
22.1 Microsoft的数据神经系统 576
22.2 Windows分布式Internet应用程序体系结构 577
22.3 Visual Basic 6中与Internet有关的新特征 578
22.3.1 数据库访问的远程数据服务 578
22.3.2 Internet Information Server 4.0应用程序的WebClass 579
22.3.3 动态HTML应用程序 580
22.3.5 ActiveX文档的下载支持 581
22.3.4 使用打包和发行向导进行文件分布 581
22.3.6 Microsoft Transaction Server 2.0支持 582
22.4 创建简单的数据使能WebClass项目 582
22.4.1 使用FrontPage 98创建WebClass模板 582
22.4.2 创建WebClass项目并加入DataEnvironment对象 584
22.4.3 加入Products.htm 585
22.4.4 显示ProductList查询的首记录的数据 587
22.5 创建一个简单的DHTML项目 590
22.5.1 打开新的DHTML项目并增加DHTML页 591
22.5.2 显示rsProductList Recordset的数据 592
22.5.3 给dhProductList加上Recordset导航按钮 595
第23章 在intranet中使用ActiveX文档对象 597
23.1 把Ado2oltp.VBP项目转化为ActiveX文档 597
23.1.1 ActiveX文档移植向导 598
23.1.2 修改代码并编译ActiveX DLL 600
23.2 打包ActiveX文档对象 601
23.3 多窗体项目的体系结构问题 605
23.3.1 进行窗体转换 605
23.3.2 修改代码 606
23.3.3 处理其余的代码 607
第24章 使用远程数据服务 608
24.1 RDS体系结构 608
24.1.1 传统数据库操作与RDS的比较 609
24.1.2 RDS 2.0自动化组件 610
24.2 RDS组件的方法、属性和事件 612
24.3 RDS.DataSpace对象 614
24.4 RDSServer.DataFactory对象 614
24.5 为显式和隐式远程编码 614
24.5.1 使用RDS.DataControl的隐式远程 614
24.5.2 使用ADO 2.0对象和RDS.Data Control的显式远程 615
24.6 使用VBA对RDS编程 616
24.6.1 设置ⅡS 4.0和SQL Server 6.5+ 616
24.6.2 设计DHTMLPage 618
24.6.3 总装页面元素的代码 620
第25章 开发数据使能的Internet应用程序 625
25.1 为运行VBLive进行设置 626
25.2 VBLive应用程序 627
25.3 VBLive的体系结构 631
25.3.1 VBA代码的约定和位置 632
25.3.2 WebClass代码执行跟踪 633
25.4 从结构资源产生HTML 637
25.5 直接从模板文件产生HTML 639
25.6 使用资源文件局部化内容 640
26.1 MTS在中件市场中的地位 643
第26章 Microsoft Transaction Server 2.0 643
第七部分 企业级开发技术 643
26.2 MTS在N层客户/服务器体系结构中的地位 645
26.2.1 三层结构和N层结构 646
26.2.2 层间通信和状态组件 646
26.2.3 N层应用程序中的事务 647
26.3 在Windows NT Server 4.0下安装MTS 2.0 649
26.3.1 增加MTS管理员帐户 649
26.3.2 设置MTS System package的身份 651
26.3.3 测试MTS的本地安装 653
26.3.4 设置Sample Bank工具包和组件的属性 655
26.4 在远程计算机上安装和运行Bank Client 657
26.5 在工作站上安装MTS 2.0 659
第27章 创建和发行MTS组件 661
27.1 定义MTS组件候选 661
27.1.2 资源孤立组件 662
27.1.1 面向事务的组件 662
27.1.3 决策支持组件 663
27.2 设计高效的MTS组件 663
27.2.1 ObjectContext对象 665
27.2.2 共享属性管理工具 666
27.2.3 ObjectContext的SecurityProperty对象 667
27.2.4 ObjectControl对象 667
27.2.5 MTS组件模板 667
27.3 转换单项客户以使用MTS组件 669
27.3.1 第一步:把数据访问操作移向类 669
27.3.2 第二步:创建和测试Nwind ActiveX DLL 678
27.3.3 第三步:创建、安装和测试North wind工具包 680
27.3.4 第四步:把MTS组件移向产品服务器 686
27.4 给工具包和组件增加安全性 687
第28章 使用OLAP和MDX分析多维数据 690
28.1 理解测量和维数 691
28.1.1 OLTP与星型模式 692
28.1.2 减少事实表的存储需求 694
28.1.3 利用稀疏矩阵 694
28.2 部门级定义测量和维数 695
28.3 把OLAP服务程序和引擎分类 696
28.4 把信息传送给客户 699
28.4.1 OLAP的OLE DB和简单的MDX句法 700
28.4.2 MDX示例应用程序 701
28.5 开发ADO MD对象 703
28.5.1 ADOMD.Catalog对象 703
28.5.2 ADOMD.Cellset对象 708
第八部分 附录 715
术语 715