pb从数据窗口获得数据的方法总结

pb从数据窗口获得数据的方法总结
通过PowerBuilder的数据窗口对象属性,我们可以指定一定格式的表达式来直接从数据窗口中获得数据。这种直接的数据操作方法让我们能只需一条语句而不用调用许多方法,就可得到一定量甚至大量的数据。操作数据的表达式大致可分为三种,下面逐一介绍。
---------------------------------------------------------------------
1)在知道列或计算域名时得到数据得到某列中一行或全部的值,
表达式:(如果rownum忽略,则可得到缓冲区或数据源的值)
dwcontrol.Object.columnname {.buffer } {.datasource } { [ rownum ] }
其中datasource 参数表示数据源,它有两个可选项,Current(缺省)和Original,由此参数我们可以指定数据是从当前数据窗口上还是从数据库中得到。对于计算域,它不能被改变也没有当前值,所以我们必须指定为此参数为Original。
示例:
因为缺省设置是在Primary缓冲区的当前值,下面语句是等价的,都是从第一行得到emp_name列的值
dw_1.Object.emp_name[1]
dw_1.Object.emp_name.Primary.Current[1]
下面语句设置emp_name列的第一行值为“国防科技大学先进制造中心”
dw_1.Object.emp_name[1] = "国防科技大学先进制造中心"
下面语句得到所有emp_name列的值,并将它们放入数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Current
下面语句得到emp_name列在filter缓冲区的所有当前值
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter
下面语句得到emp_name在filter缓冲区的初始值(数据库中的值)
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter.Original
下面语句得到emp_name列在delete缓冲区的第14行的当前值
string ls_name
ls_name = dw_1.Object.emp_name.Delete[14]This statement gets the original
下面语句得到emp_name列在delete缓冲区的第14行的初始值(数据库中的值)
string ls_name
ls_name = dw_1.Object.emp_name.Delete.Original[14]
下面语句得到review_date计算域的所有值
string ld_review[]
ld_review = dw_1.Object.review_date.Original
得到被选择项的值
表达式:dwcontrol.Object.columnname {.Primary }{.datasource }.Selected
示例:
由于Primary缓冲区是程序本选择项所在的唯一缓冲区并且当前数据是缺省的,下面的语句作用是等价的,它们实现从emp_name列中得到被选中行的值。
dw_1.Object.emp_name.Selected
dw_1.Object.emp_name.Primary.Selected
dw_1.Object.emp_name.Current.Selected
dw_1.Object.emp_name.Primary.Current.Selected
下面语句从数据库中得到被选择行的数据
dw_1.Object.emp_name.Original.Selected
dw_1.Object.emp_name.Primary.Original.Selected
下面语句设置emp_name列的第一个被选中行的值为空字符串
string ls_empty[]
ls_empty[1] = ""
dw_1.Object.emp_lname.Selected = ls_empty
下面语句可得到emp_name列被选中行的初始值(从数据库中检索出的值),并将它放入一个字符串数组
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Original.Selected
得到一定范围的值
返回指定列的一个范围的行的值,并将它们放入数组
表达式:
dwcontrol.Object.columnname {.buffer } {.datasource } [ startrownum,
endrownum ]
示例:
由于Primary缓冲区和当前数据是缺省选项,下面的语句式等价的
dw_1.Object.emp_name[11,20]
dw_1.Object.emp_name.Primary[11,20]
dw_1.Object.emp_name.Current[11,20]
dw_1.Object.emp_name.Primary.Current[11,20]
下面语句将emp_name列从11行到20行的值设置为空字符串
string ls_empty[]
ls_empty[1] = ""
dw_1.Object.emp_name[11,20] = & {"","","","","","","","","",""}
---------------------------------------------------------------------
下面语句的得到emp_name列的初始值,并将它们放入一个字符串数组
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Original[11,20]
---------------------------------------------------------------------
下面语句得到emp_name列在过滤缓冲区从5行到8行的当前值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter[5,8]
---------------------------------------------------------------------
下面语句得到emp_name列在过滤缓冲区从5行到8行的初始值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter.Original[5,8]
---------------------------------------------------------------------
下面语句得到emp_name列在删除缓冲区从50行到200行的当前值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Delete[50,200]
---------------------------------------------------------------------
下面语句得到emp_name列在删除缓冲区从50行到200行的初始值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Delete.Original[50,200]
---------------------------------------------------------------------
2)得到已知列号列的值
得到指定行号列号的值
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } [ rownum, colnum ]
示例:
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行,第二列的数据
dw_1.Object.Data[1,2]
dw_1.Object.Data.Primary.Current[1,2]
---------------------------------------------------------------------
下面语句将Filter缓冲区的初始值中得第一行,第二列的值改为0
dw_1.Object.Data.Filter.Original[1,2] = 0
---------------------------------------------------------------------
得到一定范围行的数据
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } [ startrownum, startcolnum, endrownum, endcolnum ]
示例:
---------------------------------------------------------------------
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行到第十行,第一列到第四列的值
dw_1.Object.Data[1,1,10,4]
dw_1.Object.Data.Primary.Current[1,1,10,4]
---------------------------------------------------------------------
下面语句得到employee Ids和 last names列在delete缓冲区的所有行的值,Ids和names列是第一第二列。得到的数据放在名为str_namelist的一个结构中,此结构有两个属性,整形的id和字符串形的lastname。Ids和names被存放在文件deleted.txt中。
integer li_fileNum
long ll_deletedrows
str_namelist lstr_namelist[]
ll_deletedrows = dw_1.DeletedCount()
lstr_namelist = &
dw_1.Object.Data.Delete[1,1, ll_deletedrows,2]
li_fileNum = FileOpen("C:/HR/DELETED.TXT", &
LineMode!, Write!)
FOR ll_count = 1 to UpperBound(lstr_namelist)
FileWrite(li_fileNum, &
String(lstr_namelist.id) + &
" " + &
lstr_namelist.lastname + &
"~r~n")
NEXT
FileClose(li_fileNum)
---------------------------------------------------------------------
下面的语句使Ids和last names列的数据为NULL
long ll_n
str_namelist lstr_namelist[]
SetNull(lstr_namelist[1].id)
SetNull(lstr_namelist[1].lastname)
FOR ll_n = 2 to dw_1.RowCount()
lstr_namelist[ll_n] = lstr_namelist[1]
NEXT
dw_1.Object.Data[1,1, dw_1.RowCount(),2] = lstr_data
3)得到整行数据
得到数据窗口上的某行或全部行的数据
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } { [ rownum ] }
示例:
---------------------------------------------------------------------
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到Primary缓冲区第五行的当前数据
dw_1.Object.Data[5]
dw_1.Object.Data.Primary.Current[5]
下面语句将数据窗口Primary缓冲区的当前值放入到一个结构数组中
any la_dwdata
la_dwdata = dw_1.Object.Data
下面语句得到数据窗口Delete缓冲区的当前值,并将它放入到一个结构数组中
any la_dwdata
la_dwdata = dw_1.Object.Data.Delete
下面语句用数据窗口dw_2的Primary缓冲区的当前值覆盖嵌套报表的第二行的数据,在数据窗口dw_2中的列必须与嵌套报表中的列相同:
dw_1.Object.NestRep[2].Object.Data = dw_2.Object.Data
---------------------------------------------------------------------
得到选中行的数据
表达式:
dwcontrol.Object.Data {.Primary } {.datasource } .Selected
示例:
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到选中行的数据
dw_1.Object.Data.Selected
dw_1.Object.Data.Primary.Selected
dw_1.Object.Data.Current.Selected
dw_1.Object.Data.Primary.Current.Selected
=====================================================================
下面语句得到被选中行的初始值
dw_1.Object.Data.Original.Selected
dw_1.Object.Data.Primary.Original.Selected
---------------------------------------------------------------------
下面语句得到dw_2中Primary缓冲区选中行的当前值,然后放到dw_1中的列useroption(下拉数据窗口)中
dw_1.Object.useroptions.Object.Data = dw_2.Object.Data.Selected
4)从Crosstab数据窗口中获得点击域名和域值
对于Crosstab类型的数据窗口,我们在前面已做了简要的介绍,但由于它的行列都可以随着后台数据库存放数据的改变而发生改变,所以在想得到它的某个行列定义的值时不能采用一般的方法,如GetItem××××和点操作符。
通过数据窗口画板可以看到所有的列具有同样的列名,在程序运行时它们会自动的*列名后加后缀的方法进行区别,格式为:列名_列号~t行号,列号和行号之间通过‘~t’分隔,列名和列号通过‘_’分隔。因此如果我们需要detail栏的任何一列的值,就需要将得到的信息进行解析,提取出选择的列名,列号和行号,然后才可以通过一般得数据的方法在数据窗口中获得需要的数据。下面我们以一个具体的例子来解说上面采用的方法。
作用:在数据窗口(数据源为Crosstab)的Cliked事件中编程,当点击事件发生后将获得点击交*表行列交叉点的值;
程序:
//定义变量
string ls_detail, ls_name, ls_col
int li_pos, li_len, li_row, li_col
//判断用户点击处是否为detail栏,如不是则退出
if left(getbandatpointer(),6) <> "detail" then return
//得到点击域的信息
ls_detail = geto b j e c tatpointer()
//得到detail栏第二列的名称,第一列为数据窗口行信息
ls_name = Object.#2.Name
//将第二列列名和前面点击得到的点击域信息进行比较,如不是点击的第二列则退出
if left(ls_detail,len(ls_name)) <> ls_name then return
//得到点击域的行号
li_row = row
li_len = len(ls_detail)
//从前面得到点击域信息中得到关于列号的信息
ls_col = right(ls_detail, li_len - len(ls_name))
//得到点击域的列号
if left(ls_col,1) <> "_" then
li_col = 2
else
li_pos = pos(ls_col,"~t")
li_col = integer(mid(ls_col,2,li_pos - 1) ) + 2
end if
//显示出点击域的值
string(getitemnumber(li_row,li_col))

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jeron1999/archive/2009/09/04/4517675.aspx

