杰瑞科技汇

PowerBuilder教程怎么学?从哪开始学?

PowerBuilder 综合教程

第一部分:PowerBuilder 是什么?为什么学习它?

在学习之前,我们先要了解 PowerBuilder 的定位和现状。

PowerBuilder教程怎么学?从哪开始学?-图1
(图片来源网络,侵删)

什么是 PowerBuilder? PowerBuilder(简称 PB)是由 Sybase 公司(后被 SAP 收购)开发的一款快速应用开发工具,它以其独特的 数据窗口 技术而闻名于世,主要用于构建企业级的客户机/服务器应用程序。

核心特点:

  • 数据窗口: 这是 PB 的灵魂,它是一个强大的数据对象,可以轻松地实现数据的增、删、改、查、数据过滤、排序、统计、报表生成等功能,极大地简化了数据库操作。
  • 面向对象: PB 使用 PowerScript 语言,支持面向对象的编程思想,如封装、继承、多态,使得代码复用和模块化开发成为可能。
  • 可视化开发: 提供了直观的图形化界面设计器,通过拖拽控件即可快速构建用户界面。
  • 原生数据库连接: 对多种主流数据库(如 Oracle, SQL Server, Sybase ASA/ASE, DB2 等)提供了非常高效和稳定的原生连接方式。

学习 PowerBuilder 的价值:

  • 维护和升级现有系统: 全球仍有大量关键业务系统(如金融、电信、制造等领域)使用 PB 开发,掌握 PB 是维护这些系统、保障业务连续性的必备技能。
  • 快速开发 C/S 应用: 对于需要快速构建客户端/服务器架构的中小型应用,PB 依然具有开发效率高的优势。
  • 理解经典架构: 学习 PB 有助于你理解 C/S 架构、多层架构以及数据库应用开发的经典模式,对理解其他技术(如 .WinForms, Java Swing)也有帮助。

当前状态:

PowerBuilder教程怎么学?从哪开始学?-图2
(图片来源网络,侵删)
  • 不再是主流新宠: 对于全新的 Web 和移动应用开发,PB 已不是首选技术。
  • 生命力依然存在: 在企业应用维护和特定领域,PB 依然拥有稳定的用户群和强大的生命力,SAP 也持续为其提供更新和支持。

第二部分:开发环境准备

在开始编码之前,你需要搭建好开发环境。

安装 PowerBuilder

  • 版本选择: 常见的稳定版本有 5, 6, 2025 (版本号 17.0), 2025 (版本号 19.0), 2025 (版本号 22.0),建议从 2025 或更高版本开始,它们对现代操作系统(如 Windows 10/11)的支持更好。
  • 获取安装包: 你可以从 SAP Marketplace 下载试用版或购买正式版,一些社区或论坛也可能有旧版本的资源。
  • 安装过程: 运行安装程序,按照向导完成安装,安装时请确保选择正确的数据库接口(如 ODBC, Native Driver for Oracle/SQL Server 等)。

安装数据库

  • 选择: 为了学习和练习,你可以选择一款易于安装和配置的数据库。
    • SAP SQL Anywhere (ASA): 这是 PB 的“最佳拍档”,安装包小,功能齐全,PB 对其支持最好,PB 安装包通常会自带一个 ASA 数据库。
    • Microsoft SQL Server Express: 免费,功能强大,是企业级应用的主流选择之一。
    • Oracle Express Edition (XE): 免费,功能强大的数据库。
  • 创建数据库和用户: 安装数据库后,创建一个用于练习的数据库和一个具有读写权限的用户。

配置数据库连接

PowerBuilder教程怎么学?从哪开始学?-图3
(图片来源网络,侵删)
  • 打开 PowerBuilder。
  • 使用 Database 画笔。
  • 通过 ODBC 或数据库的 Native Driver 创建数据库配置文件(Profile),填写数据库服务器名、数据库名、用户名、密码等信息。
  • 测试连接,确保可以成功连接到你的数据库。

第三部分:核心概念与基础语法

这是学习 PowerBuilder 的基石。

PowerBuilder 开发对象

  • 应用: 整个程序的入口点,管理全局变量和对象。
  • 窗口: 用户界面的容器,包含各种控件。
  • 数据窗口对象: 数据的展示和处理逻辑,它是一个独立于窗口的对象,可以在多个窗口中复用。
  • 菜单: 定义窗口的菜单栏。
  • 用户对象: 可重用的自定义控件或业务逻辑组件。
  • 函数: 封装一段可重复执行的代码。
  • 结构: 用于存储一组不同类型的数据。

