版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据窗口常用函数 数据窗口控件事务对象1. SetTransObject函数 调用格式:dwcontrol.SetTransObject(transaction) 其中:dwcontro为数据窗口控件的名称;transaction为缺省的或 用户定义的事务对象。 返回值:1-成功;-1-失败。 SetTransObject函数为数据库维持了一个开放性的连接,不需要反复连接和断开数据库,对数据窗口的更新进行提交或滚回操纵。只有在用户改变数据窗口对象或者用户断开与数据库连接后,才要再次调用SetTransObject函数。 SetTransObject ()函数的特点是,在使用之前要求建立事务对象
2、与数据库的连接,一直保持这一连接,直到代码执行DISCONNECT语句后才断开与数据库的连接。它在检索和更新数据时所花的时间只是检索和更新所需的时间,效率上明显高于SetTrans ()函数。例如,在完成了数据库的连接之后,如果在某个窗口中有个数据窗口控件dw_1,可以在窗口打开的open事件中,添加如下代码: dw_1.SetTransObject(SQLCA) 此后,就可以使用其它函数访问数据库了。数据窗口控件事务对象 2. SetTrans函数 调用格式:dwcontrol.SetTrans(transaction) 参数及返回值与SetTransObject函数相同。不同点是SetTr
3、ans使用内部事务对象,用户不必先进行数据库的连接,而是每进行一次数据库操作,都会自动产生一个数据库的连接,并在操作结束时自动断开与数据库的连接。每当操作数据库时,都会完成连接、操作、断开数据库这一系列步骤。 对绝大多数数据库管理系统来说,CONNECT、DISCONNECT操作是件极为耗时的工作。如果应用程序对数据库操作频繁,SetTrans需要花费的资源比较多,效率比较低。一般应用在远端使用应用程序或者对数据库操作较少的场合。数据窗口控件的函数 数据窗口控件提供了丰富的对象函数,这些函数在增强数据窗口功能的同时,也方便了应用程序的开发,加快了开发进度。 数据窗口函数编程注意事项: 1. 窗
4、口函数触发数据窗口事件 窗口函数会触发某些数据窗口事件,如果在这些数据窗口事件中调用能够触发该事件的数据窗口函数,就会造成死循环。2. PowerBuilder的数据处理机制数据窗口在客户机的本地内存中开辟了四个缓冲区:主缓冲区、删除缓冲区、过滤缓冲区、原始缓冲区,从数据库中检索到数据后,数据窗口根据不同情况把数据放置到不同的缓冲区。四个缓冲区各司其职,协作完成数据的增删改,最后把结果提交给数据库管理系统。除了在数据窗口画笔中可以定义数据窗口对象外,还提供了根据SQL SELECT语句和指定的属性动态创建数据窗口的能力,这样,应用程序就能够构造的更加灵活,以适应千变万化的用户需求。7.4 数据
5、窗口控件的函数 当使用数据窗口控件的Retrieve()函数从数据库中提取数据后,数据被存入了数据窗口的主缓冲区中,程序对数据窗口中数据的操作均在缓冲区中完成。用户在向数据窗口中输入数据时,并没有直接把数据输入到数据窗口的主缓冲区中,而是把数据输入到悬浮在数据窗口当前单元上面的编辑控件中,当用户移动了输入焦点或代码中使用AcceptText ()函数操作之后,系统验证输入数据的有效性,通过有效性验证的数据才被放置到数据窗口控件的主缓冲区中。当插入数据时,插入的数据也存放在主缓冲区。当删除数据行时,不管是使用DeleteRow()函数直接删除一行还是使用RowsMove()函数在缓冲区之间移动数
6、据行,被删除数据行从主缓冲区移动到删除缓冲区。当使用数据窗口控件的对象函数Update()将数据窗口的修改发送到数据库管理系统后,被成功删除的记录均从删除缓冲区中清除。在保存数据时,删除缓冲区用于生成DELETE语句。过滤缓冲区用于保存那些满足数据源定义,而不满足过滤条件的行。原始缓冲区保存数据窗口从数据库中检索出的原始数据。可以通过把GetItem簇函数的入口参数originalvalue设置为true来访问原始缓冲区中数据。7.4 数据窗口控件的函数数据窗口缓冲区之间的关系见图。7.4 数据窗口控件的函数 主缓冲区的记录行数可以通过数据窗口控件的对象函数RowCount()得到,删除缓冲区
7、的记录行数通过数据窗口控件的对象函数DeletedCount()得到,过滤缓冲区的记录行数通过数据窗口控件的对象函数FilterCount()得到。利用数据窗口控件的对象函数SetFilter(),可以动态改变过滤条件,然后使用数据窗口控件的对象函数Filter()更新主缓冲区和过滤缓冲区中的数据。数据窗口控件只显示主缓冲区中的数据,用户的所有操作也都是针对主缓冲区进行的。编辑状态标志在数据窗口控件的主缓冲区、过滤缓冲区和删除缓冲区中,每一行和每一行中的每个列都有个编辑状态标志,这个标志指示了相应行是否是新增加的行、相应列的数据是否被修改。在往数据库中保存数据时,数据窗口利用这个标志值来决定产
8、生什么类型的SQL语句。需要获得某行/某列的编辑状态标志的方法是使用数据窗口控件的GetItemStatus ()对象函数。修改行或列的编辑状态标志的数据窗口控件对象函数是SetItemStatus()。 7.4 数据窗口控件的函数 编辑状态标志是个dwItemStatus枚举类型。7.4 数据窗口控件的函数3. 访问的缓冲区 dwBuffer用来指定数据窗口控件函数访问的缓冲区,dwBuffer使用枚举数据类型。 表7-4 dwBuffer枚举数据类型与指定的缓冲区数据窗口常用函数Dwo.Reset() 重置数据窗口InsertRow( )函数用来在数据窗口的主缓冲区中插入一条新记录。其语法
9、格式为:long dwcontrol.InsertRow ( long row )其中:row用于指定新行的插入位置。若row为0,则表示在所有记录的最后插入新行。例如:dw_1.InsertRow(0) 数据窗口常用函数DeleteRow( )函数 DeleteRow函数用来在数据窗口的主缓冲区中删除一行。其语法格式为:integer dwcontrol.DeleteRow ( long row )其中:row表示要删除的行的行号。若row为0,则表示要删除当前行。例如,语句:dw_1.DeleteRow(5)表示删除数据窗口控件中的第5条记录。数据窗口常用函数Update( )函数Upda
10、te函数用来把数据窗口上数据的变化更新到数据库中。Update函数的语法格式为:integer dwcontrol.Update ( boolean accept , boolean resetflag )其中:参数accept是一个布尔值,如果该值为true,表示在更新之前调用AcceptText函数。参数resetflag用来确定数据窗口更新后是否重设更新标记。该函数执行成功,则返回1,否则返回-1。例如,在本书实例窗口w_ini的【保存】按钮的Clicked事件代码为:数据窗口常用函数if dw_1.Update() 0 thencommit; /提交elsemessagebox(,无法
11、对数据保存!)rollback; /返回end if注释:在调用update函数后,必须做事务的管理工作,即使用SQL语句COMMIT或ROLLBACK来结束更新操作。 数据窗口常用函数连接事务对象的函数Settransobject()函数参数为事务对象例:dw_1. Settransobject(sqlca)滚动数据行函数Scroll( )和ScrollToRow( )函数 long dwcontrol.Scroll ( long number ) number指定要滚动的方向和行数。number为正数,表示向下滚动;若number为负数,表示向上滚动。如果该函数执行成功,那么将返回数据窗口
12、控件中可见的第一行的行号;如果执行失败,则返回-1。 滚动数据行函数ScrollToRow函数 integer dwcontrol.ScrollToRow ( long row )参数row指定要滚动到的行号。如果row为0,则滚动到第一行,如果row大于最后一行的行号,则滚动到最后一行。该函数执行成功,则返回值为1,否则,返回-1注释:调用ScrollToRoll函数后,指定的行变为当前行,如果该行在数据窗口控件中已经可见,则数据窗口控件中显示的行没有什么变化,否则,显示这一行ScrollToRoll函数和其他数据窗口滚动函数并不能高亮度显示行。此时可使用SelectRow函数高亮度显示该行
13、以使用户知道这是当前行。ScrollToRow函数和其他数据窗口滚动函数可能触发下列事件:ItemChanged、ItemError、ItemFocusChanged、RowFocusChanged。 ScrollNextRow( )和ScrollPriorRow( )函数long dwcontrol.ScrollNextRow ( )long dwcontrol.ScrollPriorRow ( )作用:向上或向下滚动一行ScrollNextPage( )和ScrollPriorPage( )函数long dwcontrol.ScrollNextPage( )long dwcontrol.S
14、crollPriorPage( )作用:向上或向下滚动一页 使当前记录亮度显示Selectrow()函数integer dwcontrol.SelectRow ( long, boolean )参数long型表示行号,行号为0表示对所有行进行操作。boolean型:true表示稿亮度显示,false表示去掉亮度显示。例:Dw_1.selectrow(dw_1.getrow(),true)表示将当前行亮度显示Retrieve()函数Retrieve函数的功能是用指定的事务对象从数据库中把数据检索到数据窗口进行显示。Retrieve函数的语法格式为:long dwcontrol.Retrieve
15、( any argument, any argument . . . )其中:argument是可选参数,它表示在数据窗口对象中定义的检索参数,这些参数的顺序必须和定义时的顺序相同。如果调用成功,则返回检索出的记录行数;否则,返回-1。 SetSort( )和Sort( )函数 SetSort( )函数设置排序条件Sort( )函数执行排序操作integer dwcontrol.SetSort ( string format )其中:参数format是一个表示排序标准的字符串,包括列名或列号(列号前加#号)和排序顺序(A表示升序、D表示降序)。如果format值为NULL,PowerBuild
16、er将显示“Specify Sort Columns”对话框,让用户选择排序条件。该函数执行成功时返回值为1,否则返回-1。number dwcontrol.Sort ( )该函数没有参数,执行成功时返回值为1,否则返回-1。例如,可使用如下代码实现按第一列升序、第二列降序的顺序排序:dw_1.setSort(#1 A, #2 D)dw_1.sort() SetFilter( )和Filter( )函数SetFilter函数用来在程序中动态改变数据窗口的过滤条件。修改之后,再用Filter函数过滤数据。integer dwcontrol.SetFilter ( string format )其
17、中:format是个字符串,其值是作为过滤条件的逻辑表达式,表达式中可以包含列名或列号。如果format值为NULL,PowerBuilder将显示“Specify Filter”对话框,让用户输入过滤条件。该函数执行成功时返回1,否则返回-1。integer dwcontrol.Filter ( )例: dw_1.setfilter( xh= 0251101) dw_1.filter()可以实现过滤学号字段为0251101学生的记录Reset( )函数Reset函数可以清除数据窗口中的所有行。其语法格式为:integer dwcontrol.Reset ( )若该函数执行成功,则返回1,否则
18、返回-1。执行Reset函数后再执行Update( )函数并不会清除数据库中的数据,而删除数据窗口的所有行后再执行Update( )函数则会清除数据库中的数据。 Find()函数查找满足条件的记录number dwcontrol.Find ( string expression, number start, number end )Expression:查找条件表达式Start:起始行号End:结束行号返回值:返回第一条满足条件的记录号0表示查找失败,-1表示查找出错例 i=dw_1.find( xh= 0251101,1,dw_1.rowcount()dw_1.scrolltorow(i)查
19、找和过滤的区别查找和过滤都可以找到满足条件的记录,但是,find()的查找过程在主缓冲区中进行,而Filter()将满足条件的记录过滤到过滤缓冲区。得到与设置数据项的函数SetItem函数参数:行号,列号,值例如: dw_1.setitem(dw_1.getrow(),3,女)GetItem函数GetItemString、GetItemDateTime、GetItemTime、GetItemNumber、GetItemDecimal。 参数:行号,列号返回值:取得的对应行、列的值数据窗口中数据处理数据正确性检查数据排序、过滤、分组及去掉重复值数据检索引用数据窗口对象和数据窗口项数据窗口对象的引
20、用Dataobject属性:指定数据窗口对象例:dw_1.dataobject=d_no_name通过表达式引用数据窗口项通过列名引用dwcontrol.Object.columnname.buffer.current.originalrownumberdwcontrol:数据窗口控件名称。Object:必选部分,用来指定一个数据窗口对象的数据值。Columnname:必选部分,用来指定要操作的数据窗口列名Buffer:可选部分,指明要从哪个缓冲区中取得数据,用户可以在Primary(主缓冲区)、Delete(删除缓冲区)或Filter(过滤缓冲区)中选择一个,默认设置为Primary缓冲区。
21、 .current.original:用来指明是从原始数据(从数据库中检索出来的数据)还是从当前缓冲区中取得数据。current为默认设置,指当前数据缓冲区。original指原始数据。rownumber:可选字段,指定数据窗口的行号或者某一范围。例dw_1.Object.number1= 9952101语句把数据9952101赋值给主缓冲区中的第一行的number列项:通过函数引用数据窗口项取得数据窗口缓冲区中特定行列的数据;GetItemStringGetItemDateTime、GetItemTime、GetItemNumber、GetItemDecimalGetItem 设置数据窗口特
22、定行列的数据值。String dwcontrol.GetItemString (row,column ,dwbuffer,originalvalue )dwcontrol:数据窗口控件的名字。row:指定要取得字符型数据项所在的行号。column:指定要取得字符型数据项所在的列,可以时列号(数值型)或列名(字符型)。dwbuffer:指明要从哪个缓冲区中取得数据。默认设置是Primary缓冲区。originalvalue:用来指明是从原始数据还是从当前缓冲区中取得数据,True表示获得从数据库检索出来的原始数据;False(默认)表示获得当前缓冲区中的数据。 例rownum=dw_1.getr
23、ow() /取得当前行的行号num_no = dw_1.GetItemNumber (rownum,number) /取得当前行、number列的值设置数据窗口特定行列的数据值。SetItem,其语法格式如下:integer dwcontrol.SetItem (row, column, value )row指定赋值项所在的行,column指赋值项所在的列,可以是列号或列名;value是要为数据项设置的值。例:Dw_1.setitem(dw_1.getrow(),sex,男)数据窗口的更新控制 选择菜单【Rows】【Update Properties】,弹出“Specify Update Pr
24、operties” 设置更新属性多表数据窗口的更新一般情况下,含有多表数据的数据窗口只能用于数据检索,而不能用于更新数据,所以,通常多表的更新操作通常使用多个数据窗口来实现(在脚本中要做数据库的相关完整性检查)。但有时也会遇到在一个数据窗口中更新多个表数据的情况。如果需要在单数据窗口中做多表更新,只能采用如下特殊的手段来解决:第一,通过修改数据窗口的更新属性实现多表更新;第二,用隐含数据窗口(或数据存储)实现多表更新。 创建数据窗口:(1)选用合适的数据源和显示风格,保证数据窗口具有更新能力。(2)选取多表中的所需数据项(各表的主键和非空列一定要包含进去)。(3)修改所需数据项的TabOrde
25、r,保证其在数据窗口中是可修改的(TabOrder值不为0)。(4)选取菜单【Rows】【Update Properties】,定义数据窗口的更新属性(只定义一个表的列为可更新列)。 保存操作:(1)先对多表中的一个单表进行更新,使用Modify( )函数将其余表中的数据项的Update属性改为False。(2)选取单表的主键及表中其他数据项,设置此单表:DataWindow.Table.UpdateTable=表名 /设置可更新的表名表的主键.Key=Yes /设置可更新的主键使用Modify( )函数将要更新表中的数据项的Update属性改为True。(3)使用Update( )函数,对所
26、选中的单表进行更新。(4)选取数据窗口中的其余表及其数据项,重复以上的操作来更新多表数据。 modify( )函数的用法为:string dwcontrol.Modify ( string modstring )其参数是一个要设置的属性值的字符串。不同的属性之间可用t或多个空格间隔,对数据窗口对象中列的属性值的设置可以用如下方式:perty=value。例如xshjbqk_name.Update =No表示将列xshjbqk_name的update(更新)属性改为No,即为不可更新。实例long ll_rtn/ 修改Department表ll_rtn = dw_1
27、.update(true, false)if ll_rtn = 1 then/关掉对Department表的修改dw_1.Modify(department_dept_name.Update = No)dw_1.Modify(department_dept_id.Update = No)dw_1.Modify(department_dept_id.Key = No)/使Employee表成为新的可修改表dw_1.Modify(DataWindow.Table.UpdateTable = employee)dw_1.Modify(employee_emp_id.Update = Yes)dw_1
28、.Modify(employee_emp_fname.Update = Yes)dw_1.Modify(employee_emp_lname.Update = Yes)dw_1.Modify(employee_emp_id.Key = Yes)/修改Employee表ll_rtn = dw_1.Update()IF ll_rtn = 1 THENCOMMIT USING SQLCA;dw_1.retrieve()messagebox(提示信息,更新成功!)ELSEROLLBACK USING SQLCA;MessageBox(提示信息, 更新失败!)END IF/如果还要修改别的表,重设修改标
29、志dw_1.Modify(department_dept_name.Update = Yes)dw_1.Modify(department_dept_id.Update = Yes)dw_1.Modify(department_dept_id.Key = Yes)dw_1.Modify(DataWindow.Table.UpdateTable = department)dw_1.Modify(employee_emp_id.Update = No)dw_1.Modify(employee_emp_fname.Update = No)dw_1.Modify(employee_emp_lname.
30、Update = No)dw_1.Modify(employee_emp_id.Key = No)ELSEROLLBACK USING SQLCA;MessageBox(提示信息, 更新失败!)END IF 小结1.数据窗口控件常用属性数据窗口窗口控件常用函数: Retrieve()检索数据update()更新表数据 InsertRow(long row) 在第row行插入一空行, row=0表示在末尾插入DeleteRow(long row) 删除第row行getrow() 返回数据窗口当前行的行号getcolumn() 得到数据窗口控件当前列的列号 GetColumnName( ) 得到数
31、据窗口控件当前列的列名RowCount() 返回数据窗口控件当前可用行数。小结ScrollToRow (long row ) 滚动数据窗口控件的显示到row行,该函数改变当前行但不改变当前列。GetItemDecimal(long row,int column)得到数据窗口控件中row行、col列的数据值。返回值为DecimalGetitemnumber(long row,int column)得到数据窗口控件中row行、col列的数据值。返回值为NumberGetitemstring(long row,int column) 得到数据窗口控件中row行、col列的数据值。返回值为stringGetItemDate(long row,int column) 得到数据窗口控件中row行、col列的数据值。返回值为DateGetItemDateTime(lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度个人与公司间代收代付业务合同范本3篇
- 2025年度年度城市绿化劳务承包综合服务版合同3篇
- 二零二五年度公司施工队高速公路施工合作协议3篇
- 2025年度航空航天实验室航天器研发与制造合同3篇
- 二零二五年度冷库租赁及冷链物流运输保障合同
- 二零二五年度冷链运输及冷链设备维修服务合同
- 二零二五年度航空航天材料研发全新期权合同3篇
- 2025年度智能门锁用户购买合同3篇
- 二零二五年度金融机构对赌协议合同-信贷业务与风险控制3篇
- 2025年度人工智能公司合伙人股权分配与战略规划合同3篇
- 运筹学课程设计
- 蔬菜供货服务保障方案
- 工程机械租赁服务方案及保障措施 (1)
- 功率因数调整电费办法
- 美发基础(课堂PPT)
- WordA4信纸(A4横条直接打印版)
- (完整版)会计准则(全文)
- 百家姓全文拼音版A4打印
- 专家论证挖孔桩专项施工方案
- IPC标准解析学习课程
- 麻花钻钻孔中常见问题的原因和解决办法
评论
0/150
提交评论