祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 4983|回复: 0

[其它] 数据窗口间的数据传送方法

[复制链接]

[其它] 数据窗口间的数据传送方法

[复制链接]
newease

主题

0

回帖

1万

积分

论坛元老

积分
19020
贡献
在线时间
小时
2009-8-13 09:57:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
本例主要介绍了在2个数据窗口间拷贝数据的几种方法,并在速度上进行了比较
用RowsCopy函数
PowerBuilder提供了一组在同一数据窗口内或2个数据窗口间传送数据
的函数,但只有在接收和源DataWindow的列完全匹配时,才能对行
操作,这些函数有RowsCopy,RowsMove,RowsDiscard(本例只使用了
Rowscopy),它们的语法如下: dwcontrol.RowsCopy ( startrow, endrow, copybuffer, targetdw, beforerow,
                                              targetbuffer )dwcontrol.RowsMove ( startrow, endrow, movebuffer, targetdw, beforerow,
                                    targetbuffer)dwcontrol.RowsDiscard ( startrow, endrow, buffer ) 我们不难理解它们的含义。例如dw_source.RowsCopy(1, il_Rows, Primary!, dw_dest, 1, Primary!)是
把dw_source数据窗口的数据拷贝到dw_dest数据窗口。
我们只要注意:如果是在2个不同数据窗口 上Copy或Move,目的数
据窗口上的行的状态为NewModified!但如果是在同一数据窗口的不同
缓冲区进行Move,PowerBuilder保存数据行的来源以及它们被改变的
状态,例如:如果从Primary!缓冲区把一些没有修改过的行Move
到delete!缓冲区,它们的状态标志为Delete!,然后如果又Move回Primary!缓冲区,则它们的状态又为NotModified! 当使用RwsMove时,它不会
象InsertRow函数一样,目的数据窗口内的DDDW进行自动检索,而必
须明确地对目的 数据窗口内的DDDW检索。 RowsCopy函数主要用于:
1.根据已有数据,生成新的数据行
2.通过拷贝选定数据行到一个临时数据窗口,然后打印这个临时数据窗口来打印所选行 RowsMove函数主要用于:
1.直接从Primary缓冲区中移出几行到delete缓冲区,而不必每次删除一行
2.从delete缓冲区移动数据行到Primary缓冲区来实现Undo功能

用GetItem...系列函数与SetItem函数
GetItem系列函数用来获取数据窗口控件的指定缓冲区中相应数据类
型的数据,所获取的数据可以是原始缓冲区的,也可以是Primary,
delete或filter缓冲区的当前值,该系列的函数包括有:
GetItemDate
GetItemDateTime
GetItemNumber
GetItemDecimal
GetItemString
它们的语法为dwcontrol.GetItem...( row, column {,燿wbuffer, originalvalue})
其中OriginalValue取值为TRUE和FALSE,为TRUE时,取原始值,
FALSE时,取当前值。
        column:可以是列名,也可以是列号 SetItem函数用来设置指定行列的数据 从上面的分析,我们就可以看出,使用这两个函数很不直观,取数
据时,我们必须根据列的类型来使用不同的 函数,这与面向对象编
程有点不符。不过现在可以直接使用点方法来访问数据,语法为:

dwcontrol.Object.Data.Buffer.WhichValue [RowRange]
dwcontrol.Object.Column.Buffer.WhichValue [RowRange]
其中RowRange可以是一个范围或Selected 例如:要取dw_1第2行的“salary”列的值,可以是这样:
dw_1.Object.salary.primary.original [ 2 ]或
dw_1.GetItemNumber(2,"salary",Primary!,True)

又如在本例的cb_getitem按钮脚本的
li_Data = dw_source.GetItemNumber(ll_Cnt, "line_id")
dw_dest.SetItem(ll_Cnt, "line_id", li_Data)
我们可以改用:
li_data=dw_source.object.line_id[ll_cnt]
dw_dest.object.line_id.[ll_cnt]=li_data 在本例的“结构数组”和“直接赋值”其实就是这种方法。
用SaveAs和剪切板
用剪切板来传递数据,不管它额速度和占用内存的情况如何,我都认
为不是一个好主意,当然SaveAs的存在也 有它的理由,但我认为,
这应该不在DataWindow间传送数据,SaveAs有它的长处,可以用各种
格式来保存数据 ,对DataWindow它的语法为:
dwcontrol.SaveAs ( { filename, saveastype, colheading } )
其中saveastype可以为: Clipboard!  Save to the clipboard
CSV!  Comma-separated values
dBASE2! dBASE-II format
dBASE3! dBASE-III format   
DIF! Data Interchange Format
Excel! Microsoft Excel format
HTMLTable! Text with HTML formatting that approximates the DataWindow layout
PSReport! Powersoft Report (PSR) format
SQLInsert!  SQL syntax
SYLK! Microsoft Multiplan format
Text!  (Default) Tab-separated columns with a return at the end of each row
WKS! Lotus 1-2-3 format
WK1! Lotus 1-2-3 format
WMF! Windows Metafile format
下面是本例各种方法的运行时间统计   SetRedraw(False) SetRedraw(True)  
GetItem/SetItem 2.417 4.504
剪切板  0.851 0.961
结构数组 0.193 0.22  
直接引用 0.069 0.082
用RowsCopy 0.041 0.151
 
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-5-4 16:36 , Processed in 0.052700 second(s), 7 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表