PowerScript 语言基础

  • 变量声明:

    integer li_age
    string ls_name
    date ld_today
    // 声明全局变量在应用画笔的 Declare Global Variables 中
  • 基本数据类型: integer, long, decimal, real, double, string, date, datetime, boolean

  • 运算符: 与其他语言类似,包括算术、关系、逻辑运算符。

  • 控制流:

    • If...Then...Else:

      if li_age > 18 then
          ls_message = "成年人"
      else
          ls_message = "未成年人"
      end if
    • CHOOSE CASE:

      choose case ls_grade
          case 'A'
              ls_comment = "优秀"
          case 'B'
              ls_comment = "良好"
          case else
              ls_comment = "及格"
      end choose
    • 循环:

      // FOR 循环
      for integer i = 1 to 10
          // ...
      next
      // DO...LOOP 循环
      do while li_count < 100
          // ...
          li_count++
      loop

窗口与控件

  • 创建窗口: 在 Window 画笔中新建一个窗口。
  • 常用控件:
    • CommandButton (命令按钮)
    • SingleLineEdit (单行文本框)
    • MultiLineEdit (多行文本框)
    • StaticText (静态文本)
    • GroupBox (分组框)
    • ListBox (列表框)
    • DropDownListBox (下拉列表框)
    • DataWindowControl (数据窗口控件,用于显示数据窗口对象)
  • 事件与脚本: 为控件编写事件处理脚本,为“查询”按钮的 Clicked 事件编写代码来执行数据查询。

第四部分:PowerBuilder 的灵魂——数据窗口

这是掌握 PB 的关键一步。

数据窗口的两种形态

  • 数据窗口对象: 在 DataWindow 画笔中创建,它定义了数据如何从数据库中获取、如何展示(布局、样式)、以及如何编辑,它是一个“模板”。
  • 数据窗口控件: 放置在窗口上的一个控件,它是数据窗口对象的“容器”或“显示者”。

创建数据窗口对象

  • 打开 DataWindow 画笔。
  • 选择数据源:
    • Quick Select: 最简单,用于单表查询。
    • SQL Select: 最常用,可以编写复杂的 SQL 语句,支持多表连接、排序、分组等。
    • Stored Procedure: 调用存储过程。
    • External: 用于显示非数据库来源的数据。
  • 选择显示风格:
    • Grid (网格): 类似 Excel,数据以表格形式展示。
    • Tabular (列表): 每条记录占一行。
    • Freeform (自由格式): 每个字段独立放置,适合表单录入。
    • Group (分组): 按指定字段分组显示。
    • Graph (图形): 以图表形式展示数据。
    • Crosstab (交叉表): 类似 Excel 的数据透视表。
  • 定义布局、颜色、字体等属性,然后保存数据窗口对象。

在窗口中使用数据窗口

  1. 在窗口上放置一个 DataWindowControl 控件。

  2. 在其属性中,选择 DataObject 属性,并指定你刚刚创建的数据窗口对象。

  3. 在窗口的 Open 事件或某个按钮的 Clicked 事件中,编写代码连接数据并检索数据:

    // 假设 dw_1 是数据窗口控件的名称
    // 1. 设置事务对象 (通常在应用初始化时完成)
    // SQLCA.DBMS = "ODBC"
    // SQLCA.AutoCommit = False
    // SQLCA.DBParm = "ConnectString='DSN=MyDSN;UID=user;PWD=pass'"
    // 2. 连接数据库 (如果未连接)
    // CONNECT USING SQLCA;
    // 3. 检索数据
    dw_1.SetTransObject(SQLCA) // 将数据窗口控件与事务对象关联
    dw_1.Retrieve() // 执行 SELECT 语句并填充数据

数据窗口的常用函数

  • Retrieve(): 检索数据。
  • Update(): 将数据窗口中的修改保存到数据库。
  • InsertRow(): 插入一行新数据。
  • DeleteRow(): 删除一行数据。
  • SetFilter() / Filter(): 设置过滤条件并应用过滤。
  • Sort(): 对数据进行排序。

第五部分:实战项目示例

让我们通过一个简单的“员工信息管理系统”来串联所学知识。

项目目标: 实现对员工信息的浏览、查询、新增、修改、删除功能。

步骤 1:准备数据库 在数据库中创建一个 employee 表:

CREATE TABLE employee (
    emp_id INT PRIMARY KEY,
    emp_name VARCHAR(50),
    emp_dept VARCHAR(50),
    emp_salary DECIMAL(10, 2),
    hire_date DATE
);

并插入一些测试数据。

步骤 2:创建数据窗口对象

  1. 打开 DataWindow 画笔。
  2. 选择数据源为 SQL Select,连接到你的数据库,选择 employee 表的所有字段。
  3. 选择显示风格为 Grid
  4. 调整列的标题和宽度,保存为 d_employee_grid

步骤 3:设计主窗口

  1. 创建一个新的窗口 w_main
  2. 在窗口上放置以下控件:
    • 一个 DataWindowControl,命名为 dw_employees
    • 一个 GroupBox,命名为 gb_query
    • gb_query 内部:一个 StaticText (显示“姓名”),一个 SingleLineEdit (命名为 sle_name),一个 CommandButton (命名为 cb_query)。
    • 一个 CommandButton (命名为 cb_add),文字为“新增”。
    • 一个 CommandButton (命名为 cb_update),文字为“修改”。
    • 一个 CommandButton (命名为 cb_delete),文字为“删除”。
    • 一个 CommandButton (命名为 cb_exit),文字为“退出”。

