目录 1
作者简介 1
前言 1
第一部分 PowerBuilder开发环境 1
第1章 PowerBuilder集成开发环境 1
1.1 目标 1
1.2 IDE的发展历史 1
译者序 1
1.3 工作区和目标 4
1.3.1 工作区 4
1.3.2 目标 8
1.4 IDE研究 12
1.4.1 IDE工具栏 12
1.4.2 IDE菜单选项 13
1.4.3 System Tree 16
1.4.4 Clip Window 16
1.4.5 Output Window 17
1.4.6 Design Area 18
1.5 IDE的其他有用特性 19
1.5.1 To Do List(任务列表) 19
1.5.2 Keyboard Shortcuts(键盘快捷键) 19
1.5.3 配置、跟踪和调试 20
1.5.4 其他工具 20
1.6 IDE的高级特性 21
1.7 小结 25
2.1 目标 26
2.2 为什么要实现版本控制 26
第2章 源代码控制 26
2.3 PowerBuilder和SCC的集成 27
2.3.2 早期的代码管理体系结构 28
2.3.1 PowerBuilder与SCC集成的发展简介 28
2.3.3 SCC接口中体系结构的变化 29
2.3.4 新的SCC文件类型 30
2.3.5 PBNative的体系结构变化 30
2.4 PowerBuilder 8和PowerBuilder 9中IDE的变化 31
2.4.1 工作区属性对话框 31
2.4.2 安装注意事项 33
2.4.3 系统树和库画板SCC图标 34
2.4.4 库画板 35
2.5 源代码控制菜单 35
2.5.1 工作区级上下文菜单 35
2.5.2 目标级上下文菜单 36
2.5.3 PBL级上下文菜单 36
2.5.4 对象级上下文菜单 37
2.6.1 Add to Source Control(添加到源代码控制) 38
2.6.2 Remove from Source Control 38
(从源代码控制中删除) 38
2.6 源代码控制操作 38
2.6.4 Check Out(签出) 39
2.6.5 Check In(签入) 39
2.6.3 Refresh Status(状态刷新) 39
2.6.6 Undo Checkout(撤销签出) 40
2.6.7 Get Latest Version(获取最新版本) 40
2.6.8 Show Differences(差别显示) 41
2.6.9 Show History(历史显示) 42
2.6.10 SCC Properties(SCC属性) 42
2.6.11 Backup SCC Status Cache(备份SCC状态缓存) 42
2.6.12 Run Source Control Management Tool(运行源代码控制管理工具) 42
2.6.13 Advanced Options(高级选项) 42
2.8 工程工作区和目标的计划 43
2.9 PB 9中PBNative的设置 43
2.7 PowerBuilder 9中有效的SCC实现 43
2.9.1 第一步——文件夹和PBL的结构调整 44
2.9.2 第二步——创建工作区和目标 45
2.9.3 第三步——设置PBNative知识库 45
2.9.4 第四步——添加其他开发者 46
2.9.5 第五步——有选择地使用工作PBL 46
2.10 第三方SCC提供程序的设置 47
2.11 PowerBuilder 9的分支与合并 47
2.11.1 初始化设置和注册 47
2.11.2 常用操作 48
2.11.3 建立分支工作区和视图 49
2.12 第三方SCC提供程序简介 51
2.13 小结 52
3.1 目标 53
3.2 这些年PowerBuilder部署的发展 53
第3章 应用程序的编译和部署 53
3.3 PowerBuilder 9中应用程序的部署 54
3.3.1 编译器基础 54
3.3.2 应用程序包 55
3.3.3 动态运行库的使用 55
3.3.4 外部资源的使用 56
3.3.5 工程画板 57
3.3.6 目标级部署 60
3.3.7 工作区级部署 60
3.3.8 构建运行库 61
3.4 使用OrcaScript的命令行部署 61
3.4.1 简介 62
3.4.2 体系结构 62
3.4.3 OrcaScript命令参考 63
3.4.4 Power Gen 66
3.5 向终端用户交付完成的应用程序 67
3.5.1 环境组件 68
3.5.2 应用程序组件 70
3.6 其他提示和技巧 71
3.6.1 将版本信息构建进可执行文件 71
3.6.2 从数据库中部署应用程序 72
3.7 小结 72
第4章 InfoMaker 73
4.1 目标 73
4.2 InfoMaker环境 73
4.2.1 库画板 74
4 2.2 报表画板 74
4.2.3 管道和数据库画板 75
4.2.4 表单画板 75
4.3 部署 75
4.4.2 命令行参数 76
4.4.1 可执行文件的版本编号 76
4.4 新特性 76
4.4.3 新的文件存储格式 77
4.4.4 XML 77
4.5 在何处使用PowerBuilder 78
4.5.1 自定义表单样式 78
4.5.2 默认表单样式 79
4.5.3 行为 80
4.5.4 注册表中工具栏的设置 81
4.5.5 非默认的表单样式 82
4.6 自定义Imstyle9.pbl 82
4.7 局限性 83
4.8 代码的调试 83
4.9 在InfoMaker表单中不使用PowerBuilder编写代码 85
4.10 小结 86
5.2 开发环境 87
第5章 高级编码技术 87
5.1 目标 87
5.2.1 设置开发环境 87
5.2.2 操作系统的支持(XP) 92
5.2.3 库的组织 94
5.3.1 快捷键的使用 96
5.3 IDE 96
5.2.4 库的维护 96
5.3.2 PowerPanel的扩展 97
5.4.1 编码框架 100
5.4 编码 100
5.4.2 事件又是怎样的呢 104
5.4.3 异常处理 105
5.4.4 性能 118
5.4.5 性能小结 121
5.5 数据库的独立性 121
5.5.1 数据库设计 121
5.5.3 嵌入式SQL 122
5.5.2 DataWindow 122
5.6 小结 124
第二部分 DataWindow 125
第6章 高级DataWindow技术 125
6.1 目标 125
6.2 使用表达式 125
6.2.1 设计时的表达式 126
6.2.2 布尔计算 127
6.2.4 运行时的表达式 129
6.2.3 其他计算 129
6.2.5 使用带的表达式 130
6.2.6 使用形状的表达式 131
6.3 DataWindow报告 132
6.3.1 嵌套报告 132
6.3.2 复合报告 134
6.3.3 动态嵌套报告 136
6.3.4 复合和嵌套的区别在哪里 138
6.4 动态SQL 139
6.4.1 动态SQL(格式1) 139
6.4.3 动态SQL(格式3) 140
6.4.2 动态SQL(格式2) 140
6.4.4 动态SQL(格式4) 141
6.5 其他关于SQL的考虑 142
6.5.1 SQLPreview事件 142
6.5.4 SetSQLSelect函数 144
6.5.3 关于Describe函数的重要注意事项 144
6.5.2 TABLE.SELECT属性 144
6.5.5 为什么TABLE/SELECT比SetSQLSelect更受欢迎 145
6.5.6 动态DataWindow 145
6.5.7 最后的关于SQL的想法 146
6.6 使用带的乐趣 147
6.6.1 基础 147
6.6.2 改变Header带 147
6.6.3 删除Detail行 149
6.6.4 组的使用 149
6.7.1 裸露的DataWindow 151
6.7.2 理解语法 151
6.7 动态创建DataWindow对象 151
6.6.5 在带之间移动对象 151
6.7.3 创建动态对象 155
6.8 新的客户/服务器DataWindow特性 156
6.8.1 增强的DataWindow打印功能 156
6.8.2 ClipText 156
6.8.3 OverridePrintJob 156
6.8.4 PrinterName 157
6.8.5 多副本打印 157
6.8.6 Collate 157
6.8.7 检索子DataWindow 157
6.8.8 滚动Group报告 157
6.9 小结 158
第7章 终极DataWindow 159
7.2 绘制简单的图形 159
7.1 目标 159
7.3.1 uo_lbd事件 161
7.3 矩形的创建和操纵 161
7.3.2 uo_mm事件 161
7.3.4 选择对象 162
7.3.3 uo_lbu事件 162
7.4 在DataWindow之内和之间移动图像 164
7.5 在DataWindow之间移动图像 165
7.6 使用元数据创建多图形的DataWindow 167
7.6.1 控制可见的DataWindow对象 168
7.6.2 将元数据应用到DataWindow 169
7.6.3 构造元数据 169
对象的可见属性 169
7.7 操纵元数据 171
7.7.2 跨越多行来显示基于行的对象 174
7.7.1 为某些DataWindow对象属性赋负值 174
7.8 包含的源代码 176
7.9 小结 176
第8章 XML DataWindow 177
8.2 什么是XML 177
8.1 介绍 177
8.3 XML解析器 180
8.4 DataWindow导出引擎 180
8.5 导出模板:图形用户界面 182
8.5.1 导出模板的报头部分 183
8.5.2 导出模板细节部分 186
8.5.3 将DataWindow元素映射到XML节点 186
8.6 导出XML 186
8.8 示例Ⅱ 189
8.7 示例Ⅰ 189
8.9 示例Ⅲ 190
8.10 示例Ⅳ 192
8.11 导入XML 193
8.12 新DLL 194
8.13 小结 194
第9章 Sybase Adaptive Server Enterprise 197
第三部分 数据库连接 197
9.1 目标 197
9.2 连接ASE 197
9.3 数据类型 198
9.4 DataWindow 199
9.4.1 将SQL语句用于源 199
9.4.2 将存储过程用于源 200
9.4.3 将存储过程用于更新 203
9.5.1 作为远程过程调用 208
9.5 存储过程 208
9.5.2 作为嵌入式SQL 210
9.5.3 可选参数 211
9.6 嵌入式SQL 213
9.7 特殊问题 213
9.7.1 identity列 214
9.7.2 隐藏对象所有权 214
9.7.3 使用DBHandle和CT-LIB 214
9.7.4 使用print语句进行调试 216
9.8 小结 217
第10章 Sybase Adaptive Server Anywhere 218
10.1 目标 218
10.2 通过PowerBuilder连接 218
10.3 数据类型 218
10.4 开发需要考虑的因素 219
10.4.1 标识符大小写 220
10.4.2 带有所有者名称的限定SQL 220
10.5 与数据库交互 221
10.5.1 DataWindow 222
10.5.2 直接调用存储过程 230
10.5.3 嵌入式SQL 232
10.6 小结 232
第11章 Oracle 233
11.2 连接Oracle 233
11.1 目标 233
11.3 数据类型 234
11.4 DataWindow 234
11.4.1 为数据源使用SQL语句 234
11.4.2 为数据源使用存储过程 239
11.4.3 为更新而使用存储过程 245
11.4.4 OLE数据库Blob列 246
11.5 存储过程 247
11.5.1 作为远程过程调用(RPC) 247
11.5.2 作为嵌入式SQL 254
11.6 嵌入式SQL 257
11.7.1 用户定义数据类型 258
11.7 特殊问题 258
11.7.2 非法对象 259
11.7.3 使用同义词隐藏方案所有权 260
11.7.4 非智能(代理)主键 260
11.7.5 安全性 262
11.7.7 多个Oracle Home 263
11.7.6 故障切换(failover)支持 263
11.7.8 典型的ORA-xxxxx错误 264
11.7.10 故障排除 265
11.7.9 慢连接 265
11.7.11 全球语言支持 266
11.7.12 共享服务器 267
11.7.13 连接到非Oracle数据库 269
11.7.14 使用DBHandle和OCl DLL 271
11.8 小结 277
第12章 ODBC 278
12.1 目标 278
12.2 什么是ODBC 278
12.3 如何使用ODBC 279
12.3.1 建立配置 279
12.3.2 连接数据库 279
12.3.3 建立对ODBC API的调用 279
12.3.5 检查ODBC API调用的返回值 280
12.4 建立ODBC数据源 280
12.3.4 执行对ODBC API的调用 280
12.5 你机器上的ODBC数据源 281
12.6 ODBC与PowerBuilder事务对象 281
12.7 神奇的文件——PBODB90.INI 286
12.8 排除ODBC故障 288
12.8.1 Database Trace 289
12.8.2 ODBC Driver Manager Trace 290
12.10 小结 291
12.9 ODBC资源 291
13.1 目标 292
第13章 JDBC 292
13.2.2 类型2驱动器 293
13.2.1 类型1驱动器 293
13.2 JDBC体系结构 293
13.2.3 类型3驱动器 294
13.2.4 类型4驱动器 295
13.3 Sybase jConnect for JDBC 296
13.4 开始 297
13.5 指定数据源 298
13.6 建立连接 298
13.8 ResultSet和数据库元数据 299
13.7 执行语句和返回结果 299
13.9 DatabaseMetaData 300
13.10 ResultSetMetaData 300
13.11 使用SybasejConnect的例 301
13.12 JDBC中的事务 304
13.13 在PowerBuilder中使用JDBC 305
13.13.1 准备使用JDBC接口 305
13.13.2 从PowerBuilder定义数据库原型 306
13.13.3 为在EAServer中运行的组件配置选项 307
13.14 小结 309
14.2 DirectConnect体系结构概述 310
14.1 目标 310
第14章 通过Sybase Mainframe Connect的lBM DB2和CICS 310
14.3.1 配置Open Client(开放客户端) 312
14.3 通过PowerBuilder连接 312
14.3.2 配置PowerBuilder连接配置文件 313
14.3.3 其他的连接参数 314
14.3.4 连接初始化 318
14.4.1 Character数据类型 319
14.4 数据类型 319
14.4.2 Distinct数据类型 320
14.4.3 不支持的数据类型 320
14.5 开发需要考虑的因素 321
14.5.1 标识符大小写 321
14.5.2 用所有者名称限定SQL 322
14.5.3 表清单 322
14.5.4 PowerBuilder扩展属性表 324
14.6.1 元数据 325
14.6.2 远程过程调用(RPC) 325
14.6 访问外部数据 325
14.6.3 远程存储过程(RSP) 326
14.6.4 DB2自身存储过程调用 328
14.6.5 处理警告 329
14.7 安全接口 330
14.7.1 SYPM事务 330
14.7.2 TRS选项 331
14.7.3 经由DB2 Access Service的sp_password 332
14.8 小结 333
第15章 IBM Informix 334
15.1 目标 334
15.2 连接Informix 334
15.2.1 Setnet32配置 335
15.2.2 IBM Informix的PowerBuilder数据库配置文件的建立 335
15.3 数据类型 337
15.3.1 DATETIME和TIME数据类型 338
15.3.2 INTERVAL数据类型 338
15.3.3 SERIAL数据类型 339
15.3.4 TEXT和BYTE数据 340
15.3.5 其他数据类型 342
15.4 使用存储过程 344
15.4.1 在DataWindow之内 344
15.4.2 作为一个RPC FUNC 345
15.4.3 在嵌入式SQL内 346
15.4.4 处理RAISE EXCEPTION 347
15.5 外部联合语法 348
15.6 日志模式 348
15.7 AutoCommit 349
15.8 隔离级别(isolation level) 349
15.9 小结 350
16.1 目标 351
16.2 什么是PFC 351
第16章 PowerBuilder基础类库(PFC) 351
第四部分 高级课题 351
16.3 什么是SBA 352
16.4 PFC体系结构 353
16.5 PFC主要对象和服务 354
16.5.1 PFC对象 355
16.5.2 PFC服务 357
16.6 PFC开始向导 361
16.7 PFC快速入门 362
16.9 使用公共PFC对象和服务 363
16.8 PFC示例应用 363
16.9.1 PFC常量 364
16.9.2 菜单 364
16.9.3 数据窗口(u_dw) 366
16.9.4 Resize服务 366
16.9.5 Linkage服务 367
16.9.6 分隔条 368
16.9.7 状态栏服务 369
16.10 更多预编码脚本 369
16.10.1 应用程序对象 370
16.10.3 数据窗口 371
16.10.2 窗口(W_master或Descendant) 371
16.11 提示和诀窍——从PFC中获得 372
最大利益 372
16.13 调试PFC 373
16.13.1 避免出现activate事件 373
16.12 速度要求 373
16.14.1 PowerBuilder 6中PFC的变化 374
16.14 PFC的变化 374
16.13.2 PFC调试日志 374
16.15 PFC资源 375
16.14.4 PowerBuilder 9中PFC的变化 375
16.14.3 PowerBuilder 8中PFC的变化 375
16.14.2 PowerBuilder 7中PFC的变化 375
16.16 小结 376
17.1 目标 377
第17章 第三方工具 377
17.2 目前的状况 378
17.3 如果不去找,就找不到 378
17.3.1 在因特网上寻找工具 378
17.3.2 出版文章和广告 379
17.4 服务于为我们提供服务的人 379
17.5 购买与构建——激战正酣 381
17.6 对选择产品的建议 381
17.6.1 了解自己的需求 381
17.6.2 了解哪些是可用的 382
17.6.3 灵活性 382
17.6.4 考虑重组你的业务过程 382
17.6.5 现实 382
17.6.6 仔细考虑生产产品的公司的稳定性 382
17.6.7 购买源码 383
17.6.8 获得参考 383
17.6.9 别为小钱出汗 383
17.7 工具类型 383
17.7.1 前期开发工具 383
17.7.2 协同执行工具 384
17.7.3 提高效率的工具 384
17.8 产品列表 384
17.8.1 编码实用工具 384
17.8.2 重新生成/构造工具 384
17.8.5 Case、设计和分析工具 385
17.8.4 Web移植工具 385
17.8.6 代码框架 385
17.8.3 测试工具 385
17.8.8 其他的实用工具 386
17.9 其他Sybase 工具 386
17.8.7 终端用户报表工具 386
17.10 小结 387
18.2 Win32 API是什么 388
18.1 目标 388
18.2.1 寻找好的文档 388
第18章 公共控件 388
18.2.2 C语言风格的文档 389
18.2.3 从C的数据类型到PowerBuilder的数据类型的转换 389
18.2.4 从Win32 API调用到PowerBuilder外部函数的转换 390
18.2.5 SendMessageA和SendMessageW的区别 390
18.2.6 重载SendMessage 391
18.2.7 为消息ID创建常量 391
18.2.8 从C的结构到PowerBuilder结构的转换 392
18.2.9 封装Win32 API调用 393
18.2.10 回顾 393
18.3 消息子系统 394
18.3.1 窗口句柄和事件 394
18.3.2 编程实现发送消息 394
18.3.3 子窗口、父窗口和通知消息 396
18.3.4 编程创建窗口 396
18.3.5 回顾 398
18.4 公共控件 398
18.4.1 公共控件列表清单 399
18.4.2 公共控件DLL版本 399
18.4.3 如何确定安装的COMCTL32.DLL是哪个版本 400
18.4.4 回顾 402
18.5 PowerBuilder外部可视化对象 402
18.6.1 从哪里开始 404
18.6.2 初始化公共控件 404
18.6 封装一个公共控件 404
18.6.3 窗口风格和类名 405
18.6.4 消息ID 406
18.6.5 向公共控件发送消息 407
18.6.6 在函数中封装消息 408
18.6.7 将实现与可视化控件联系起来 408
18.6.8 实现非可视化用户对象 409
18.6.9 回顾 417
18.7 创建可视化组件 418
18.7.1 使用公共控件 418
18.7.2 回顾 420
18.8 小结 421
第19章 PowerBuilder本机接口(PBNI) 422
19.1 目标 422
19.2.2 IPB_Value 423
19.2.1 IPB Session 423
19.2 什么是PBNI 423
19.2.3 IPB_Arguments 424
19.2.4 IPB_VM 424
19.3 PBNI SDK 424
19.4 构建PBNI扩展 424
19.4.1 实现PBNI类 425
19.4.2 PBNI要求的功能 426
19.4.3 构建PBNI扩展DLL 428
19.5 你的第一个PBNI类 429
19.5.1 创建PBNI DLL 429
19.5.2 创建PBD 433
19.5.3 创建PB客户端 433
19.5.4 示例回顾 434
19.6 使用PBNI对象 435
19.6.1 用PowerBuilder交换数据 435
19.6.2 调用PowerScript对象函数 436
19.6.3 回顾PBNI回调示例 438
19.7 触发PowerBuilder事件 440
19.8 PBNI全局函数 440
19.9 从PBX内部调用PowerScript系统函数 442
19.10 访问和操作数组 443
19.10.1 PBBoundedArrayCreator 444
19.10.2 PBUnboundedArrayCreator 445
19.10.3 PBArrayAccessor 445
19.10.4 PBBoundedObjectArrayCreator 446
19.10.5 PBUnboundedObjectArrayCreator 446
19.10.6 PBObjectArrayAccessor 447
19.11 PBNI可视化对象 447
19.11.1 GetWindowClassname 448
19.11.2 CreateControl 448
19.11.3 可视化PBNI示例回顾 455
19.12 在PowerBuilder中处理PBNI异常 455
19.13 调试PBNI类 457
19.14 部署你的PBNI扩展 458
19.15 在第三方应用程序中加载PowerBuilder虚拟机 459
19.16 PBNI实用工具 461
19.16.1 PBSIG90 461
19.16.2 PBX2PBD90 462
19.17 小结 462
第20章 对象链接与嵌入 464
20.1 目标 464
20.2 OLE环境 464
20.2.1 早期绑定与晚期绑定 465
20.2.2 ActiveX设计器 465
20.3 OLE自定义控件 466
20.4 OLE自动化 471
20.5 OLEStream和OLEStorage 478
20.6 小结 478
21.1 目标 479
21.2 前景 479
第21章 未来的方向 479
21.3 .NET 480
21.3.1 对XML服务的支持 481
21.3.2 Data Window.NET和DataStore.NET 481
21.3.4 对.NET的支持 482
21.4 Java 482
21.4.1 EAServer中的Web服务 482
.NET 对象 482
21.3.3 从PowerBuilder IDE中创建 482
21.4.2 EJB客户端、PowerBuilder Web服务和JSP 483
21.4.3 第三方应用服务器中的Power-Builder NVO 483
21.5 移动目标 483
21.6 IDE集成 483
21.7 小结 484
附录 485
附录A Sybase自适应服务器企业参考手册 485
附录B Oracle参考手册 495
附录C 第三方工具参考手册 501