数据窗口常用函数_第1页
数据窗口常用函数_第2页
数据窗口常用函数_第3页
数据窗口常用函数_第4页
数据窗口常用函数_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据窗口常用函数

数据窗口控件事务对象1.SetTransObject函数

调用格式:dwcontrol.SetTransObject(transaction)

其中:dwcontro为数据窗口控件的名称;transaction为缺省的或用户定义的事务对象。

返回值:1-成功;-1-失败。SetTransObject函数为数据库维持了一个开放性的连接,不需要反复连接和断开数据库,对数据窗口的更新进行提交或滚回操纵。只有在用户改变数据窗口对象或者用户断开与数据库连接后,才要再次调用SetTransObject函数。

SetTransObject()函数的特点是,在使用之前要求建立事务对象与数据库的连接,一直保持这一连接,直到代码执行DISCONNECT语句后才断开与数据库的连接。它在检索和更新数据时所花的时间只是检索和更新所需的时间,效率上明显高于SetTrans()函数。例如,在完成了数据库的连接之后,如果在某个窗口中有个数据窗口控件dw_1,可以在窗口打开的open事件中,添加如下代码:dw_1.SetTransObject(SQLCA) 此后,就可以使用其它函数访问数据库了。数据窗口控件事务对象2.SetTrans函数 调用格式:dwcontrol.SetTrans(transaction) 参数及返回值与SetTransObject函数相同。不同点是SetTrans使用内部事务对象,用户不必先进行数据库的连接,而是每进行一次数据库操作,都会自动产生一个数据库的连接,并在操作结束时自动断开与数据库的连接。每当操作数据库时,都会完成连接、操作、断开数据库这一系列步骤。

对绝大多数数据库管理系统来说,CONNECT、DISCONNECT操作是件极为耗时的工作。如果应用程序对数据库操作频繁,SetTrans需要花费的资源比较多,效率比较低。一般应用在远端使用应用程序或者对数据库操作较少的场合。数据窗口控件的函数数据窗口控件提供了丰富的对象函数,这些函数在增强数据窗口功能的同时,也方便了应用程序的开发,加快了开发进度。

数据窗口函数编程注意事项:

