PowerBuilder常用函数功能和用法解析

郭宝利先生在他的帮助文档里总结的一个系统用到的所有函数,他们也是软件开发中常用的,为了方便查阅,我把这些函数按照字母顺序进行了整理并添加了使用方法,方便我和一些其他的初学者学习使用:

1.AcceptText 将“漂浮”在数据窗口控件上编辑框的内容放入到数据窗口控件的当前项中(主缓区中)。
用法:
dwcontrol.AcceptText ( )
dwcontrol:数据窗口控件名
返回值:Integer。函数执行成功时返回1,出现错误(比如数据不满足有效性规则)时返回-1。
注意: (1)在将数据放入到当前项之前,编辑框中的数据必须通过有效性规则检查
(2)不要在数据窗口控件的ItemChanged事件处理程序中调用AcceptText()函数。AcceptText()函数还可能触发数据窗口控件的ItemChanged或ItemError事件。
例子:

2.Choose Case 条件分支语句
例子:对于不同的重量,提供不同的处理
CHOOSE CASE Weight
CASE IS<16
Postage=Weight*0.30
Method=“USPS”
CASE 16 to 48
Postage=4.50
Method=“UPS”
CASE ELSE
Postage=25.00
Method=“FedEx”
END CHOOSE

3.Close 关闭 立即关闭程序

Close事件在触发Deconstructor之前所执行的最后一个事件,CloseQuery事件在Close事件触发之前发生。设置CloseQuery事件是为了增强可靠性。通常在CloseQuery事件中判断某些工作是否完成,并显示一个提示窗口询问用户,根据用户的确认,返回一个值来决定是否触发窗口的Close事件。返回值为1,表示取消关闭动作;返回值为0,表示继续执行Close事件。
比如,可以在CloseQuery事件中编写如下脚本,判断是否保存了数据窗口中的修改,并询问用户是否保存数据,根据用户的回答决定是否触发Close事件。在“关闭”按钮上编写脚本Close(parent),然后在CloseQuery中编写如下脚本:
Int li_flag
//如果数据窗口中没有修改,则允许执行Close,直接返回
If dw_user.ModifiedCount() <= 0 And dw_user.DeletedCount() <= 0 Then Return 0
//如果数据窗口有修改,询问用户是否保存
li_flag = MessageBox(“提示”,“数据已经修改,是否保存?”,question!,yesnocancel!,1)
Choose Case li_flag //根据用户选择执行
Case 1 //用户选择要保存数据
If dw_user.Update() = 1 Then //如果修改数据成功
Commit;
//提交
Return 0 //继续执行Close事件
Else //修改数据不成功
Rollback;
//回退事务
li_flag = MessageBox(“提示”,“数据错误,是否继续关闭!”,question!,yesnocancel!,2) //显示错误
If li_flag = 1 Then
Return 0 //允许关闭
Else
Return 1 //不允许关闭
End If
End If
Case 2 //用户选择不保存数据
Rollback;
//回退事务
Return 0 //允许执行Close事件
Case 3 //用户选择取消
Return 1 //不允许关闭
End Choose //用户所有的选择情况处理完毕

4.CloseWithReturn 带返回值的关闭
用法:
closewithreturn(要关闭的窗口,‘要返回的值’)
要返回的值存在stringparm内,获取方法如下:
接收返回的值 = message.stringparm
例子:
closewithreturn(parent,‘abc123’)

String s
s = Message.StringParm

5.commit 提交
用法:
sql语句,提交更改
例子:

6.connect; 连接数据库

8.count 计算数据窗口规定的行数

9.Create函数 使用数据窗口源代码创建数据窗口对象,并将该对象放入指定的数据窗口控件或数据存储对象中。此动态数据窗口对象不会成为应用程序源库的永久部分。

