第 4章 数据库与数据窗口






























使















使





4.1 数据库的建立与维护
4.2 数据库的连接
4.3 表的建立与管理
4.4 视图的建立与使用
4.5 数据窗口对象
菜单
4.1.1 在 PowerBuilder8.0中 建立和删除 ASA数据库
4.1.2 用 Sybase Central建立和维护 ASA数据库
菜单
数据库的连接
4.2.1 配置 ODBC数据源
4.2.2 建立描述文件( Proflie)
4.2.3 数据库 连接
菜单
表的建立与管理
? 4.3.1 建立新表
? 4.3.2 表的属性设置和有关操作
? 4.3.3 列的属性设置
? 4.3.4 记录操作
菜单
数据窗口对象
?4.5.1 建立数据窗口对象
?4.5.2 定制数据窗口对象
?4.5.3 使用数据窗口对象
菜单
单击 PowerBar工具栏上的, Database”按钮, 系统
打开, Database”窗口, 在, Objects”窗 格中 单击
,ODB ODBC”下, Utilities”左边的, +”号, 使之展
开 。, Database”窗口
双击, Create ASA Database”项 。
在, Database Name”编辑框中输入数据库路径和文
件名 。
删除数据库, 首先单击数据库画板 PainterBar工具栏
上的, Disconnect”按钮, 断开与数据库的连接 。 然
后双击, Utilities”下的, Delete ASA Database”项,
4.1.1 在 PowerBuilder8.0中 建立和删除 ASA数据库
菜单
4.1.2 用 Sybase Central建立和维护 ASA数据库
在 Windows“开始, 菜单中选, 程序 |Sybase|Sybase Central”
项, 打开, SybaseCentral”窗口 。
在 左 边 窗 格 中 选, Adaptive Server Anywhere 7” 下的
,Utilities”。
双击, Create Database”项, 按向导提示输入数据库的路径和文
件名, 其它一般取默认值即可建立数据库文件 。 默认的, User Id”
为, DBA”,“Password”为, SQL”。
删除数据库, 在, Sybase Central”窗口中双击, Erase Database”
项, 按向导提示输入数据库的路径和文件名, 确认后可删除指定的
数据库文件 。
若要添加 ASA数据库用户或更改用户口令, 在, Sybase Central”
窗口的工具栏上单击, Connect”按钮, 选定数据库文件, 输入
,User Id”和, Password”,连接成功后, 单击该数据库的
,User & Groups”项, 在 指 定 的 用 户 名 上 双 击, 在 打 开 的
,Properties”对话框中更改口令 。 双击, Add user”项, 可以添加
新用户 。
菜单
4.2.1 配置 ODBC数据源
【 方法 1】 在 Po werBuilder8,0中, 单击 Po werBar工具栏上的
,Database”按钮, 系统打开, Database”窗口, 在, Objects”窗格中
单击, ODB ODBC”下, Utilities”左边的, +”号, 使之展开 。
双击, ODBC Administrator”项 。
在, ODBC Data Source Administrator”对话框中, 单击, Add...”按钮,
在, Create New Data Source” 对话框 中选择 数据库驱 动程 序
,Adaptive Server Anywhere 7.0”
在, ODBC”标签页中输入, Data source name”( 数据源名 ) 。
在, Login”标签页中输入, User Id”和, Password”。
最后, 单击, 确定,, ODBC数据源就配置完成了 。
【 方法 2】 在 Windows的, 控制面板, 中双击, ODBC Data Sources(32
bit)”图标 接下来的操作与 【 方法 1】 完全相同 。
菜单
4.2.2 建立描述文件( Proflie)
【 方法 1】 在 PowerBuilder8.0中, 单击 PowerBar工具
栏上的, Database”按钮, 系统打开, Database”窗口,
在, Objects”窗格中右击, ODB ODBC”项, 在弹出的
快捷菜单中选, New Profile…”项 。。
单击, OK”按钮, 一个新的描述文件加建立了 。
【 方法 2】 在 PowerBuilder 8.0中, 单击 PowerBar工具
栏上的, DB Profile”按钮 。
右击, ODB ODBC”项, 在弹出的快捷菜单中选, New
Profile…”项 。 出现, Database Profile Setup”对话框 。
接下来的操作与 【 方法 1】 完全相同 。
菜单
4.2.3 数据库 连接
一种是在 PB开发环境中的连接, 其目的是为了对数据库进行操作, 如建立表, 视图,
输入, 修改数据, 设计数据窗口对象等;另一种是用代码连接, 使应用软件在运行时
能够使用数据库 。
1,在 PowerBuilder8.0开发环境中连接数据库
【 方法 1】 单击 PowerBar工具栏上的, Database”按钮, 打开, Database”窗口 。
在, Objects”窗格中用鼠标选中要连接数据库的, Profile”名, 然后单击数据库画板工
具栏 PainterBar上的, Connect”按钮 。
【 方法 2】 单击 PowerBar工具栏上的, DB Profile”按钮, 打开, Database Profile”对话框 。
2,用 代码 连接数据库
通常在应用程序对象的, Open”事件中编写类似于下面这样的代码段, 实现与指定数
据库的连接 。
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=tv_net;UID=;PWD='"
CONNECT USING SQLCA;
If SQLCA.SQLCODE <> 0 Then MessageBox ("数据库连接失败 ",sqlca.sqlerrtext)
Halt
End If
菜单
在需要的描述文件上右击,从弹处的快捷菜单中选, Properties”项
,Database Profile Setup”对话框。
在上面的代码段中用到了 SQLCA,它叫做事务对象。事务对象是一
个特殊的不可视的对象,其功能是为 PowerBuilder程序与数据库之
间提供一个通信区。事务对象当中定义了 PowerBuilder用来与数据
库进行连接的参数。在访问数据库之前,必须先建立一个事务对象,
然后给这个事务对象的属性赋予合适的值,才能通过这个事务对象
与数据库连接,完成所需的数据库操作。代码的前三行就是给事务
对象设置必要的参数。
SQL语言提供了四条用来进行事务管理的语句。
CONNECT:进行数据库连接。
DISCONNECT:断开与数据库的连接。
COMMIT:提交当前事务对数据库已做的所有尚未提交的更新操作。
ROLLBACK:撤消当前事务尚未提交的所有更新操作。
上面代码段中用 CONNECT进行与数据库的连接,如果
SQLCA.SQLCODE不为 0,即连接失败,则显示出错信息并终止应
用程序。 菜单
单击 PowerBar工具栏上的, Database”按
钮, 打开, Database”窗口 。
在, Objects”窗格中用鼠标选中要连接数据库
的描述文件, 进行连接 。 在, Tables”项用鼠标
右击快捷菜单 。 在 快 捷 菜 单 中 选, New
Table…,
定义字段名,, Data Type”定义字段的数据类
型,, Width”定义 字段的数据宽度,, Dec”定
义当字段为数值型时的小数位数,, Null”栏定
义这个字段是否可以取空值, 即是否可以不取
值,, Default”栏用来定义这个字段的缺省属
性, 一般情况下就设为, None”,即不定义缺
省值 。
菜单
4.3.2 表的属性设置和有关操作
在, Database”窗口的, Objects”窗格中单击当前连接的数据库, Tables”项左
边的, +”号 。 在需要设置属性的表名上用鼠标右击, 在快捷菜单中选
,Properies”项, 显示出该表的属性窗格,
在属性窗格的, General”选项卡中可以设置对该表的注释信息, 在另外三个选
项卡中可以分别设置数据, 标题, 标签的字体, 字号等属性 。
快捷菜单的, Alter Table…,用来对表的定义作出一些修改, 选中这个菜单项
后系统会弹出与建立新表类似的窗格, 在这个窗格中, 有一些属性, 如字段
的类型等是灰色的, 表示这些属性是不能被修改, 因为修改会影响表中的已
有数据 。
快捷菜单的, New”中有四个子菜单项, 选中, Index”子菜单项, 可以定义表
的索引字段和索引的名字, 定义索引的好处是可以加快从表中搜索数据的速
度 。
,New”中子菜单项, Primary Key” 用来定义表的主键 。 主键是能够唯一标识
每一行数据的一列或若干列的组合 。 要想对表中数据进行操作, 主键是必不
可少的 。
“New”中子菜单项, Foreign Key” 用来定义表的外码, 所谓外码
就是当前表的一些字段的组合, 这些字段的组合同时又是另一个
表的主键 。
,New”中子菜单项, Column”用添加新列 。
? 快捷菜单, Drop Table”的作用是删除表, 一般不要轻易删除一个
表, 因为删除后就无法恢复了 。
? 快捷菜单, Edit Data”用来对表中的数据进行操作, 如增加, 删除
记录等 。
? 快捷菜单, Data Pipeline”数据管道操作 。
? 快捷菜单, Print Definition”打印出当前表的定义, 打印的格式类
似表定义时的格式 。
? 快捷菜单, Add to Layout”将表添加到布局窗格 。
? 快捷菜单, Export Syntax”用来将定义表的 SQL语句导出到编辑窗
口, 以后需要的时候可以用它生成新表 。
菜单
4.3.3 列的属性设置
?在, Database”窗口的, Objects”窗格中单击某一
个表左边的, +”号,再单击, Columns”左边的, +”
号。
?在需要设置属性的列名上用鼠标右击,在快捷菜
单中选, Properies”项。
?在属性窗格的, General”选项卡中可以设置对该
列的注释信息。
?,Headers”选项卡中可以设置该列的标题和标签。
这里定义的标题和标签在定义数据窗口对象时会自
动被引用,提高设计效率。
?其它选项卡可以定义字段的显示风格、编辑风格、
有效性检查规则等。
菜单
4.3.4 记录操作
PainterBar工具栏上面三个, Data manipulation”按钮变成可用, 这三个按钮都可对当
前表中的数据进行操作, 它们的不同之处在于显示在窗口中的数据的样式不同 。
单击, Data manipulation”按钮, 打开数据操作窗格, 用 PainterBar工具栏上的按钮可
以进行相关的操作 。
其中,, Retrieve”按钮的作用是从数据库中提取数据并显示在窗格中 。
,Save changes”按钮是保存修改的结果到数据库中 。
,Insert Row”和, Delete Row”分别是在窗口中插入和删除一条记录 。
,First”,,Prior”,,Next”,,Last”四个按钮用于记录定位 。
,Print”按钮的作用是打印出窗口中的记录 。
在 PowerBuilder中, 所有对窗口中数据的修改都只是在缓存区中进行的, 只有使用
,Save changes”才能把修改的结果真正存储到数据库中 。
单击, File”菜单的, Save Rows As…,项, 在弹出的对话框中选择存储的文件的类型和
路 径, 就可以将表中数据保存到文件中 。 这个文件可以被其它的软件调用 。
我们也可以把其它格式文件中的数据引入到数据库中作为新的记录 。
单击, Rows”菜单的, Import”项, 单击, 文件类型, 下拉列表框, 可以导入文件中的
数据 。 可导入的数据的文件类型有, Tab Seaprated File (.txt)”和, DebaseII&III
(,dbf), 文件 。
单击, Rows”菜单的, Sort”项, 可以定义排序的字段 。
单击, Rows”菜单的, Filter”项, 在弹出的对话框中定义过滤的条件, 则可对记录进行
过滤 。
菜单
? 视图的作用与表类似, 可以认为是一种逻辑上的表 。 它的数据可以来自
一个或多个表 。
? 使用视图的好处在于隐藏数据库中表的真正结构, 只向用户提供需要的
并且有访问权限的字段, 这样既方便了用户, 同时也可以保证数据库中
表的安全性 。
? 创建一个基于表 txl) 的视图 。
在, Database”窗口的, Objects”窗格中选择, txl”数据库进行连接 。
然后用鼠标右击, Views”项, 在弹出的快捷菜单中选, New View”项,
这时弹出一个名为, Select Tables”的对话框, 用来选择要创建的视图
所基于的表 。
选择表, txl”,然后单击, Open”按钮
视图的字段可以是表中的若干字段通过运算后得到的结果, 我们叫它计
算字段 。 下面就来为视图定义一个计算字段 。
单击窗口下部的, Compute”标签, 在, Computed Columns”栏中输
入计算字段的表达式, 比如输入, dwzh+zzdh”作为计算字段的值, 然
后在 alias栏中给这个新建的计算字段起个字段名为, dh”。
菜单








