数据窗口中的DATA属性

老知了-米芾 2011-08-08 08:40:38
数据窗口被誉为Sybase 的专利技术,以其与数据库通信简单,数据操作简单,以及方便制作各式复杂报表而著称。在使用过程中我们需要大量的复制数据,从一个数据窗口到另一个数据窗口。这时我们可以使用的技术有如下几种:

一、rowscopy

遵循两个数据窗口对象中的列个数、名称、类型、顺序一致的原则。

二、rowsmove

遵循两个数据窗口对象中的列个数、名称、类型、顺序一致的原则。

三、循环语句实现

四、sharedata

遵循两个数据窗口对象中的列个数、名称、类型、顺序一致的原则。

五、data属性

本章讲述使用数据窗口的data属性来实现。

数据窗口的data属性得到的结果

我们指定DWControl.Descirbe("datawindow.data")得到的是以 TAB分割的数据内容。

而通过DWControl.object.data返回的是一个数组形式的数据。

因此我们可以使用以下两个方法来批量复制数据。

一个是

引用语法为DWControl.object.data[startrow,startcolumn,endrow,endcolumn];//拷贝指定数据行的数据

另一个是

DWControl.Importstring(DWControl.object.datawindow.data);//拷贝所有数据行

这两种方法都可以达到我们的目的。



以下讲述一下使用

DWControl.object.data[startrow,startcolumn,endrow,endcolumn]的注意事项:

A。若data[arg1]仅有一个参数,则这个参数不可以大于数据窗口中总的数据行数,否则会有错误发生。

仅有一个参数表示需要复制的数据为 第arg1行的数据(从第一列到最后一列)。

B。若data[arg1,arg2]

表示要复制的数据行从第arg1行,第arg2列开始,复制第arg1行,第arg2列的数据。

C。若data[arg1,arg2,arg3.arg4]

表示要复制 第arg1行,第arg2列到第arg3行,第arg4列的数据。

此处的使用要注意:

若arg1比arg3小,则表示复制第arg3行到第arg1行的数据。

若arg2比arg4小,则表示复制第arg4列到第arg2列的数据。

其中arg2和arg4表示第几列,这个列的序号不要理解为在数据窗口中所看到的列的排列顺序。

而是在View-Column Specification 页面中看到的列的顺序号。

在两个数据窗口之间引用数据,可以直接这样来写

DWControl1.object.data=DWContolr2.object.data;//表示把DWControl2中的数据全部拷贝到DWCcontrol1中。

此时一般遵循:DWControl1中数据列的类型,个数,名称,顺序要与DWControl2中一致的原则,若不一致,会出现

意想不到的错误,这个嘛,你懂的。
...全文
216 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bombshell 2011-09-15
  • 打赏
  • 举报
回复
谢谢分享
lightsword1 2011-09-13
  • 打赏
  • 举报
回复
数据窗口是PB的核心了
陈义源 2011-09-13
  • 打赏
  • 举报
回复
xuexi
wag_enu 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gaoqiangz 的回复:]
不知道与用GetFullState得到的blob数据再用SetFullState填充的方式比较,哪一种效率更高?有没有朋友做过测试?
[/Quote]

getfullstate/setfullstate、getchange/setchange 和其它的几种取数方法没有可比性。因为起的作用不一样。
路人甲cw 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gaoqiangz 的回复:]

不知道与用GetFullState得到的blob数据再用SetFullState填充的方式比较,哪一种效率更高?有没有朋友做过测试?
[/Quote]
仅仅可考虑效率,不考虑拷贝的内容差异
路人甲cw 2011-08-08
  • 打赏
  • 举报
回复
不知道与用GetFullState得到的blob数据再用SetFullState填充的方式比较,哪一种效率更高?有没有朋友做过测试?
ribut9225 2011-08-08
  • 打赏
  • 举报
回复
SF
学习了
谢谢楼离分享
路人甲cw 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wag_enu 的回复:]

引用 2 楼 gaoqiangz 的回复:
不知道与用GetFullState得到的blob数据再用SetFullState填充的方式比较,哪一种效率更高?有没有朋友做过测试?


getfullstate/setfullstate、getchange/setchange 和其它的几种取数方法没有可比性。因为起的作用不一样。
[/Quote]
我只是指数据拷贝的效率,在没有其它要求的情况下
刚才我测试了,使用dwtarget.importstring(dwsource.object.dawindow.data)效率比dwtarget.setfullstate(ref sourcedata)慢3~5倍的样子
*测试数据量是总3万多行X14列,每种方式各循环10次的结果
zjl8008 2011-08-08
  • 打赏
  • 举报
回复
学习了。。

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