仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 607|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计在PowerScript剧本中会见数据窗口中的数...

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。会见|剧本|数据在PowerScript剧本中会见数据窗口中的数据
张健姿01-6-22下战书03:50:25

在4.0以前的版本,如果您想在PowerScript脚本中访问数据窗口中的数据,方法只有一种,那就是使用SetItem和GetItem系列的函数,指定您所要访问的某一行列的值,这一方法的局限性在于您一次只能访问到一个数值。而在5.0版中,PowerBuilder拓展了数据窗口的属性,使数据窗口中的数据成为了该对象的一个属性,而使用户可以象访问其它对象属性一样直接访问数据窗口的数据了。这样我们就有了两种会见数据的方法了。1.传统的使用SetItem和GetItem系列函数,如:dw_1.SetItem(1,"empname","Phillips")ls_name=dw_1.GetItemString(1,"empname")2.表达式的方法,这种方法可以指定某一列、某一行、某一块、或是用户选中的行列、甚至整个数据窗口控件的全部数据,如:dw_1.Object.empname[1]="Phillips"dw_1.Object.Data[1,1]="Phillips"这两种方法都可以允许用户指定特定的数据缓冲区,也就是说您采用任何一种方法都可以访问到数据被修改前的原始值、被过滤失落的值、被删往的值及当前值等。在年夜多数情况下,您可以采用这两种方法中的任一种,但这两种方法在使用时也是各有利弊的。如果您只是要访问某行某列的一个数值,两种方法在执行效率上是基本相同的的。如果您打算采用数据窗口的列名而不是数值来暗示某一列,而这一列的列名在运行前又不知道,或是要依据用户的不同输进来决定,那您只能采用函数法,因为这一方法可以动态地改变列名。如果您需要访问的数据不止一列,而是确定范围的多行多列,那您采用表达式法将获得更高的效率。表达式法是PowerBuilder5.0新增加的功能,虽说这种办法可使得数据窗口的面向对象的特性更为明显,语言的表达也更为直不雅,易于使旁不雅者阅读他人的程序时容易看懂,但是这种方法的语法形式却是很复杂多样,使用起来却不太容易。总体上讲,表达式的语法可以分成3组:直接指定列名称法:如果您事先知道您需要访问数据的列名,而且仅访问这一列,可以采用这种方法。选择这一控件中一条记录或多条记录dwcontrol.object.columnname{.buffer}{.datasource}{[startrownum{,endrownum}]}我们在前面的专题中曾经介绍过关于数据窗口的四个缓冲区,在这条命令的语法中buffer选项就可以选择Primary,Filter或Delete这三个缓冲区,缺省为Primary;datasource选项为Current或Original,缺省为Current。如果您选择Original,则系统将到数据窗口的Original缓冲区中往读取数据,显然Original缓冲区是只读的,您不能对其赋值。在后面的方括号中,您能够指定您打算访问的这一列中的起止记录数,如果只是一条记录,您在StartRownum中指定行号就可以了;如果方括号中两个参数全部缺省,则指这一列的全部记录。例如:stringls_namels_name=dw_1.Object.name[1]又如:dw_1.Object.salary[8,12]=id_salaryid_salary是一个数组,如果其中只有四个元素,则第12行salary的值为空。选择这个数据窗口控件中加亮的记录dwcontrol.Object.columnname{.Primary}{.datasource}.Selected在数据窗口中加亮的记录就是您曾经使用过SelectRow函数对其进行加亮表示这一行选中的记录。显然,对这一特性数据的访问只能是Primary缓冲区中的,不过数据源仍旧可以选择是当前还是原始的。如果选择原始,也就是说您得到的数据是从数据库中查到的,修改前的数据。例如:stringls_namels_name=dw_1.Object.name.Selected使用数值来表示列:dwcontrol.Object.Data{.buffer}{.datasource}[startrownum,startcolnum,endrownum,endcolnum]我们知道在SetItem和GetItem系列的函数中,对列的表达既可以用列名也可以采用数值指示,在这里也是同样。如果我们采用数值指代列名的方法,同上一种比较,我们要将列名换成了关键词Data,在后面的方括号中,参数酿成了四个。这一表达式的返回值将是一个结构数组,或是一个用户对象。必须注意,您所定义的结构或用户对象必需与数据窗口的这几列的数据类型相匹配,否则PowerBuilder将出现错误。对整行记录的操纵:dwcontrol.Object.Data{.buffer}{.datasource}{[rownum]}这一种方法是上一种方法的特例,如果rownum中的数值缺省,将表示整个数据窗口的全部数据。例如数据窗口中的列名及数据类型是这样的:ID(number)name(string)retired_status(boolean)birth_date(date)首先我们要在结构画笔中定义一个str_empdata的数据结构。它包括四个元素,类型分别是:integer,string,boolean和date执行下列代码:str_empdatalstr_currdata[]lstr_currdata=dw_1.Object.Data这样lstr_currdata结构中数组的上界将用数据窗口控件中记录的行数相等,并完成了赋值。我们还可以用这种方法指定这一控件中高亮度的行dwcontrol.Object.Data{.Primary}{.datasource}.Selected这三种形式的功能比较如下:访问范围语法访问控件中高亮度的行1一列dwcontrol.object.columnname{.buffer}{.datasource}能2多列dwcontrol.object.data{.buffer}{.datasource}不能3一条记录的全部列dwcontrol.object.data{.buffer}{.datasource}能在使用这些语句时我们要注意以下几点:同使用SetItem和GetItem系列函数一样,在编译时PowerBuilder将不检查您所指示的列的有效性,您必须自行检查并确保引用的有效性。在第一种方法中我们必须注意在列名后面一定要有所后缀,例如:ld_salary[]=dw_1.object.emp_salary.primaryld_salray=dw_1.object.emp_salary[5]上述表达式都是合法的,但是ld_salary[]=dw_1.object.emp_salary就是非法表达了。因为dw_1.object.emp_salary指代的是这个emp_salary列的DWObject对象,而不是在emp_salary列中的数据。我们可以用dw_1.object.emp_salary来指代数据窗口中的对象,如:integerli_dataDWObjectdwo_empsalarydwo_empsalary=dw_1.Object.emp_salaryFORli_cnt=1to100li_data=dwo_empsalary[li_cnt].........NEXT这种表达式法返回的数据类型是ANY型的,PowerBuilder将根据“兼容”原则转换数据库与PowerBuilder的数据类型,因此如果您调用的重载函数要使用表达式法得到数据窗口的数据作为参数,建议您一定使用一个强制转换数据类型的函数。例如:wf_overload(real(dw_1.object.dept_id[1]))
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。
老尸 该用户已被删除
沙发
发表于 2015-1-19 12:27:55 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
分手快乐 该用户已被删除
板凳
发表于 2015-1-25 08:38:07 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
简单生活 该用户已被删除
地板
发表于 2015-2-2 18:19:19 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-8 04:10:23 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
莫相离 该用户已被删除
6#
发表于 2015-2-24 05:51:50 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
小魔女 该用户已被删除
7#
发表于 2015-3-7 11:35:04 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
变相怪杰 该用户已被删除
8#
发表于 2015-3-15 04:22:22 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
admin 该用户已被删除
9#
发表于 2015-3-21 18:13:36 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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