目录 1
第1部分 入门 1
前言 1
第1章 PowerBuilder开发过程介绍 1
鸣谢 3
1.1 小结 3
第2章 成为有能力的开发人员 4
2.1 聪明的学习方法——边用边学 4
2.2 越过学习曲线 4
作者简介 5
导引 6
2.3 快捷键和热键 6
2.4 合理的设置配备 8
2.5 理想的工作环境 9
2.6 成功的人员组合 9
2.8 降低效率的因素 10
2.7 其他资料 10
2.9 小结 11
第3章 事件驱动程序的设计方法 12
3.1 目标 12
3.2 设计窗口对象 14
3.2.1 窗口属性 19
3.2.2 窗口事件 26
3.2.3 窗口函数 35
3.2.4 多态性 45
3.2.5 窗口控制 46
3.3 编码数据窗口控制 49
3.3.1 编辑框 51
3.3.2 数据窗口属性 53
3.3.3 数据窗口事件 55
3.3.4 数据窗口函数 58
3.4 PowerSoft程序设计 65
3.4.1 保留字 65
3.4.2 变量声明 67
3.4.3 变量辖域 70
3.5 小结 78
第2部分 建立PowerBuilder应用程序 80
第4章 使用应用框架进行面向对象的开发 80
4.1 基础库 80
4.2 接口父类库 81
4.3 具体类库 82
4.4 一个针对应用对象的基础库 82
4.5 接口父类库 84
4.6 具体类库 86
4.7 服务器对象及协作类 88
4.8 面向对象开发的益处 88
4.9 小结 89
第5章 总体设计 90
5.1 MDI与SDI 90
5.2 应用安全性 91
5.2.1 控制应用的访问权限 92
5.2.2 如何控制进程的访问权限 93
5.2.3 控制数据访问 94
5.2.4 协同应用和数据库版本 96
5.3 用户界面标准 99
5.3.1 直观的应用 100
5.3.2 一个安全的应用 104
5.4 报表需求 107
5.4.1 报表分类 108
5.4.2 报表规范表格 110
5.4.3 报表的创建 111
5.4.4 报表展示 111
5.4.5 报表组织 113
5.4.7 报表的权限 113
5.4.6 报表的权限 114
5.5 系统需求 114
5.6 菜单系统设计 115
5.7 企业范围的考虑 116
5.8 小结 117
第6章 命名和编程指南 118
6.1 两字母应用辖域标识(TLASI) 118
6.2 命名数据库对象 119
6.2.1 表和视图 120
6.2.2 字段 121
6.2.3 触发器 122
6.2.4 存储过程 124
6.3 命名PowerBuilder对象 124
6.3.1 库的命名 125
6.3.2 窗口命名 125
6.3.3 数据窗口对象命名 126
6.3.4 菜单命名 127
6.3.5 用户对象命名 128
6.4 PowerScript编程准则 129
6.4.1 变量的命名 129
6.4.2 函数的命名 132
6.4.3 script程序头 133
6.4.4 变量声明 135
6.4.5 变量访问声明 135
6.4.6 编码标准 137
6.5 扩充属性 140
6.6 小结 140
第7章 设计数据库接口 141
7.1 锁定 142
7.1.1 不锁定 142
7.1.2 悲观锁定 142
7.1.3 乐观锁定 142
7.1.4 乐观锁校验字段 143
7.2 事务处理 145
7.3 错误处理 147
7.3.1 乐观锁定错误 147
7.3.4 数据约束错误 148
7.3.3 数据完整性错误 148
7.3.2 悲观锁定错误 148
7.4 触发器的使用 149
7.5 触发器存在的问题 149
7.6 突发性表错误 150
7.7 使用存储过程 150
7.8 实施数据库约束 151
7.9 数据库角色的使用 152
7.10 小结 153
第8章 PowerBuilder中面向对象的构件块 154
8.1 子类 157
8.1.1 实例 157
8.2 搜索窗口 158
8.2.1 选取列表 159
8.2.2 查阅窗口 161
8.2.3 查询窗口 161
8.2.4 向下分级(Drill Down) 163
8.3 数据录入窗口 164
8.3.1 基本录入窗口 167
8.3.2 子集录入窗口 169
8.3.3 纲要/明细窗口 169
8.3.4 匹配程序窗口 171
8.3.5 多表录入窗口 171
8.3.6 转换器窗口 173
8.3.7 分布式更新 173
8.4 导航和选项窗口 175
8.4.1 导航窗口 175
8.4.2 用户参数选择 176
8.4.3 选项窗口 176
8.5 特殊窗口 177
8.5.1 Splash窗口 177
8.5.2 About窗口 178
8.5.3 登录窗口 182
8.6 全局函数 183
8.6.1 有效性验证 186
8.6.2 过程 188
8.6.3 计算 189
8.6.4 进程 190
8.7 用户对象 190
8.7.1 标准可视用户对象 191
8.7.2 自定义的可视用户对象 191
8.7.3 标准类 191
8.7.4 自定义类 191
8.8 应用报表 192
8.9 菜单 193
8.10 小结 195
第9章 自底向上创建应用程序 196
9.1 数据库对象 196
9.1.1 开发人员和数据管理员 197
9.1.2 表 198
9.1.3 约束 202
9.2.1 触发器 206
9.2 触发器与存储过程 206
9.2.2 存储过程 207
9.3 索引 207
9.4 优化器(Optimizers) 208
9.4.1 基于规则的优化器 209
9.4.2 基于代价的优化器 209
9.5 扩充属性 210
9.5.1 编辑风格 211
9.5.2 显示格式 213
9.5.3 有效性验证 214
9.6 应用程序的库结构 218
9.6.1 库内对象的命名 219
9.7 小结 221
第10章 辅助数据窗口 223
10.1 下拉数据窗口 223
10.1.1 一个简单的下拉数据窗口对象 224
10.1.2 创建一个下拉数据窗口编辑风格 229
10.1.3 其他更复杂的数据窗口 234
10.2 编码表维护数据窗口 239
10.3 管理表数据窗口 241
10.3.1 建立一个管理数据窗口对象 242
10.4 小结 251
第3部分 应用程序范例 252
第11章 一个公司/名册应用系统 252
11.1 详细设计 253
11.1.1 规格说明分析 254
11.1.2 对象仓库 260
11.1.3 对象索引 260
11.1.4 可提交的详细设计报告 261
11.2 创建阶段的开始 261
11.3 实现进度安排 263
11.4 创建高级对象 264
11.5 应用库/对象/MDI框架/MDI菜单 265
11.7 显示格式 271
11.6 建立扩充属性 271
11.8 编辑风格 272
11.8.1 有效性验证 281
11.9 创建数据窗口对象 283
11.10 创建接口父类对象 285
11.11 状态码录入窗口—— w_state_de 289
11.12 类型码录入窗口——w_type_de 293
11.13 公司数据录入窗口——w_comp_de 295
11.14 名册录入窗口——w_cont_de 304
11.15 把名册录入窗口连接至公司录入窗口——w_comp_de 307
11.16 公司记录查询窗口——w_comp_lu 324
11.17 增加屏幕打印报表 335
11.18 数据窗口屏幕打印报表 336
11.19 合成数据窗口屏幕打印报表 336
11.20 “Print Screen”屏幕打印报表 336
11.21 小结 341
第12章 销售订单录入应用 344
12.1 建立销售订单录入应用的框架 346
12.1.1 设置销售订单录入应用环境 347
12.1.2 建立“应用打开”事件的对象 351
12.2 可选的多表录入窗口 369
12.3 优化子数据窗口 376
12.3.1 bw_DropDowns的函数 377
12.4 雇员数据录入 379
12.5 建立一个用于继承的Master/Detail数据录入窗口 391
12.6 小结 424
第13章 应用报表 427
13.1 创建报表的完整过程 427
13.1.1 建立SQL语句 427
13.1.2 设计报表布局 429
13.1.3 预览(测试)报表 431
13.2 报表的组织 432
13.3 报表命名法 433
13.4 PowerBuilder 4新增的报表性能 434
13.4.1 嵌套报表 435
13.4.2 合成数据窗口报表 440
13.4.3 存储报表文件 443
13.5 提高基于SQL的报表的效率 446
13.5.1 如何管理系统代价高的报表 446
13.5.2 一个高效率的数据库环境 447
13.5.3 优化程序的使用 447
13.5.4 优化连接操作 448
13.5.5 优化“并”操作 448
13.6 如何把报表结合进应用程序 450
13.6.1 报表选择 450
13.6.2 报表检索参数录入 453
13.6.3 报表“展示”选项 455
13.7 PSR浏览程序 455
13.8 应用报表实例 456
13.9 标准报表标题对象 456
13.10 小结 458
第4部分 高级话题 460
第14章 DBMS事务管理 460
14.1 DBMS事务对象 460
14.1.1 DBMS连接 460
14.1.2 SQL执行的返回数据 461
14.2 PowerScript的事务管理语句 463
14.2.1 COMMIT和ROLLBACK 464
14.2.2 CONNECT和DISCONNECT 465
14.3 多个事务对象的处理 465
14.3.1 数据窗口的事务函数 467
14.4 逻辑事务 474
14.4.1 更新多个数据窗口 475
14.5 并发控制 477
14.5.1 乐观锁与悲观锁的比较 477
14.5.2 使用一个乐观锁定字段 478
14.6.4 嵌套的响应窗口 480
14.6.3 共享的数据窗口 480
14.7 小结 480
14.6.1 多数据窗口 480
14.6.2 子窗口和弹出式窗口 480
14.6 多窗口事务 480
第15章 客户机/服务器计算模式 482
15.1 经济因素 482
15.2 技术因素 482
15.3 企业方面的要求 483
15.4 数据处理方面的要求 483
15.5 可用性方面的要求 484
15.6 客户机/服务器程序设计 484
15.6.1 减少数据库请求的次数 485
15.6.2 尽可能减少返回结果 485
15.6.3 利用存储过程来优化性能 486
15.6.4 集中实施企业规则 486
15.7 独立于数据库的应用程序 489
15.8 小结 491
第16章 数据有效性验证 492
16.1 利用控制来限制选择 492
16.2 编辑风格 494
16.2.1 键入式编辑风格 494
16.3 数据窗口字段的有效性验证 495
16.3.1 在输入时验证数据的有效性 495
16.3.2 在更新前验证数据的有效性 496
16.3.3 必备域 496
16.3.4 自定义有效性验证函数 497
16.4 数据库有效性验证 499
16.5 小结 501
第17章 数据窗口编码的高级技术 502
17.1 SQL预览 502
17.2 仅取所需 503
17.3 数据窗口缓冲区 504
17.4 记录/字段的状态 506
17.5 使用子数据窗口 507
17.6 动态数据窗口 509
17.6.1 创建动态数据窗口 509
17.6.2 动态数据窗口的缺省设置 511
17.7 Modify()和Describe()函数 512
17.7.1 多个Modify()和Describe()语句的组合 512
17.7.2 描述字段的数据类型 513
17.7.3 动态地创建并撤消数据窗口里的对象 513
17.7.4 数据窗口标题颜色 515
17.7.5 改变正文属性 515
17.7.6 隐藏/显示字段和标号 516
17.7.7 修改字段的制表键顺序 517
17.7.8 改变数据窗口的SQL语句 519
17.8 把数据源由SQL SELECT改变为存储过程 522
17.9 查询模式 523
17.9.3 关闭查询模式 525
17.9.2 显示查询结果 525
17.9.1 查询模式编辑风格 525
17.9.4 在别的数据窗口里显示结果 526
17.9.5 查询模式下的QuerySort选项 526
17.10 数据窗口层次 526
17.11 将Enter键用作Tab键 528
17.12 属性的条件表达式 529
17.13 两个数据窗口之间的多记录拖放 530
17.14 小结 533
第18章 高级子数据窗口 534
18.1 获取子数据窗口引用——GetChild() 536
18.2 共享子数据窗口 536
18.3 从属子数据窗口 537
18.4 筛选并排序子数据窗口 538
18.5 小结 539
第19章 面向对象的术语 540
19.1 对象(Objects) 541
19.2 类(Classes) 542
19.3 实例 544
19.4 方法、函数和属性 545
19.5 封装 546
19.6 多态性 546
19.6.1 函数重载 546
19.7 指针 547
19.8 对象类型 547
19.9 使用的其他术语 548
19.9.1 传植及引用 549
19.9.2 消息 549
19.9.3 触发与邮寄 550
19.9.4 全局,私有,受保护和公共 550
19.10 小结 551
第20章 PowerBuilder的面向对象特征 553
20.1 PowerObject的层次 553
20.1.1 类浏览器 555
20.2.1 属性的继承 557
20.2 继承 557
20.2.2 函数的继承 560
20.2.3 事件的继承 560
20.3 多态性 563
20.4 封装性 564
20.4.1 窗口 565
20.4.2 菜单 566
20.4.3 用户对象 568
20.4.4 可视用户对象 569
20.4.5 非可视用户对象 570
20.5 小结 573
第21章 面向对象技术——可重用软件设计 574
第22章 管理PowerBuilder开发项目 582
22.1 小组角色 582
22.1.1 计划人员/进度安排人员 582
22.1.2 应用开发人员 584
22.1.4 测试人员 585
22.1.3 数据库管理员 585
22.1.5 用户代表 586
22.1.6 培训人员 587
22.1.7 文档专家 588
22.1.8 图象设计人员 588
22.1.9 网络管理员 588
22.2 PowerBuilder项目的技术需求 588
22.2.1 PC 588
22.2.2 服务器 589
22.2.3 网络 589
22.3 项目阶段 589
22.3.1 瀑布型与螺旋型 589
22.3.2 设计 590
22.3.3 规格说明 590
22.3.4 建立 590
22.3.5 数据转换 591
22.3.6 实现 591
22.3.7 后实现阶段 592
22.3.8 编制文档 593
22.3.9 首次从事PowerBuilder应用开发时的注意事项 593
22.3.10 培训 593
22.3.11 顾问 594
22.3.12 类库 594
22.3.13 管理层的支持 595
22.3.14 系统属于用户 595
22.4 小结 595
第5部分 附录 596
附录A PowerBuilder版本4中的新特性 596
A.1 性能 596
A.2 PowerTips 596
A.3 数据管道 596
A.4 增强报表 597
A.4.1 合成报表 597
A.5.3 针对Intersolv的PVCS源代码管理系统的增强接口 598
A.5.2 对象链接和嵌入(OLE)2.0支持 598
A.5.4 多应用开发 598
A.5 对象特性 598
A.5.1 面向对象 598
A.4.2 嵌套报表 598
A.5.5 PVCS报表 599
A.5.6 删除源代码存档 599
A.6 有关数据库方面的增强措施 599
A.6.1 Oracle存储过程和数据窗口 599
A.6.2 增加的Oracle 7数组取出大小 600
A.6.3 Bind变量 600
A.6.4 开放数据库连接(ODBC)2.0支持 600
A.6.5 Watcom存储过程支持 600
A.7 数据窗口对象 600
A.7.1 改进的SQL SELECT界面 601
A.7.2 有条件地设置属性 601
A.7.3 新的数据窗口属性 601
A.7.7 多列报表 602
A.7.6 New Print对话框 602
A.7.4 新的数据窗口对象属性 602
A.7.5 Preview RetainData 602
A.7.8 打印预览的附加功能 603
A.7.9 引用聚合字段和检索参数 603
A.7.10 压缩重复执行 603
A.7.11 滑动字段属性 603
A.8 应用程序Painter 603
A.8.1 Quick App 603
A.8.2 新属性 604
A.8.3 缺省全局变量类型 604
A.8.4 Create Executable对话框 604
A.9 WATCOM 4.0 604
A.10 数据库Painter 605
A.10.3 Database Administrator——Watcom SQL 605
A.10.2 表的列表缓存 605
A.10.1 表/字段显示 605
A.9.3 数据库触发器 605
A.9.4 向后兼容 605
A.9.2 存储过程 605
A.9.1 Cascade删除 605
A.11 菜单Painter 606
A.11.1 菜单栏项 606
A.11.2 菜单项 606
A.12 用户对象 606
A.12.1 标准类对象 606
A.12.2 运行时创建的可视对象 606
A.12.3 Change Menu功能 606
A.13.4 用于SingleLine Edit和MultiLine控件的HideSelection属性 607
A.13.3 ArrangeSheets函数TileHorizontal!枚举数据类型值 607
A.13.5 列表框控制属性 607
A.14 应用程序提交 607
A.13.1 TriggerEvent和PostEvent 607
A.13 窗口对象 607
A.13.2 窗口对象的ToolbarMoved事件 607
A.14.1 项目Painter 608
A.14.2 Installation Diskette Builder——PBSETUP.EXE 608
A.15 函数 608
A.15.1 GetApplication 608
A.15.2 GetEnvironment 608
A.15.5 数据窗口函数 609
A.15.3 PrintScreen 609
A.15.4 SetLibraryList 609
A.15.6 更名函数 610
附录B 基础对象 612
B.1 模板对象 614
附录C 基础对象参考 616
C.1 函数 616
C.1.1 bf_centersheet 616
C.1.3 bf_Edit 617
C.1.2 bf_checkdatestr 617
C.1.4 bf_GetDateRange 618
C.1.5 bf_GetMessage 618
C.1.6 bf_GetTransObject 618
C.1.7 bf_InitBGA 619
C.1.8 bf_IsEntered 619
C.1.9 bf_LoadCodeTable 619
C.1.10 bf_Login 620
C.1.11 bf_MessageBox 620
C.1.12 bf_OpenHelp 620
C.1.13 bf_OpenMultiValueSelector 621
C.1.14 bf_OpenMultiValueSelectorName 621
C.1.15 bf_OpenSheet 622
C.1.16 bf_OpenResp 622
C.1.17 bf_OpenSheetMulti 623
C.1.18 bf_RefreshCodeTables 623
C.1.20 bf_SetSheet 624
C.1.21 bf_Share_DDW 624
C.1.19 bf_RegainLocks 624
C.1.22 bf_Show TimeStamp 625
C.1.23 bf_ValidateDateStr 625
C.2 菜单 626
C.2.1 bm_mdi 626
C.3 窗口 627
C.3.1 bw_about 627
C.3.2 bw_child 627
C.3.3 bw_daterange 627
C.3.4 bw_dropdowns 628
C.3.5 bw_login 628
C.3.6 bw_main,bw_resp 629
C.3.7 bw_main_maint,bw_resp_maint 632
C.3.8 bw_main_maint_codetable,bw_resp_maint_codetable 633
C.3.9 bw_mdiframe 633
C.3.11 bw_multivalueselector 634
C.3.10 bw_messagebox 634
C.3.12 bw_optimisticlockerror 635
C.3.13 bw_popup 635
C.3.14 bw_resp_multiselector 636
C.3.15 bw_resp_multiseletorname 636
C.3.16 bw_resp_shared 637
C.3.17 bw_splash 637
C.3.19 bw_pbase 638
C.3.18 bw_sql_preview 638
附录D PowerBase对象事件样例 639
D.1 bw_main 639
D.1.1 be_Initialize 639
D.1.2 Activate 639
D.2 bw_main_maint 639
D.2.1 be_AfterDelete 639
D.2.2 be_Approval 640
D.2.3 be_BeforeDelete 640
D.2.4 be_BeforeUpdate 641
D.2.5 be_GlobalInit 642
D.2.5 be_GlobalInit 642
D.2.6 be_Initialize 643
D.2.7 be_LockForUpdate 643
D.2.7 be_LockForUpdate 643
D.2.6 be_Initialize 643
D.2.8 be_LookUp 644
D.2.9 be_Message 644
D.2.9 be_Message 644
D.2.8 be_LookUp 644
D.2.10 be_Retrieve 645
D.2.11 be_Save 645
D.2.11 be_Save 645
D.2.10 be_Retrieve 645
D.2.13 be_Validate 646
D.2.12 be_UpdateMode 646
D.2.14 be_ValidateRelatedItems 646
D.3 BUO_MAINT 646
D.3.1 be_ValidateColumn 646
D.2.15 be_SelectMode 646
D.3.1 be_ValidateColumn 646
D.3 BUO_MAINT 646
D.2.15 be_SelectMode 646
D.2.14 be_ValidateRelatedItems 646
D.2.13 be_Validate 646
D.2.12 be_UpdateMode 646
D.4 全局函数 647
D.4.2 bf_CenterSheet() 647
D.4.1 bf_Login() 647
D.4.3 bf_CheckDateStr() 647
D.4.3 bf_CheckDateStr() 647
D.4.2 bf_CenterSheet() 647
D.4.1 bf_Login() 647
D.4 全局函数 647