? 要建立数据窗口对象, 首先必须要与数据库相连 。
? 单击 PowerBar工 具栏上的, New”按钮, 系统弹 出
,New”对话框 。 在对话框中单击, DataWindow”标签,
十一个图标 。 这十一个图标, 每一个代表数据窗口的一种
表现风格 。
? 在, New”对话框中, 选择, Freeform”图标, 然后单击
,OK”按钮 。
? 在, Choose Data Source…,对话框中选择, Quick
Select”,单击, Next”按钮, 打开, Quick Select”对话
框 。
? 在, QuickSelect”对话框中选择需要的表和列 。
? 单击, OK”按钮, 设置颜色等信息 。
? 用类似的方法可以创建一个, Grid”风格的数据窗口对象 。
? 在, New”对话框中, 选择, Grid”图标, 然后单击, OK”
按钮 。
? 在, Choose Data Source…,对话框中, 选择, SQL
Select”( 当然可以用其它数据源 ), 单击, Next”按钮,
打开, SelectTables”对话框 。
? 在, Select Tables”对话框中选择需要的表 txl,单击
,OK”按钮,
?, Grid”风格显示数据的特点是行和列之间用网格线分割,
数据在网格之中。
4.5.1
菜单
4.5.2 定制数据窗口对象
对于已有的数据窗口对象, 首先要将其打开, 才能进行加工 。
而要打开已有数据窗口对象, 先要与相关数据库进行连接 。
方 法 是, 单击 PowerBar工 具 栏 上 的, Database”或, DB
Profile”按钮, 选择数据库的, Profile”,再单击, Connect”
按钮 。
1,打开数据窗口对象
2,视图的带区
3,数据窗口对象的有关控件
4,在数据窗口对象中使用控件
5,记录的过滤、排序和分组
菜单
【 方法 1】
在 PowerBar工具栏上单击, Open”按钮, 打开, Open”
对话框 。
在, Target”下拉列表中选择当前工作空间的一个目标,
在, Object of Type”下拉列表中选择对象类型为
,DataWindows”或, All Objects”,然后双击要打开的
数据窗口对象即可 。
【 方法 2】
在 PowerBar工具栏上单击, System Tree”按钮, 打开
,System Tree”窗口, 选择指定目标, 对象库下的数
据窗口对象, 双击鼠标即可打开 。
【 方法 3】
在 PowerBar 工具栏上单击, Library” 按钮, 打开
,Library”窗口, 在左边窗格中选择文件夹, 对象库,
在右边窗格双击要打开的数据窗口对象即可 。
打开数据窗口对象, 出现数据窗口对象画板, 接下来就
可以对已有的数据窗口对象进行操作了 。