例子:
string error_syntaxfromSQL, error_create
string new_sql, new_syntax
new_sql = 'SELECT emp_data.emp_id, ’ &

  • 'emp_data.emp_name ’ &
  • 'from emp_data ’ &
  • ‘WHERE emp_data.emp_salary>45000’
    new_syntax = SQLCA.SyntaxFromSQL(new_sql, &
    ‘Style(Type=Form)’, error_syntaxfromSQL)
    IF Len(error_syntaxfromSQL) > 0 THEN
    // Display errors
    mle_sfs.Text = error_syntaxfromSQL
    ELSE
    // Generate new DataWindow
    dw_new.Create(new_syntax, error_create)
    IF Len(error_create) > 0 THEN
    mle_create.Text = error_create
    END IF
    END IF
    dw_new.SetTransObject(SQLCA)
    dw_new.Retrieve()

10.Create语句 创建对象使用 类似java的new关键字 用法 objectvariable = CREATE objecttype
例子:
transaction DBTrans
DBTrans = CREATE transaction
DBTrans.DBMS = 'ODBC

11.dbname 属性,数据库的名字
dbcol = dw_1.Object.emp_id.dbName

12.DeletedCount 检查数据窗口自上次更新所删除的行数
如果deletedcount()+modifiedcount()> 0 则表明数据窗口有操作

13.DeleteRow 删除数据窗口的一行 dw_control.DeleteRow(rownumber)
(1)函数功能:删除行, 将被删除的数据从数据窗口的主缓存区移放到删除缓冲区
dw_name.deleterow(row) \当前行的话为0,其它的为行数
row—要删除的行号,row=0时删除当前行。成功时返回1,失败时返回-1
(2)实例:删除数据窗口控件的dw_1中的第10行: dw_1.DeleteRow(10)
14.Describe 判断数据窗口指定字段的数据类型
例子:
Dw_1.describe(“colname.coltype”) 返回string

15.destroy语句 在是用create关键字创建对象之后销毁对象
释放destroy dbtrans

16.Disconnect 断开连接数据库

17.dwo对象 即为datawindow object 数据窗口对象
数据窗口的即写即现
string ls_name,ls_staffcode
choose case dwo.name
case ‘xf_staffcode’
ls_staffcode = trim(data)
If gnv_data.of_HaveValue( ls_staffcode ) Then
select xf_name into :ls_name
from xf_staff
where xf_staffcode = :ls_staffcode
using itrans_current;
this.setitem(row,‘xf_name’,ls_name)
end choose

18.error error事件

19.Filter 按条件过滤数据窗口数据,配合setfilter()使用,先设置过滤条件,再执行过滤

20.GetClickedRow 得到用户点击的行号

21.GetItemStatus 报告一行中行或者列的修改状态。//暂时不会用
dw_name.getitemstatus(row\第几行,哪一列,哪个缓冲区)
缓冲区有三种:应该有四种的,不过另一种原始缓冲区不常用
primary! delete! filter!
状态有四种:
datamodified! new! newmodified! notmodified!
22.GetItemString 读取数据窗口中的值,条件是这个值必须是字符
例子:
dw_1.getitemstring(1,3) //取得第2行,第4列的值(行列起始从0开始标)

23.GetRow 得到行号

24.GetSelectedRow 得到选择的行号

25.GetSqlSelect 获得数据窗口的sql语句
例子:
dw_name.getsqlselect()

26.halt close; 先触发关闭事件,关掉主线程并释放资源

27.idle 在规定的时间内触发事件
例子:
idle(60) //如果60秒没有操作的话就触发application对象的idle事件

28.insertrow 插入新行,该函数有一个返回值,该值为新插入这条记录的行号。
用法:
dw_1.insertrow(cur_row)其中,dw_1为datawindow控件名,cur_row为一具体的行号,在该行前插入一新行。
例子:
dw_1.insertrow(4) //将在第4行前插入一条空记录
29.integer 1.数据类型:int类型包装类,属于对象 2.函数:可将字符串转换为integer类型
用法:
integer( string a )
例子:
integer(‘123’) //把字符串‘123’转换为整数类型

30.IsNull 判断变量是否为空
用法:
isnull( any ) // any为任意类型变量
例子:
string ls_a
isnull(ls_a) //判断ls_a是否为空

