绪论 面向对象程序设计 1
0.1 面向对象的术语 1
0.2 面向对象技术在Power Builder中的实现 2
0.2.1 继承 2
0.2.2 封装 2
0.2.3 多态性 2
0.3 PowerScript语言使用的几个专题 3
0.3.1 常量说明 3
0.3.2 控制对实例变量的存取 3
0.3.3 解决命名冲突 4
0.3.4 祖先对象程序的返回值 5
0.3.5 函数和事件的参数类型 5
0.3.6 祖先和子孙变量 6
第1章 快速捷径 7
1.1 样本程序 7
1.2 运行样本程序 8
1.2.1 浏览和运行样本程序 8
1.2.2 查找自己想要的内容 10
2.1.1 MDI窗口的构成 11
2.1.2 标准MDI窗口和定制MDI窗口 11
2.1 什么是MDI 11
第2章 MDI应用程序 11
2.2 建立MDI窗口 13
2.3 MDI窗口的MicroHelp 14
2.3.1 菜单项的MicroHelp 14
2.3.2 控件的MicroHelp 15
2.4 MDI窗口的工具栏 16
2.4.1 MDI窗口工具栏的一些概念 16
2.4.2 在Menu画板中设置工具栏的属性 17
2.4.3 建立工具栏中的下拉工具栏 18
2.4.4 在Window画板中设置工具栏的属性 19
2.4.5 在Application画板中设置工具栏的属性 20
2.4.6 在MDI应用程序中灵活使用工具栏 21
2.5 调整客户区域的尺寸 24
第3章 多窗口实例 27
3.1 概述 27
3.2 多窗口实例的使用 28
3.3 窗口数组 29
3.3.1 窗口数组的说明和使用 29
3.3.2 操作窗口数组 30
3.3.3 混合窗口数组 30
3.4 实例窗口中控件的引用 31
第4章 事务对象与数据库操作 33
4.1 事务对象的一些概念 33
4.2 事务对象的使用 35
4.2.1 事务的基本概念 36
4.2.2 事务对象的赋值 36
4.2.3 同时操作多个数据库 38
4.2.4 数据库事务池 40
4.3 使用事务对象调用存储过程 41
第5章 数据管道程序设计 46
5.1 概述 46
5.2 准备工作 46
5.2.1 建立Data Pipeline对象 47
5.2.2 建立相关的用户对象 48
5.2.3 建立Window对象 49
5.3 数据管道操作及处理程序 50
5.3.1 准备工作 50
5.3.2 数据管道操作 51
5.3.3 出错处理 53
第6章 灵活运用图形表现数据 54
6.1 Graph控件简介 54
6.2 生成单一产品的销售走势图 57
6.2.1 界面设计 57
6.2.2 建立DataWindow对象 59
6.2.3 编写程序代码 59
6.3 生成多个产品销售走势对比图 61
6.4 动态改变图形的类型 64
第7章 窗口中几个控件的使用 67
7.1 Tab标签控件 67
7.1.1 术语及实例说明 67
7.1.2 准备工作 68
7.1.3 建立Tab控件和选项卡 69
7.1.4 管理Tab控件及其选项卡 70
7.1.5 写Tab控件的程序 71
7.2 ListView控件 75
7.2.1 利用ListView控件进行查询 75
7.2.2 ListView控件的详细资料方式 77
7.3 TreeView控件 79
7.3.1 用TreeView控件实现带层次的查询 80
7.3.2 TreeView控件应用技术 82
7.4 轨迹条控件 89
7.5 进度条控件 92
7.6 超级链接控件 94
第8章 Rich Text应用 95
8.1 RichTextEdit控件的使用 95
8.1.1 RichTextEdit控件的属性设置 95
8.1.2 RichTextEdit控件的文本 96
8.1.3 打开和保存文件的实例 97
8.2.2 为输入域指定值 101
8.2.1 在文档中插入输入域 101
8.2 RichTextEdit控件中的输入域 101
8.2.3 为日期和页码指定输入域 102
8.3 预览和打印 103
8.3.1 预览 104
8.3.2 打印 104
8.4 使用数据库中的数据 105
8.5 RichText数据窗口 106
第9章 OLE技术及应用 108
9.1 OLE的基本概念 108
9.2 OLE控件和可插入的对象 109
9.2.1 建立和设置OLE控件 109
9.2.3 Offsite或In-place激活 110
9.2.2 链接和嵌入 110
9.3 OLE定制控件 111
9.4 可编程的OLE对象 112
9.4.1 OLEObject对象数据类型 113
9.4.2 OLE控件、OLE定制控件和OLEObject对象之间的赋值 114
9.4.3 OLEObject的事件 115
9.5 OLE程序设计 115
9.5.1 自动操作接口 116
9.5.2 自动操作与Any数据类型 118
9.6 Browser画板中的OLE信息 119
9.7.1 OLE存储的结构 120
9.7 操作OLE对象的高级方法 120
9.7.2 存储和流的对象类型 121
9.7.3 打开和保存存储 121
9.7.4 建立和使用存储的例子 123
9.7.5 OLE流的概念和应用 126
9.7.6 使用存储的策略 128
第10章 PowerBuilder自动服务器 130
10.1 Automation Server的基本概念 130
10.2 用户对象作为自动服务器 131
10.2.1 建立作为服务器的类用户对象 131
10.2.2 建立对象的运行时库 131
10.2.3 注册用户对象 132
10.2.4 编写访问用户对象的客户端程序 134
10.3 使用PowerBuilder作为自动服务器 135
10.3.1 建立要访问的用户对象 136
10.3.2 生成运行时库 136
10.3.3 编写访问PowerBuilder和用户对象的客户端程序 136
10.4 命名服务器的建立和使用 138
第11章 动态数据交换 141
11.1 动态数据交换的概念 141
11.2 动态数据交换的编程 142
11.2.1 DDE客户端程序设计 142
11.2.2 DDE服务器程序编程 145
11.2.3 DDE的事件和函数 146
11.3 动态数据交换应用实例 147
11.3.1 DDE服务器程序设计实例 148
11.3.2 DDE客户程序设计实例 151
11.4 使用Excel打印PowerBuilder的报表 153
第12章 几种常用编程技术 156
12.1 使用初始化文件和Windows注册表 156
12.1.1 使用初始化文件 156
12.1.2 使用Windows注册表 158
12.2.1 处理Blob数据的SQL语句 160
12.2 处理Blob数据 160
12.2.2 利用Blob数据完成对图片或大文本的处理 161
12.2.3 数据窗口中的Blob列 163
12.3 动态链接库与外部函数的调用 165
12.3.1 说明外部函数 166
12.3.2 外部函数调用举例 167
12.4 嵌入邮件应用 170
12.4.1 与邮件应用相关的技术 171
12.4.2 邮件会话编程 173
第13章 分布式应用概述 176
13.1 为什么要使用分布式应用技术 176
13.1.1 客户/服务器模式存在的问题 176
13.1.2 分布式计算提供的解决方案 177
13.2.1 什么是Jaguar CTS 178
13.2 Jaguar CTS 178
13.2.2 Jaguar服务器结构 179
13.2.3 Jaguar客户结构 181
13.3 微软事务服务器(MTS) 182
13.4 分布式PowerBuilder 183
13.4.1 服务器应用程序 183
13.4.2 客户应用程序 184
13.4.3 通信驱动程序 185
14.1.1 使用向导建立Jaguar组件 186
14.1.2 建立Jaguar组件的步骤 186
14.1 建立Jaguar组件方法概述 186
第14章 建立Jaguar组件 186
14.2 Jaguar管理程序变量空间的方式 187
14.2.1 Jaguar与分布式PowerBuilder的不同之处 187
14.2.2 Jaguar共享组件 187
14.3 定义组件接口 187
14.3.1 说明接口 187
14.3.2 接口中包含的内容 188
14.3.3 方法的命名与方法的重载 188
14.3.4 数据类型 188
14.3.6 传递只读数据 189
14.3.7 传递对象 189
14.3.5 通过引用传送参数 189
14.3.8 对空值提供支持 190
14.3.9 Jaguar有效性 190
14.4 从Jaguar组件访问数据库 190
14.4.1 概述 190
14.4.2 使用连接缓存(connection caching) 191
14.4.3 对事务提供支持 193
14.4.4 实现检索操作 195
14.4.5 实现修改 196
14.4.6 传送结果集 200
14.5.2 在向导的选项中定义实例池 202
14.5 实例池(Instance Pooling) 202
14.5.1 为什么使用实例池 202
14.5.3 控制放入实例池中的实例状态 203
14.5.4 组件的生命周期 203
14.6 使用共享组件 204
14.6.1 概述 204
14.6.2 创建共享组件 205
14.6.3 创建服务组件 205
14.7 调用其他服务器组件的方法 205
14.8 存取组件属性 206
14.10 测试和调试组件 208
14.9 将消息放入Jaguar日志 208
第15章 建立Jaguar客户端应用 210
15.1 建立Jaguar客户端应用程序 210
15.2 与Jaguar服务器连接 210
15.2.1 手工编写代码 211
15.2.2 使用向导创建Connection对象 212
15.3 生成Jaguar代理(Proxy)对象 212
15.4 调用组件方法 213
15.4.1 调用Jaguar服务器组件的方法 213
15.4.2 清除代理对象实例 214
15.5 请求从服务器返回信息 214
15.6.1 概述 217
15.6 处理通信错误 217
15.6.2 编写Connection对象Error事件的程序 218
15.6.3 编写SysternError事件的程序 219
15.7 插接客户应用程序 219
第16章 建立COM或MTS组件 220
16.1 建立COM和MTS组件概述 220
16.1.1 使用向导 220
16.1.2 开发步骤 221
16.2 组件对象模型 221
16.2.1 PowerBuilder的COM服务器 221
16.3.1 方法和数据类型 222
16.2.2 自动服务器和PB COM服务器 222
16.3 定义组件接口 222
16.3.2 编码时的限制 224
16.4 从COM和MTS组件访问数据库 225
16.4.1 传送结果集 225
16.4.2 从客户端存取MTS组件的结果集 225
16.4.3 在PowerBuilder中使用ADO ResultSet 226
16.4.4 从MTS组件中返回结果集 227
16.5 提供对事务的支持 227
16.7.1 使用OLEObject对象 229
16.7.2 使用TransactionServer对象 229
16.7 调用另一个服务器组件的方法 229
16.6 为控制对象生存期提供支持 229
16.8 在日志文件中记录错误 230
16.9 安全问题 230
16.9.1 在Project画板或向导中设定权限 230
16.9.2 标明安全 230
16.10 在Project画板中建立COM和MTS组件 230
16.10.1 使用Project画板建立COM服务器 230
16.10.2 自动注册组件 231
16.10.3 插接组件到MTS 231
16.11 运行PowerBuilder的COM对象 232
16.10.4 选择定制或双接口 232
16.12 插接PB COM服务器 233
16.12.1 使用带有可用COM应用程序的PB COM服务器 233
16.12.2 插接一个PB COM对象到MTS 234
16.12.3 插接文件到MTS服务器计算机 234
16.12.4 导入PB COM对象到MTS 234
16.12.5 创建客户插接文件 235
16.12.6 安装客户插接文件 236
16.13 从客户端访问PB COM服务器 236
16.13.1 VB作为客户 236
16.13.2 C++作为客户 237
16.13.3 使用PB COM服务器和DCOM对象 239
第17章 建立COM/MTS客户应用 242
17.1 建立COM/MTS客户应用程序 242
17.2 连接到COM服务器 242
17.3 与COM组件交互 243
17.3.1 调用组件方法 243
17.3.2 传送结果集 243
17.3.3 处理执行错误 244
17.4 从客户端控制事务 244
第18章 建立分布式PowerBuilder客户 246
18.1 建立用户界面 246
18.2 连接到服务器 246
18.2.2 建立连接 247
18.2.1 定义连接变量 247
18.2.3 WinSock命名问题 248
18.2.4 修改主机和服务器文件 248
18.2.5 建立多重连接 249
18.3 调用远程对象函数 249
18.3.1 远程对象的使用 249
18.3.2 进行异步函数调用 251
18.4.3 生成代理对象 252
18.4.2 使用代理对象的优点 252
18.4.1 代理对象 252
18.4 产生代理对象 252
18.3.3 从服务器要求信息返回 252
18.5 处理通信错误 253
18.5.1 处理通信错误的概念 253
18.5.2 编写Connection对象的Error事件程序 254
18.5.3 编写SystemError事件的程序 255
18.6 管理程序变量空间 255
18.6.1 范围规则 255
18.6.2 共享对象 255
18.7.2 对服务器进行管理活动 256
18.7.1 检索连接信息 256
18.7.3 断开其他客户的连接 256
18.7 使用ConnectionInfo对象 256
18.6.3 共享数据的其他方法 256
18.8 插接客户应用程序 257
18.8.1 将应用程序打包 257
18.8.2 远程对象类定义 257
第19章 建立分布式PowerBuilder服务器 258
19.1 创建用户界面 258
19.2 管理客户连接 258
19.2.1 监听客户连接 259
19.2.2 处理客户请求 260
19.3 建立远程对象 261
19.3.1 编写用户对象方法 261
19.3.2 建立远程对象 262
19.4 一个完整的分布式PowerBuilder应用 263
19.4.1 服务器应用 263
19.4.2 客户端应用 264
19.4.3 运行 265
19.5 访问数据库 266
19.5.1 基本概念 266
19.5.2 实现检索操作 267
19.5.3 实现修改 268
19.5.4 将数据库事务放入事务池中 273
19.6 使用共享对象 273
19.6.1 概述 273
19.6.3 执行期间的情况 274
19.6.2 共享对象如何工作 274
19.6.4 举例 275
19.7 处理异步请求 278
19.7.1 同步处理和异步处理的不同 278
19.7.2 请求进队列 278
19.7.3 同步请求采取优先权 278
19.8 传送消息到客户端 279
19.8.1 服务器发送 279
19.8.2 请求进队列 279
19.8.3 客户端传送对象引用 279
19.8.4 服务器使用远程引用 279
19.8.5 举例 279
19.9.1 引起死锁的原因 280
19.9 防止死锁 280
19.9.2 如何防止死锁 282
19.10 插接服务器应用程序 282
第20章 使用JavaBeans代理生成器 283
20.1 JavaBeans代理生成器 283
20.1.1 开发过程 283
20.1.2 生成Java类 283
20.1.3 生成其他的类 284
20.2 Java数据类型 285
20.3 在Project画板中生成Java类 286
20.4.1 使用Java类的步骤 287
20.4 使用生成的Java类 287
20.4.2 建立Java工程 288
20.4.3 建立连接 289
20.4.4 在Constructor事件中设置连接属性 289
20.4.5 单独设置连接属性 290
20.4.6 在连接方法中设置连接属性 290
20.4.7 利用JavaBeans的持续性设置连接属性 290
20.4.8 在JavaBeans代理对象中调用方法 291
20.4.9 使用Date和DateTime类 298
20.5 使用PowerJ引用卡集成Java类 298
21.1.1 准备调试组件 299
21.1.2 开始调试 299
21.1 排除Jaguar组件的错误 299
第21章 多层应用程序排错 299
21.1.3 与本地调试的区别 300
21.1.4 状态 300
21.1.5 多个实例 300
21.2 排除分布式PowerBuilder应用程序中的错误 300
21.2.1 概述 300
21.2.2 用Local驱动程序测试 301
21.2.3 用通信驱动程序在本地测试 302
21.2.4 使用跟踪程序 303