PowerBuilder中数据窗口之属性编程技术

时间:2022-10-17 01:59:53

PowerBuilder中数据窗口之属性编程技术

摘要:数据窗口对象及其所有实体(如列、文本、图形、图像等)都有一组属性值。本文主要介绍了如何编写代码查看和修改这些属性,以达到在程序运行过程中动态修改数据窗口的数据源和外观界面的目的。

关键词:PowerBuilder;数据窗口;getsqlselect函数;describe函数;modify函数

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)19-30063-02

How to Script about Datawindow in Languages of PowerBuilder

QIN Fei-zhou

(College of Physic & Electronic Information, Ningxia University, Yinchuan 750021, China)

Abstract: Each column and graphic object in the DataWindow has a set of properties, which are listed in the DataWindow Reference. You specify one or more properties as a string and Describe returns the values of the properties.

Key words: PowerBuilder; DataWindow; Function of getsqlselect; describe and modify

数据库类应用系统的开发,主要目的是组织处理数据。而数据窗口对象是PowerBuilder提供给开发人员一个操作数据的强有力的工具,也是PowerBuilder与其他面向对象的数据库应用前端开发工具的最主要的区别之一。通过数据窗口控件,开发人员可以查询并修改数据、改变数据的表现形式、处理错误及共享数据等。

数据库窗口对象是用于查询、显示和维护来自关系型数据库或其他数据源(如Excel或dBASE文件)数据的对象。在数据窗口对象中可以定义数据的显示格式、显示风格和其他数据属性,使数据对用户更加直观和更有意义。开发人员可以通过定义数据窗口对象来指定数据源、表现风格以及其他数据属性,但利用编程对数据窗口进行修改则更应该是开发者所必需掌握的技术。下面将主要介绍几种关于数据窗口的编程方法。

1 动态修改数据窗口对象的数据源

当我们建立一个数据窗口时必须确定其数据源,一旦这个数据窗口建立完毕后,它的数据源也就确定了。如果想改变改变数据源,可用以下两种方法实现。

方法1:

string d_name

dw_1.dataobject=d_name

dw_1.settransobject(sqlca);

这段代码可以动态地修改数据窗口控件dw_1所关联的数据窗口对象。数据窗口对象的名称放在字符串变量d_name中,数据窗口控件dw_1所关联的数据窗口对象随变量d_name的变化而变。

方法2:

string OldSyn, NewSyn

//获取与数据窗口dw_emp相关的SQL SELECT语句

OldSyn = dw_emp.GetSQLSelect()

//指定新的SQL SELECT语句

NewSyn = 'SELECT employee.EMP_Name FROM employee WHERE salary < 100000'

IF dw_emp.Retrieve() = 0 THEN

dw_emp.SetSQLSelect(NewSyn) //为dw_emp设置新的SQL SELECT语句

dw_emp.Retrieve()

END IF

用上述方法可以为数据窗口改变SQL SELECT语句。这两个方法都可以改变数据窗口的数据源,方法一的代价是需要作多个数据窗口,方法二的适用范围是用户对数据进行隐蔽操作。开发人员可根据实际需要进行选择使用。

2 修改数据窗口所包含对象的属性

数据窗口对象属性主要用来存储控制数据窗口对象行为的有关信息。开发人员通过修改这些内容可以给用户提供一个外形动态变化的数据窗口,而无须做多个类似的数据窗口。这里所讲的属性不是数据窗口控件的属性,而是在数据窗口控件中所显示的对象(如column、text)的属性。在数据窗口画板中可以确定数据窗口对象属性,也在程序代码中修改对象的属性值。

2.1 获得对象的属性表达式

Describ函数主要是用于获取数据窗口对象或非数据窗口对象中的对象属性。数据窗口中的每个对象(如column、text)都有一个属性集。将一个或多个属性可设定成一个字符串,Describe返回这个字符串的内容。属性列表中属性的格式:对象名称.属性。参看以下例子:

string data_type

int data_value

//返回数据窗口dw_1的列对象salary的数据类型

data_type=dw_1.describe("salary.coltype")

//如果列对象salary的数据类型是number(数值型)

if data_type="number" then

//将第一行salary列的值复制到变量data_value

data_value=dw_1.getitemnumber(1,"salary")

end if

如果对象是列,可指定列名或指定以'#'开始的列号,数据窗口画板可自动给出列的名字和列的标识。下面两条语句功能相同,都是获取当前列的数据类型。

String s,t

s=this.describe('#' +string(this.getcolumn())+'.coltype')

t=this.describe(this.getcolumnname()+'.coltype')

2.2 Modify函数的使用

Modify函数用于修改一个数据窗口对象的属性值,通过修改属性值,通过说明可以修改数据窗口对象的外观、行为和数据源信息,还可为数据窗口增加或移走对象。Modify函数一般用于下列内容的修改:

1)修改颜色、设置字体、对象的其他外观属性。

2)在数据窗口中修改不同表的update状态,可以同时修改多个表。

3)修改数据窗口对象的SELECT 和WHERE子句。

4)调整Query 模式或Prompt For Criteria,使用户可以规定所需要的数据。

5)修改Retrieve Only As Needed的状态。

6)修改数据窗口的数据源

7)控制Print Preview的显示。

8)在数据窗口中增加和删除对象(如lines 或bitmaps)

PowerBuilder包含了许多修改数据窗口属性的函数。在使用Modify之前,必须检查用于对象的控件上的数据窗口的函数列表,确保产生修改的函数是存在的。

例:数据窗口对象关联了department和empolyee两个表,修改department表时,没有设置状态标志,随后employee表被修改。如果所有有修改都成功,update命令设置标志位,并使用commit命令提交这个修改。

integer rc

string err

// 修改department,如同在数据窗口画板中一样

rc = dw_1.Update(TRUE, FALSE) //

IF rc = 1 THEN //如果表department已被更新成功

//禁止表department的列新

dw_1.Modify("department_dept_name.Update = No")

dw_1.Modify("department_dept_id.Update = No")

dw_1.Modify("department_dept_id.Key = No")

// 使employee表成为可更新的

dw_1.Modify("DataWindow.Table.UpdateTable = ~"employee~"")

//返回对表employee列的修改

dw_1.Modify("employee_emp_id.Update = Yes")

dw_1.Modify("employee_emp_fname.Update = Yes")

dw_1.Modify("employee_emp_lname.Update = Yes")

dw_1.Modify("employee_emp_id.Key = Yes")

//更新表employee

rc = dw_1.Update()

IF rc = 1 THEN //两个表都更新成功

COMMIT USING SQLCA;

ELSE

ROLLBACK USING SQLCA; // 表employee更新失败

MessageBox("提示信息","表employee更新失败!")

END IF

ELSE//表department更新失败

ROLLBACK USING SQLCA;

MessageBox("提示信息","表department更新失败!")

END IF

参考文献:

[1]王姗,萨师煊. 数据库系统概论[M]. 4版. 高等教育出版社,2006.

[2]高守传,刘小静. 使用嵌入式SQL访问数据库[J]. 电脑编程技巧与维护,2007(2).

[3]吴飞,王昕. 嵌入式移动数据库SQL SERVER for Windows CE的应用[J]. 微计算机信息,2006(7).

[4]张继德,史宝英. PowerBulider大型结果集的处理[J]. 电脑知识与技术,2006(11).

[5]崔巍. PowerBuilder7.0应用技术[M]. 清华大学出版社,2000.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:在VB中应用ADO数据对象访问数据库 下一篇:基于多Agent的网上教学模型的研究