32.IsNumber 判断变量是否为数字
用法:
isnumber(any) //判断变量any是否为数字,是的话返回true
例子:
int a
string b
a = 123
b = ‘abc’
isnumber(a) //返回true
isnumber(b) //返回false

33.isRowModified 是否修改过该行
if dw_1.modifiedcount()+dw_1.deletedcount()>0 then
…//数据窗口处于修改状态
end if

34.isRowNew 数据窗口中的if函数,判断行是否是新建的
用法:
if(true\false,‘为true时返回的值’,‘为false时返回的值’,)
例子:
如:if(isrownew(),‘新’,if(isrowmodified(),‘改’,‘旧’))

35.IsSelected 是否被选中
用法:
dw_1.isselected(rownumber)
例子:
dw_name.isselected(用循环语句检查每一行是否被选择li_row)

36.KeyDown 键盘键按下触发

37.Len 判断字符串长度
用法:
得到Blob类型变量的数据长度,以字节为单位。
Len ( blob )
参 数:blob:Blob类型变量。
返回值:Long。函数执行成功时返回blob变量的长度,发生错误时返回-1。如果任何参数的值为NULL,则Len()函数返回NULL。
例子:

(4)用法:如果在说明Blob类型的变量时指定了变量长度,那么对该变量来说,Len()函数得到的就是这个指定的长度。如果在变量说明时未指定变量长度,那么PowerBuilder在赋值时调整长度,未赋值Blob类型变量的长度为0。

38.lower&upper 转换大小写
用法:
将字符串中的大写字母转换为小写字母。
Lower(string) 转换为小写

39.Message 系统预设全局变量,窗口之间传递消息使用

40.MessageBox 提示框

41.Mid 居中

42.ModifiedCount 修改的行数

43.Modify 修改数据窗口相关内容:外观,行为,数据库信息
用法:
更多例子参考f1帮助
string dwcontrol.Modify ( string modstring ) //参数都用string类型传入
例子:
dwcontrolname.Modify ( “DataWindow.Color=‘long’” )

44.Open 打开窗口
用法:
open(windowname)
例子:
open(w_1)

45.OpenWithParm 在打开窗口时传入参数
用法:

46.parent 关键字,代词,表示当前组件所在的父组件
用法:
在关闭窗口时用到,在按钮内编辑代码,在使用close(parent)则关闭按钮所在的窗口
例子:
close(parent) //关闭当前组件的所在的窗口

47.Pos 寻找字符在字符串中的位置
用法:
Pos ( String1,String2 {, start } ) //string1 从这个字符串中查找,string2 要查找的字符串, long 从第几个字符开始查找
例子:
long p1,p2
p1 = pos(‘aabcdaee’,‘a’,0) //返回值为0,字符串下标从1开始,不存在时返回0
p2 = pos(‘aabcdaee’,‘a’,3) //返回值为6

48.PostEvent 延时触发事件
triggerevent 是即时触发事件与postevent不同

49.print 打印
用法:
数据窗口名.print() 打印这个数据窗口的内容
例子:
dw_error.print() //打印错误窗口的错误信息
50.ProfileString 从ini配置文件中提取string数据
用法:
profilestring(‘文件名,可以包含路径’,‘主要字节’,‘在主要字节下的关键字’,‘如果找不到数据则返回的数据’)
例子:
//读取数据库的名称和密码
SQLCA.Database = ProfileString(‘setup.ini’,‘database’,‘Database’,’’)
SQLCA.LogPass = ProfileString(‘setup.ini’,‘database’,‘LogPass’,’’)
51.Replace
用法:
Replace ( string1, start, n, string2 )
string1:string类型,指定要使用string2替换其中一部分内容的字符串;
start:long类型,指定要从哪个字符位置开始替换字符串,字符串中第一个字符的位置为1,一个中文字符占两个位置
n:long类型,指定要替换多少个字符;
string2:string类型,指定用哪个字符串替换string1的部分字符。
返回值:String。函数执行成功时返回替换后的字符串,发生错误时返回空字符串("")。如果任何参数的值为NULL,Replace()函数返回NULL。
注意:替换中文是,一个中文字符长度是两个字节,占两个位置。要是位置或者长度错误会引起乱码
例子:
String name
Name= ”春眠不倔小”
Name= Replace(Name , 7 , 4 , “觉晓”)
52.Reset 清除数据窗口内的数据
用法:
dw_name.reset() 将数据窗口控件dw_1中的数据清除。