步骤 4:编写脚本

  1. 窗口 w_mainOpen 事件:

    // 设置数据窗口对象
    dw_employees.DataObject = "d_employee_grid"
    // 关联事务对象并检索数据
    dw_employees.SetTransObject(SQLCA)
    dw_employees.Retrieve()
  2. “查询”按钮 cb_queryClicked 事件:

    string ls_filter
    // 构建过滤条件
    ls_filter = "emp_name like '%" + sle_name.Text + "%'"
    // 应用过滤
    dw_employees.SetFilter(ls_filter)
    dw_employees.Filter()
  3. “新增”按钮 cb_addClicked 事件:

    // 在数据窗口的第一行前插入一行空行
    dw_employees.InsertRow(0)
    // 让用户可以编辑新行
    dw_employees.SetRow(1)
    dw_employees.SetColumn("emp_name")
  4. “修改”按钮 cb_updateClicked 事件:

    // 检查是否有行被选中
    if dw_employees.RowCount() > 0 and dw_employees.GetRow() > 0 then
        // 数据窗口处于自动更新模式,只需让用户编辑
        // 保存操作在“保存”按钮或单独的按钮中完成
        Messagebox("提示", "请直接在数据窗口中修改数据,然后点击保存。")
    else
        Messagebox("提示", "请先选择要修改的员工。")
    end if

    注意:更常见的做法是双击某行弹出一个修改窗口,或者将“修改”和“保存”合并为一个按钮。

  5. “删除”按钮 cb_deleteClicked 事件:

    integer li_row
    li_row = dw_employees.GetRow()
    if li_row > 0 then
        if MessageBox("确认", "确定要删除选中的员工吗?", Exclamation!, YesNo!) = 1 then
            dw_employees.DeleteRow(li_row)
        end if
    else
        Messagebox("提示", "请先选择要删除的员工。")
    end if
  6. “退出”按钮 cb_exitClicked 事件:

    // 关闭窗口
    Close(Parent)
  7. 为数据窗口控件 dw_employees 添加事件:

    • ItemChanged 事件中,可以编写数据校验逻辑。
    • DBError 事件中,可以捕获数据库错误并显示友好的错误信息。

第六部分:进阶主题

当你掌握了基础后,可以学习这些更高级的主题。

  1. 用户对象:

    • 可视化用户对象: 将一组常用的控件(如一个带标签和输入框的组合)封装成一个可复用的控件。
    • 类用户对象: 封装非可视化的业务逻辑,如一个“订单处理”对象,提供处理订单的方法。
  2. PBL (PowerBuilder Library) 管理:

    • PBL 文件(.pbl)是 PB 存放所有对象的二进制文件。
    • 学会如何组织和管理多个 PBL 文件,对于大型项目至关重要。
  3. 应用部署:

    • 使用 PowerBuilder Deployment Kit (PBDK)InstallShield 等工具,将你的应用打包成可执行文件(.exe)和动态链接库(.dll)。
    • 需要部署 PB 运行时库数据库接口数据库客户端 到目标机器上。
  4. Web Forms (PB 12.5 及以上版本):

    了解如何使用 PB 开发 Web 窗口应用,这是 PB 适应现代开发的重要方向。

  5. .NET 集成 (PB 12.5 及以上版本):

    了解如何将 PB 的业务逻辑封装成 .NET 程序集,供 C# 或 VB.NET 调用。


第七部分:学习资源推荐

  1. 官方文档:

    SAP Help Portal:这是最权威、最准确的学习资料,搜索 "PowerBuilder Documentation" 即可找到。

  2. 经典书籍:

    • 《PowerBuilder 9.0 实用教程》
    • 《PowerBuilder 开发技术详解》
    • 虽然书籍版本可能稍旧,但核心思想和技术是相通的。
  3. 在线社区与论坛:

    • SAP Community - PowerBuilder Space: 官方社区,可以提问和获取最新资讯。
    • ITPUB (ITpub.net) / CSDN / 博客园: 搜索 "PowerBuilder",可以找到大量国内开发者的技术文章、经验分享和问题解答。
  4. 视频教程:

    • BilibiliYouTube 等视频网站上搜索 "PowerBuilder 教程",可以找到一些入门和进阶的视频课程。

总结与建议

  • 从实践开始: 不要只看理论,跟着教程动手敲代码,创建一个小的项目是最好的学习方式。
  • 精通数据窗口: 把 80% 的精力花在学习和精通数据窗口上,这是你未来开发效率的关键。
  • 拥抱社区: 遇到问题时,学会在社区中搜索和提问,这是解决问题的捷径。
  • 保持耐心: PowerBuilder 是一门经典的技术,其设计理念可能与现代 Web 开发有很大不同,理解它的历史背景和设计哲学,会让你更好地掌握它。

祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