pb从数据窗口获得数据的方法总结(转自颜建荣ID:jeron1999)相关推荐

  1. pb如何获取数据窗口选中行_pb从数据窗口获得数据的方法总结

    --------------- 由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行到第十行,第一列到第四列的值 dw_1.Object.Data[1,1,10,4] d ...

  2. pb 数据窗口插入数据_46MB 变4.5PB 数据炸弹:新方法突破性压缩资料

    电脑文件相当多,对于不少用户的电脑来说,经常需要将一些文件进行压缩,解决空间不足的问题,Zip 就是最多人使用的格式之一,不过它亦是一把双刃剑,David Fifield制作一个内含超大量垃圾数据的z ...

  3. pb 修改数据窗口种指定字段位置_PB数据窗口对象之字段的修改属性

    数据窗口只能修改一个数据表.当数据窗口的数据来源于不止一个数据表时,可以用脚本控制数据窗口的修改属性来对数据表逐个进行修改. 当数据窗口是用来接受用户的手工录入数据时,应该设置两方面的属性才能确保数据 ...

  4. pb 数据窗口更新mysql_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...

    如何在PB数据窗口中修改数据 如何在PB数据窗口中修改数据---设置数据窗口的更新属性 数据窗口对象非常强大的原因之一就是能够很容易地修改数据库.当用户修改了数据窗口中的数据,插入了新的数据行或者删除 ...

  5. pb数据窗口一些技取

    标识当前行 〓标识当前行也就是给当前行加上醒目的标记,以便用户更清楚当前要对哪一行数据进行操作,尤其当用户的操作中间有停顿时,继续进行操作就特别需要知道哪个是当前行.这里的当前行不要狭隘地理解成仅仅是 ...

  6. pb数据窗口控件OLE

    OLE自动化是不同应用程序之间进行通讯的一个标准. OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE ...

  7. PB数据窗口9种风格

    Grid: 表格风格 字段横向排列在detail band中,标签横向排列在header band中,和字段相对应,字段和字段之间有网格线分隔,类似于电子表格.在数据窗口的预览状态下可以调整字段的顺序 ...

  8. 使用DataGridView数据窗口控件,构建用户快速输入体验

    使用DataGridView数据窗口控件,构建用户快速输入体验 在"随风飘散" 博客里面,介绍了一个不错的DataGridView数据窗口控件<DataGridView数据窗 ...

  9. 数据窗口控件的函数Describe()

    Describe()  功能:返回数据窗口控件结构方面的指定信息包括DataWindow   对象以及数据窗口  对象中其他对象的属性取值数据窗口中的每个列每个标题等等都是对象各自都有一  组描述其特 ...