数据窗口对象画板的设计 ( Design) 视图分成为几个带
区, 每个带区对应数据窗口对象的一部分 。
,Header”带区的作用是在数据窗口的顶部显示记录字
段的标题等信息 。 系统自动把所有字段的, Header”属
性值放在, Header”区 。
,Summary”区域用来显示一些统计信息, 比如记录的
总行数, 某个字段的平均值等, 这些内容显示在所有
的记录都显示完之后 。
,Footer”区域用来显示每页数据显示完后的一些信息,
其中最常用的信息就是页码。在, Insert|Contrl”菜单
中选, page n of n”项,或单击 PainterBar工具栏对应
的按钮,然后单击, Footer”区的空白处,相应地显示
出, 'Page ' + page() + ' of ' + pageCount()”。其中,
page()函数可以求出当前页号,pageCount()能够求出
总页数。







在数据窗口对象上可以放置多种控件 。
,标题,,, 字段,,, 当前日期,,, 页码, 等都是控件 。 与
数据窗口对象有关的控件, 可以通过菜单选取, 也可以从
PaintBar 工具栏的图形下拉列表中选取 。
绍数据窗口对象特有的控件及其属性 。
(1)按钮 ( button)
它相当于窗口上的命令按钮或图形按钮, 功能和属性也基本相同 。
击按钮就可以完成特定的功能 。 当然, 也可以对按钮自行编码 。
(2)列 ( Column)
列 ( 字段 ) 控件一般在数据窗口对象创建时自动创建 。 如果需要,
也可以在数据窗口对象中添加列控件 。
(3)计算列
可作为计算列的控件有六种,Computed( 计算列 ), Averging
( 求平均值 ), Counting( 计数 ), Summing( 求和 ), Todays
day( 今天日期 ), Page n of nnn( 页号 ) 。
这些控件从本质上来说都是计算列, 只不过计算函数或表达式不
同 。
(4)嵌套报表 ( Report)
嵌套报表控件一般是一个已经创建的数据窗口对象 。 它作为一个
报表嵌套在当前数据窗口对象上 。