例子:
dw_1.reset() //清除数据窗口dw_1的数据
53.Retrieve
用法:
dw_name.retrieve()
里面可以有参数变量不过要与数据窗口中定义的类型与顺序一样
注:retrieve之前要settransobject()和reset()一下datawindow,初始化数据窗口
例子:
dw_1.retrieve():强制dw_1数据窗口控件从数据库读数据,即从数据库中检索数据。
54.Right 取字符串右面的字符
用法:
right(string s,long n)
rightw()为有中英双字节输入的时候用的
(1) 功能从字符串右端取指定个数字符。
(2) 语法Right ( string, n )
(3) 参数string:string类型,指定要提取子串的字符串 n:long类型,指定子串长度返回值String。
函数执行成功时返回string字符串右边n个字符,发生错误时返回空字符串("")。如果任何参数的值为NULL,Right()函数返回NULL。如果n的值大于string字符串的长度,那么Right()函数返回整个string字符串,但并不增加其它字符。
例子:
String s,r1,r2
s = “春眠不觉晓”
r1 = rightw(s,1) //返回 ‘晓’
r2 = right(s,2) //返回 ‘晓’
55.rollback sql语句,使数据库回滚
用法:
rollback {using 事务名};
注意,分好不能省略,最好使用事务名
例子:
rollback using sqlca;
56.RowCount 返回数据窗口控件当前可用行数(当前主缓冲区中数据行数)
用法:
dw_name.rowcount()
数据窗口控件名.rowcount()
返回值: Long。函数执行成功时返回主缓冲区中数据行数,发生错误时返回-1。如果dwcontrol 的值为 NULL,则 RowCount()函数返回 NULL。
例子:
例 1. 下面的代码得到数据窗口控件 dw_Employee 中当前可用行的行数:
long NbrRowsNbrRows = dw_Employee.RowCount()
例 2. 下面的代码检测用户是否已经滚动到数据窗口控件的末尾。它通过将数据窗口主缓冲区中的行数与数据窗口对象的 LastRowOnPage 属性相比较来得到:
dw_1.ScrollNextPage()
IF dw_1.RowCount() = Integer(dw_1.Describe(“DataWindow.LastRowOnPage”)) THEN
. . . // 所需的其它处理
END IF

57.RowsCopy
用法:
dw_name.rowscopy(开始行,结束行,缓冲区,要复制到的另一窗口名,在哪一行前面插入,插入哪个缓冲区)
例子:
参考rowsmove

58.RowsMove
用法:
移动行rowsmove( )
dw_name.rowsmove(开始行,结束行,缓冲区,要移动到的另一窗口名,在哪一行前面插入,插入哪个缓冲区)
rowsmove还可以在同一数据窗口的不同缓冲区进行移动行
例子:
如从删除缓冲区移动行到主缓冲区实现恢复功能:
dw_name.rowsmove(1,dw_name.deletedcrount(),delete!,dw_name,1,primary!)

59.SaveAs 导出数据
用法:
dw_1.saveas(filename,saveastype, colheading )
参数:dw_1为datawindow控件名,
filename为导出的文件名,
saveastype为导出的文件类型,
colheading为是否保存标题。
例子:
将数据窗口中的数据保存到d盘,取名为cs的文件。要求带标题。
Dw_1.saveas(“d:\cs.txt”,text!,true) true为带标题。False为不带标题。

60.ScrollNextPage 向后滚动一页
用法:
dw_name.scrollnextpage() \向后滚动一页
例子:

61.ScrollPriorPage 向前滚动一页
用法:
例子:

62.ScrollToRow 滚动到指定行
用法:
通常配合插入新行使用
dw_name.scrolltorow(dw_name.insertrow(0)) \滚动到插入行
例子:
int row
row = dw_1.insertrow(0)
dw_1.scrolltorow(row)

63.SelectRow 选中或者取消选中数据窗口、DataStore中的一行或者所有行数据。
用法:
integer dwcontrol.SelectRow ( long row, boolean select)
ldwcontrol:数据窗口、DataStore或者子数据窗口。
lrow:long类型,要选中或者取消选中的数据行行号。如果该参数为0,表示对所有的数据行进行操作。
lselect:Boolean类型,取值为True表示要选中指定的数据行(不管在执行函数之前是否是选中的);取值为False表示要取消选中指定的数据行(不管执行函数之前是否没有选中)。
返回值:函数执行成功返回1,执行错误返回-1,任何参数为空则返回Null。
注意:该函数的执行不会改变当前数据行。也就是说,如果第2行是当前数据行,执行完该函数,比如dw_1.SelectRow(5),第2行仍然是当前数据行。
例子:
选择多行的案例,按住ctrl则多行取消、选择,按住shift则选中开始和最后的行
int row
row = dw_1.insertrow(0)
//显示
dw_1.scrolltorow(row)
long ll_Start, ll_End, ll_index
if Row < 1 then return
if KeyDown(KeyControl!) then
if This.IsSelected(Row) then
This.SelectRow(Row,False)
else
This.SelectRow(Row,True)
end if
elseif KeyDown(KeyShift!) then
if Row <il_LastSelectedRow then
ll_Start = Row
ll_End =il_LastSelectedRow
else
ll_Start =il_LastSelectedRow
ll_End = Row
end if
end if

64.SetFilter 条件查询数据时,设置查询条件
用法:
dw_name.setfilter(string con)
参数:dw_name 数据窗口名称
con 过滤的条件,string类型,条件即为sql语句where后面的内容
例子:
dw_user.setfilter(var_condition)

65.SetFocus 使控件获得焦点
用法:
对象名.setfocus
例子:
sle_1.setfocus()

66.setitem 设置数据窗口的数据
用法:
dw_name.setitem(row,‘要设置的控件名’,‘要设置进去的数据’)
integer dwcontrol.SetItem (long row, integer column, any value )
dwcontrol:要设置数据的数据窗口控件、DataStore或者子数据窗口的名称。

row:要设置数据的行,为long类型。
column:要设置数据的列,可以是string类型的列名称,也可以是integer类型的列号。
lvalue:要设置的数据。类型根据数据列而定,两者的数据类型应该保持一致。
返 回 值:integer类型,1表示函数执行成功,-1表示函数执行失败。如果有任意一个参数为Null,则函数返回Null。
例子:
第一行的hire_date列中设置数据:
dw_order.SetItem(1, “hire_date”, 1993-06-07)

67.SetItemStatus 设置数据窗口状态
用法:
dw_name.setitemstatus(row\第几行,哪一列,哪个缓冲区,设置为哪个状态)
integer dwcontrol.SetItemStatus ( long row, integer column, dwbuffer dwbuffer, dwitemstatus status )
例子:
设置主缓冲区第五行工资栏的状态为notmodified!
dw_history.SetItemStatus(5, “Salary”, Primary!, NotModified!)

68.SetSort 设置排序规则,通常和sort()函数配合使用
用法:
dw_1.setsort(ls_sort)
其中,dw_1为datawindow控件名.ls_sort为排序条件字符串。
例子:
Dw_1.setsort(“nl asc”); //设置以n1列,按升序顺序排(升序用asc,降序用desc)
Dw_1.sort( ); //过滤

69.SetSqlSelect 设置数据窗口的sql语句
用法:
dw_name.setsqlselect()
注:重设sql语句的时候列与类型必须要与原来的一样,where与group by和order by可以不一样
例子:
ls_oldsql = dw_name.getsqlselect()
ls_newsql = left(ls_oldsql,pos(lower(ls_oldsql),‘where’)) +‘NewWhereSql’…
dw_name.setsqlselect(ls_newsql)
dw_name.retrieve()