最新文章

  1. Ubuntu 系统通过终端打开AndroidStudio工具
  2. java增强型for报错_Java基础——增强for循环
  3. QUIC的前世今生——HTTP演变史
  4. iview this.$modal 关闭所有的弹窗_一看会用TOB弹窗应用场景
  5. Vim 实用技术,第 1 部分: 实用技巧(转)
  6. Fixed Resistors
  7. gitee团队协作使用
  8. 深搜(不撞南墙不回头),迷宫问题
  9. 小米10谷歌连携失败_第一批用户反馈小米手表问题多,产品总监发长文解答
  10. 一个javaweb基础的小游戏。。俄罗斯方块。。。
  11. 什么是stub文件_stub code
  12. c++中获得对象类型 typeid 与 type_info
  13. JAVA实现PCA主成分分析_主成分分析PCA(principal component analysis)原理
  14. 七彩cms云转码_七彩CMS开源程序 2019最新云转码全开源程序源码[带完整安装搭建教程]...
  15. NLP经典论文:Word2vec、CBOW、Skip-gram 笔记
  16. install developing enviroment
  17. 在Hbulider中点击事件会出现两次
  18. OpenHarmony3.1适配移远EC20模组4G上网功能
  19. 互联网远程办公 关于公司执行线上办公管理办法
  20. 谈一谈光伏逆变器及其发展趋势

热门文章

  1. 3D建模入门看什么书?怎么才能高效有技巧学习
  2. typescript:never与keyof的妙用
  3. typescript 中的keyof、 in
  4. 计算机信息安全op协议,2019工业信息安全技能大赛个人线上赛第一场(前5道)writeup • 旭达网络技术博客...
  5. STM32F407野火霸天虎系列笔记(三)UART通信
  6. arduino uno电压_了解Arduino UNO电路
  7. mindjet mindManager 添加图像标签
  8. 股票交易价格与成交量
  9. python解决数独问题_Python-如何消除数独方块中的凸度缺陷?
  10. Arduino RGB-LED灯