在控件下拉列表中用鼠标单击需要的控件, 然后再单
击数据窗口对象的任意位置, 就可以将该控件放置到
数据窗口对象中 。
在对控件进行操作 ( 如设置属性, 移动, 复制, 调整
大小, 排列等 ) 之前, 要先选中控件 。
要选中单个控件, 用鼠标单击即可 。
若要同时选中多个控件, 可用以下三种方法:
【 方法 1】 移动鼠标指针到想要选择的一组控件的一 ( 不
要放在控件上 ), 按下鼠标左键并拖动鼠标到这组控
件的对角, 形成一个矩形框, 矩形框内的所有控件均
被选中 。
【 方法 2】 按住 Ctrl键, 再单击需要选择的各个控件, 可
以选择不在一起的控件 。
【 方法 3】 先选择一个控件, 按住 Ctrl键, 再按光标控制
键, 可选中该控件以上 ( 下, 左, 右 ) 的所有控件 。










使



(1)记录过滤
在数据窗口对象画板中, 单击, Rows”菜单的, Filter”项, 系统弹出
,Specify Filter”对话框 。 在这里就可以定义过滤数据的条件, 比
如设置过滤条件为, xm ='李石涂 '”,然后单击, OK”按钮
单击 PainterBar工具栏上的, Retrieve”按钮, 数据窗口对象画板上
只显示出满足过滤条件的记录 。 其它记录已经从数据库中提取出
来, 但被刚才定义的条件过滤掉了 。
(2)记录排序
单击, Rows”菜单的, Sort”项, 在弹出的, Specify Sort Colums”对
话框中可以定义数据显示时记录的排列顺序 。 把左边工作区中作
为排序依据的字段用鼠标拖动到右边的工作区, 系统缺省是升序,
单击, OK”按钮, 就定义好了排序方式 。
(3)记录分组
用, Rows”菜单上的, Create Group”项可以对数据进行分组, 。
单击, Create Group”菜单项后系统弹出, Specify Group
Columns” 对话框