1.窗口函数触发数据窗口事件 窗口函数会触发某些数据窗口事件,如果在这些数据窗口事件中调用能够触发该事件的数据窗口函数,就会造成死循环。2.PowerBuilder的数据处理机制数据窗口在客户机的本地内存中开辟了四个缓冲区:主缓冲区、删除缓冲区、过滤缓冲区、原始缓冲区,从数据库中检索到数据后,数据窗口根据不同情况把数据放置到不同的缓冲区。四个缓冲区各司其职,协作完成数据的增删改,最后把结果提交给数据库管理系统。除了在数据窗口画笔中可以定义数据窗口对象外,还提供了根据SQLSELECT语句和指定的属性动态创建数据窗口的能力,这样,应用程序就能够构造的更加灵活,以适应千变万化的用户需求。7.4数据窗口控件的函数当使用数据窗口控件的Retrieve()函数从数据库中提取数据后,数据被存入了数据窗口的主缓冲区中,程序对数据窗口中数据的操作均在缓冲区中完成。用户在向数据窗口中输入数据时,并没有直接把数据输入到数据窗口的主缓冲区中,而是把数据输入到悬浮在数据窗口当前单元上面的编辑控件中,当用户移动了输入焦点或代码中使用AcceptText()函数操作之后,系统验证输入数据的有效性,通过有效性验证的数据才被放置到数据窗口控件的主缓冲区中。当插入数据时,插入的数据也存放在主缓冲区。当删除数据行时,不管是使用DeleteRow()函数直接删除一行还是使用RowsMove()函数在缓冲区之间移动数据行,被删除数据行从主缓冲区移动到删除缓冲区。当使用数据窗口控件的对象函数Update()将数据窗口的修改发送到数据库管理系统后,被成功删除的记录均从删除缓冲区中清除。在保存数据时,删除缓冲区用于生成DELETE语句。过滤缓冲区用于保存那些满足数据源定义,而不满足过滤条件的行。原始缓冲区保存数据窗口从数据库中检索出的原始数据。可以通过把GetItem簇函数的入口参数originalvalue设置为true来访问原始缓冲区中数据。7.4数据窗口控件的函数数据窗口缓冲区之间的关系见图。7.4数据窗窗口控控件的的函数数主缓冲冲区的的记录录行数数可以以通过过数据据窗口口控件件的对对象函函数RowCount()得到,,删除除缓冲冲区的的记录录行数数通过过数据据窗口口控件件的对对象函函数DeletedCount()得到,,过滤滤缓冲冲区的的记录录行数数通过过数据据窗口口控件件的对对象函函数FilterCount()得到。。利用数数据窗窗口控控件的的对象象函数数SetFilter(),可以以动态态改变变过滤滤条件件,然然后使使用数数据窗窗口控控件的的对象象函数数Filter()更新主主缓冲冲区和和过滤滤缓冲冲区中中的数数据。。数据据窗口口控件件只显显示主主缓冲冲区中中的数数据,,用户户的所所有操操作也也都是是针对对主缓缓冲区区进行行的。。编辑状状态标标志在在数据据窗口口控件件的主主缓冲冲区、、过滤滤缓冲冲区和和删除除缓冲冲区中中,每每一行行和每每一行行中的的每个个列都都有个个编辑辑状态态标志志,这这个标标志指指示了了相应应行是是否是是新增增加的的行、、相应应列的的数据据是否否被修修改。。在往往数据据库中中保存存数据据时,,数据据窗口口利用用这个个标志志值来来决定定产生生什么么类型型的SQL语句。。需要获获得某某行/某列列的编编辑状状态标标志的的方法法是使使用数数据窗窗口控控件的的GetItemStatus()对象象函数数。修修改行行或列列的编编辑状状态标标志的的数据据窗口口控件件对象象函数数是SetItemStatus()。7.4数据窗窗口控控件的的函数数编辑状状态标标志是是个dwItemStatus枚举类类型。。7.4数据窗窗口控控件的的函数数3.访问的的缓冲冲区dwBuffer用来指指定数数据窗窗口控控件函函数访访问的的缓冲冲区,,dwBuffer使用枚枚举数数据类类型。。表7-4dwBuffer枚举数数据类类型与与指定定的缓缓冲区区数据窗窗口常常用函函数Dwo.Reset()重置数数据窗窗口InsertRow()函函数用来在在数据据窗口口的主主缓冲冲区中中插入入一条条新记记录。。其语语法格格式为为:longdwcontrol.InsertRow(longrow)其中::row用于指指定新新行的的插入入位置置。若若row为0,则表表示在在所有有记录录的最最后插插入新新行。。例如::dw_1.InsertRow(0)数据窗窗口常常用函函数DeleteRow()函函数DeleteRow函数用用来在在数据据窗口口的主主缓冲冲区中中删除除一行行。其其语法法格式式为::integerdwcontrol.DeleteRow(longrow)其中::row表示要要删除除的行行的行行号。。若row为0,则表表示要要删除除当前前行。。例如,,语句句:dw_1.DeleteRow(5)表示删删除数数据窗窗口控控件中中的第第5条记录录。数据窗窗口常常用函函数Update()函数数Update函函数用用来把把数据据窗口口上数数据的的变化化更新新到数数据库库中。。Update函函数的的语法法格式式为::integerdwcontrol.Update({booleanaccept{,booleanresetflag}})其中::参数数accept是一一个布布尔值值,如如果该该值为为true,表表示在在更新新之前前调用用AcceptText函数数。参参数resetflag用来来确定定数据据窗口口更新新后是是否重重设更更新标标记。。该函数数执行行成功功,则则返回回1,,否则则返回回-1。例如,,在本本书实实例窗窗口w_ini的【【保存存】按按钮的的Clicked事事件代代码为为:数据窗窗口常常用函函数ifdw_1.Update()>0thencommit;//提交elsemessagebox("","无法对数据保保存!")rollback;//返回endif注释:在调用用update函数后,,必须做事务务的管理工作作,即使用SQL语句COMMIT或ROLLBACK来来结束更新操操作。数据窗口常用用函数连接事务对象象的函数Settransobject()函数参数为事务对对象例:dw_1.Settransobject(sqlca)滚动数据行函函数Scroll()和ScrollToRow()函数数longdwcontrol.Scroll(longnumber)number指定要滚动动的方向和行行数。number为正正数,表示向向下滚动;若若number为负数,,表示向上滚滚动。如果该该函数执行成成功,那么将将返回数据窗窗口控件中可可见的第一行行的行号;如如果执行失败败,则返回-1。滚动数据行函函数ScrollToRow函数integerdwcontrol.ScrollToRow(longrow)参数row指指定要滚动到到的行号。如如果row为为0,则滚动动到第一行,,如果row大于最后一一行的行号,,则滚动到最最后一行。该该函数执行成成功,则返回回值为1,否否则,返回-1注释:调用ScrollToRoll函数后,,指定的行变变为当前行,,如果该行在在数据窗口控控件中已经可可见,则数据据窗口控件中中显示的行没没有什么变化化,否则,显显示这一行ScrollToRoll函数和其其他数据窗口口滚动函数并并不能高亮度度显示行。此此时可使用SelectRow函数数高亮度显示示该行以使用用户知道这是是当前行。ScrollToRow函数和其他他数据窗口滚滚动函数可能能触发下列事事件:ItemChanged、ItemError、ItemFocusChanged、RowFocusChanged。ScrollNextRow()和ScrollPriorRow()函数数longdwcontrol.ScrollNextRow()longdwcontrol.ScrollPriorRow()作用:向上或或向下滚动一一行ScrollNextPage()和ScrollPriorPage()函数longdwcontrol.ScrollNextPage()longdwcontrol.ScrollPriorPage()作用:向上或或向下滚动一一页使当前记录亮亮度显示Selectrow()函数integerdwcontrol.SelectRow(long,boolean)参数long型表示行号号,行号为0表示对所有有行进行操作作。boolean型::true表表示稿亮度显显示,false表示去去掉亮度显示示。例:Dw_1.selectrow(dw_1.getrow(),true)表示示将当前行亮亮度显示Retrieve()函函数Retrieve函数的功能是是用指定的事事务对象从数数据库中把数数据检索到数数据窗口进行行显示。Retrieve函数的语法格格式为:longdwcontrol.Retrieve({anyargument,anyargument...})其中:argument是可选参数,,它表示在数数据窗口对象象中定义的检检索参数,这这些参数的顺顺序必须和定定义时的顺序序相同。如果调用成功功,则返回检检索出的记录录行数;否则则,返回-1。SetSort()和Sort()函数SetSort()函函数设置排序序条件Sort()函数执行排序序操作integerdwcontrol.SetSort(stringformat)其中:参数format是一个表示排排序标准的字字符串,包括括列名或列号号(列号前加加#号)和排序顺顺序(A表示升序、D表示降序)。。如果format值为NULL,PowerBuilder将显示“SpecifySortColumns”对话框,让让用户选择排排序条件。该该函数执行成成功时返回值值为1,否则返回-1。numberdwcontrol.Sort()该函数没有参参数,执行成成功时返回值值为1,否则返回-1。例如,可使用用如下代码实实现按第一列列升序、第二二列降序的顺顺序排序:dw_1.setSort("#1A,#2D")dw_1.sort()SetFilter()和Filter()函数SetFilter函数用来在程程序中动态改改变数据窗口口的过滤条件件。修改之后后,再用Filter函数过滤数据据。integerdwcontrol.SetFilter(stringformat)其中:format是个字符串,,其值是作为为过滤条件的的逻辑表达式式,表达式中中可以包含列列名或列号。。如果format值为NULL,PowerBuilder将显示“SpecifyFilter”对话框,让让用户输入过过滤条件。该函数执行成成功时返回1,否则返回-1。integerdwcontrol.Filter()例:dw_1.setfilter("xh='0251101'")dw_1.filter()可以实现过滤滤学号字段为为0251101学生的的记录Reset()函数Reset函数可以清除除数据窗口中中的所有行。。其语法格式式为:integerdwcontrol.Reset()若该函数执行行成功,则返返回1,否则返回-1。执行Reset函数后再执行行Update()函数并不会清清除数据库中中的数据,而而删除数据窗窗口的所有行行后再执行Update()函数则会清除除数据库中的的数据。Find()函数查找满足条件件的记录numberdwcontrol.Find(stringexpression,numberstart,numberend)Expression::查找条件表表达式Start::起始行号End:结束束行号返回值:返回回第一条满足足条件的记录录号0表示查找失失败,-1表表示查找出错错例i=dw_1.find("xh='0251101'",1,dw_1.rowcount())dw_1.scrolltorow(i)查找和过滤的的区别查找和过滤都都可以找到满满足条件的记记录,但是,,find(()的查找过过程在主缓冲冲区中进行,,而Filter()将将满足条件的的记录过滤到到过滤缓冲区区。得到与设置数数据项的函数数SetItem函数参数:行号,,列号,值例如:dw_1.setitem(dw_1.getrow(),3,’女’’)GetItem函数GetItemString、GetItemDateTime、GetItemTime、GetItemNumber、、GetItemDecimal。。参数:行号,,列号返回值:取得得的对应行、、列的值数据窗口中数数据处理数据正确性检检查数据排序、过过滤、分组及及去掉重复值值数据检索引用数据窗口口对象和数据据窗口项数据窗口对象象的引用Dataobject属属性:指定数数据窗口对象象例:dw_1.dataobject='d_no_name‘通过表达式引引用数据窗口口项通过列名引用用dwcontrol.Object.columnname{.buffer}{.current|.original}{[rownumber]}dwcontrol:数据窗口控控件名称。Object:必选部分,,用来指定一一个数据窗口口对象的数据据值。Columnname:必选部分,,用来指定要要操作的数据据窗口列名Buffer:可选部分,,指明要从哪哪个缓冲区中中取得数据,,用户可以在在Primary(主缓冲区))、Delete(删除缓冲区区)或Filter(过滤缓冲区区)中选择一一个,默认设设置为Primary缓冲区。.current|.original:用来指明是是从原始数据据(从数据库库中检索出来来的数据)还还是从当前缓缓冲区中取得得数据。current为默认设置,,指当前数据据缓冲区。original指原始数据。。rownumber:可选字段,,指定数据窗窗口的行号或或者某一范围围。例dw_1.Object.number[1]=9952101语句把数据9952101赋值给主缓冲冲区中的第一一行的number列项:通过函数引用用数据窗口项项取得数据窗口口缓冲区中特特定行列的数数据;GetItemStringGetItemDateTime、、GetItemTime、GetItemNumber、GetItemDecimalGetItem设置数据窗口口特定行列的的数据值。Stringdwcontrol.GetItemString(row,column{,dwbuffer,originalvalue})dwcontrol:数据窗口控控件的名字。。row:指定要取得得字符型数据据项所在的行行号。column:指定要取得得字符型数据据项所在的列列,可以时列列号(数值型型)或列名((字符型)。。dwbuffer:指明要从哪哪个缓冲区中中取得数据。。默认设置是是Primary缓冲区。originalvalue:用来指明是是从原始数据据还是从当前前缓冲区中取取得数据,True表示获得从数数据库检索出出来的原始数数据;False(默认)表示示获得当前缓缓冲区中的数数据。例rownum=dw_1.getrow()//取得当前行的的行号num_no=dw_1.GetItemNumber(rownum,number)//取得当前行、、number列的值设置数据窗口口特定行列的的数据值。SetItem,其语法格式式如下:integerdwcontrol.SetItem(row,column,value)row指定赋值项所所在的行,column指赋值项所在在的列,可以以是列号或列列名;value是要为数据项项设置的值。。例:Dw_1.setitem(dw_1.getrow(),sex,’男‘)数据窗口的更更新控制选择菜单【Rows】∣【UpdateProperties】,弹出“SpecifyUpdateProperties”设置更新属性性多表数据窗口口的更新一般情况下,,含有多表数数据的数据窗窗口只能用于于数据检索,,而不能用于于更新数据,,所以,通常常多表的更新新操作通常使使用多个数据据窗口来实现现(在脚本中中要做数据库库的相关完整整性检查)。。但有时也会会遇到在一个个数据窗口中中更新多个表表数据的情况况。如果需要在单单数据窗口中中做多表更新新,只能采用用如下特殊的的手段来解决决:第一,通过修修改数据窗口口的更新属性性实现多表更更新;第二,用隐含含数据窗口((或数据存储储)实现多表表更新。创建数据窗口口:(1)选用合适的的数据源和显显示风格,保保证数据窗口口具有更新能能力。(2)选取多表中中的所需数据据项(各表的的主键和非空空列一定要包包含进去)。。(3)修改所需数数据项的TabOrder,保证其在数数据窗口中是是可修改的((TabOrder值不为0)。(4)选取菜单【【Rows】∣【UpdateProperties】,定义数据据窗口的更新新属性(只定定义一个表的的列为可更新新列)。保存操作:(1)先对多表中中的一个单表表进行更新,,使用Modify()函数将其余表表中的数据项项的Update属性改为False。(2)选取单表的的主键及表中中其他数据项项,设置此单单表:"DataWindow.Table.UpdateTable=表名"//设置可更新的的表名"表的主键.Key=Yes"//设置可更新的的主键使用用Modify()函数数将将要要更更新新表表中中的的数数据据项项的的Update属性改为True。(3)使用Update()函数,对所所选中的单单表进行更更新。(4)选取数据据窗口中的的其余表及及其数据项项,重复以以上的操作作来更新多多表数据。。modify()函数的用法法为:stringdwcontrol.Modify(stringmodstring)其参数是一一个要设置置的属性值值的字符串串。不同的的属性之间间可用~t或多个空格格间隔,对数据窗口口对象中列列的属性值值的设置可可以用如下下方式:perty=value。例如xshjbqk_name.Update=No表示将列xshjbqk_name的update(更新)属属性改为No,即为不可可更新。实例longll_rtn//修改改Department表ll_rtn=dw_1.update(true,false)ifll_rtn=1then//关掉对对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.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()IFll_rtn=1THENCOMMITUSINGSQLCA;dw_1.retrieve()messagebox('提提示信息','更新新成功!')ELSEROLLBACKUSINGSQLCA;MessageBox('提提示信息','更更新失败!!')ENDIF//如果还还要修改别别的表,重重设修改标标志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.Update='No'")dw_1.Modify("employee_emp_id.Key='No'")ELSEROLLBACKUSINGSQLCA;MessageBox('提提示信息','更更新失败!!')ENDIF小结1.数据窗窗口控件常常用属性数据窗口窗窗口控件常常用函数:Retrieve()检索数据update()更新表数据据InsertRow(longrow)在第row行插入一空空行,row=0表示在末尾尾插入DeleteRow(longrow)删除第row行getrow()返回数据窗窗口当前行行的行号getcolumn()得到数据窗窗口控件当当前列的列列号GetColumnName()得到数据窗窗口控件当当前列的列列名RowCount()返回数据窗窗口控件当当前可用行行数。小结ScrollToRow(longrow)滚动数据窗窗口控件的的显示到row行,该函数数改变当前前行但不改改变当前列列。GetItemDecimal(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为DecimalGetitemnumber(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为NumberGetitemstring(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为stringGetItemDate(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为DateGetItemDateTime(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为DateTimeGetitemtime(longrow,intcolumn)得到数据窗窗口控件中中row行、col列的数据值值。返回值值为Time小结SetItem(longrow,intcolumn,value)将value写到数据窗

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论