70.SetTransObject 和retrieve配合使用,连接数据库
用法:
数据窗口名.settransobject
dw_name.settransobject(sqlca)
例子:
设置数据窗口dw_1与数据库连接
dw_1.settransobject(sqlca)

71.ShareData 共享数据
共享数据窗口的概念,共享数据窗口的实现非常简单,只需一条ShareData()。
例如在Window对象上的两个数据窗口dw-p和dw-s,则可以用dw-p.
ShareData(dw-s)实现二者的数据共享,dw-p称为主数据窗口,而dw-s称为从数据窗口。
从原理上讲,二者实际上所共享的是数据的缓冲区。
缓冲区中的数据首先要从数据库中检索(通过数据窗口Retrieve()函数),而数据库的检索是一种较为"昂贵"的操作,它会加重数据库和网络传输的负荷。
在共享数据窗口情况下,只有主数据窗口检索数据,而从数据窗口通过共享获得数据,无须再检索数据库,
用法:

dw_1.sharedate(dwObject)
例子:
CONNECT USING SQLCA;
dw_employee.SetTransObject(SQLCA)
dw_employee.Retrieve()
dw_employee.ShareData(dw_dept)
要结束共享数据用sharedataoff()

72.Sort 排序
用法:
与setsort()配合使用,在设置了排序格式后,使用此函数进行排序
例子:
Dw_1.setsort(“nl asc”); //设置以n1列,按升序顺序排(升序用asc,降序用desc)
Dw_1.sort( ); //过滤
73.SQLCA 默认数据库链接变量
用法:

例子:
dw_name.settransobject(sqlca)链接数据库
sqlca.sqlcode = 0 有数据\ = 100 无数据
74.String 转换为字符串
用法:
string( blob )
value要转换为string的数据
例子:
把日期按照设定格式转换为字符串
string(date,‘yyyy-mm-dd’)

75.SyntaxFromSQL 创建一个动态sql
用法:
sqlca.syntaxfromsql(sqlselect一条sql语句,窗口风格,报错信息)
例子:

76.TriggerEvent 立即触发事件
用法:
对象名.triggerevent()
触发指定对象的指定事件,并且立即执行该事件中的脚本。注意该函数和PostEvent的区别。PostEvent不是立即执行,TriggerEvent是立即执行触发事件的脚本。
objectname.TriggerEvent ( event{, word, long } )
objectname:PB中任何对象或者控件,只要有可以触发的事件就可以。
event:要触发的事件。可以是枚举类型或者String类型。
word、long:这两个参数不是必须的,用来传递long或者string类型的数据。
返回值:Integer类型。如果返回1,表示该函数执行成功;如果指定事件中没有脚本或者函数执行错误,则返回-1。当任意参数为Null时,函数返回Null。
例子:
(1)cb_1.TriggerEvent(Clicked!)
等价于
TriggerEvent(“Clicked”)
(2)w_main.TriggerEvent(“ue_open”,0,’test’)
在用户自定义事件ue_open中接收数据:
string ls_msg
ls_msg = String(Message.LongParm,’address’)
77.Trim 去掉字符串首尾的空格
用法:
trim(string) //trimw()为有中英双字节输入的时候用的。
Trim ( string )

例子:
string s = ’ 4abb ’ //前面一个空格,后面两个空格
string w = ’ 你好 ’ //前面一个空格,后面两个空格
trim(s) //返回’4abb’
trim(w) //返回’你好’
78.Update 数据窗口中数据的保存
用法:
Dw_1.update( ) 其中,dw_1为datawindow控件名
例子:
数据修改后,需要对数据进行保存。
Dw_1.update( ) //该语句有返回值,如果返回1表示更新成功,返回-1表示出错。
79.数据窗口中的if函数
用法:
例子:
80.数据窗口中的Lower函数
用法:
例子:

  • 2
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值