4.5.3 使用数据窗口对象
数据窗口对象在应
用程序中的使用,
是通过在窗口中
添加数据窗口控
件来实现的 。 数
据窗口控件与数
据窗口对象的结
合, 是应用程序
访问和操作数据
库的主要手段 。
与其它
PowerBuilder 控
件一样, 数据窗
口控件也有一组
属性, 函数和事
件, 这些属性,
函数和事件是灵
活运用数据窗口
的基础 。
1









2













3








4









5







菜单
1.








定义完一个数据窗口对象后, 要
把它与窗口中的数据窗口控件
联系起来才能处理数据 。 数据
窗 口 控 件 是 标 准 的
PowerBuilder控件, 可以像使
用其它控件一样使用 。
要在窗口中添加一个数据窗口控
件, 首先打开窗口画板, 在
,Insert|Control”菜单中选
,DataWindow”项, 或单击工
具栏上的控件下拉列表, 选择
,Creat DataWindow control”
项, 然后在窗口上单击要添加
数据窗口控件的位置, 即可把
数据窗口控件添加到窗口中 。
2.在数据窗口控件中显示数据
在窗口画板中, 将一个数据窗口对象与一
个数据窗口控件建立连接后, 运行程序,
会发现数据窗口控件中没有显示任何数
据 。 要想在数据窗口控件中显示数据,
还要做以下三件事:
① 创建应用程序与数据库的连接
② 为数据窗口控件设置事务对象
③ 检索数据
3.数据窗口缓存区
数据窗口对象都有三个缓存区,当前 ( Primary) 缓存区, 过滤
( Filter) 缓存区, 删除 ( Delete) 缓存区 。
用户修改数据, 当选定某一列数据项时, PowerBuilder就在光标
位置建立一个临时编辑控件, 编辑控件中的内容为文本, 这时用户
所输入的数据还没有成为数据窗口缓存区中的数据, 只是编辑控件
中的串字符 。 当用户更改了编辑控件中的内容, 按 Tab健或上, 下
移动键等离开该数据项时, PowerBuider就会对临时编辑控件中的
数据进行类型转换 。 如果转换失败, 就会触发 ItemError事件 。 如
果转换成功, 则使用该列的有效性规则判断该数据是否有效, 如果
有效性规则失败也会触发 ItemError事件 。 通过有效性检查后, 数
据进入缓存区 。
当返回值不是 0,说明数据更改失败,PowerBuilder自动触发
ItemError事件。如果更改成功,则触发 ItemFocusChanged事件,
改变光标位置。
4.数据窗口项的引用
数据窗口缓存区中每一个字段都称为一个项 。 在
PowerScript中可以通过字段名或在数据窗口中的列号
来引用每个项 。
利用数据窗口控件中对象的属性可以定义数据窗口对象
中的数据, 使用表达式来引用数据窗口项, 可以对数
据窗口中的某一项, 某一列, 甚至整个数据窗口中的
数据访问 。 使用这种方式不需调用函数, 只用一条语
句就可以完成对数据的直接访问 。
除了用表达式引用数据窗口项以外, 多数情况下还是
要使用函数访问数据窗口项 。 PowerBuilder中有两类
函数可以用来访问数据窗口项 。 一类用来对数据窗口
某一缓存区中的特定的行列的数据进行操作, 另一类
用来设置数据窗口特定行列的数据值 。
5







数据存储对象主要用于不需要可视用户对象, 但又要
利用数据窗口对象功能的情况 。 例如, 使用数据存储
对象实现数据库操作 。 由于数据存储不需要额外的显
示开销, 使用数据存储对象比使用数据窗口对象有更
高的运行效率 。
通常屏幕显示和打印输出的格式有所不同, 所以一般
把显示用的数据窗口对象与数据窗口控件关联, 而把
要打印的数据窗口对象与数据存储对象关联 。 也就是
说, 为打印操作定义另外一个数据窗口对象, 该数据
窗口对象与作为显示用的数据窗口对象具有相同的结
果集 。
使用数据存储对象时, 必须先在程序中为这个数据存
储对象创建一个实例, 然后再为它赋值一个数据窗口
对象 。 接下来的操作与使用数据窗口控件相同, 如设
置数据存储对象的事务对象, 检索数据到数据存储对
象中 。
数据存储对象有两个属性 。 一个是 DataObject属性,
这是一个字符串, 用于指定数据窗口对象的名称, 把
数据窗口对象与数据存储对象关联, 在程序中可以修
改数据存储对象所关联的数据窗口对象 。 另一个属性
是 Object,它的类型是 DWObject,这个属性允许在
程序中使用数据窗口对象内部的对象 。