第17-20用户自定义事件-游标_第1页
第17-20用户自定义事件-游标_第2页
第17-20用户自定义事件-游标_第3页
第17-20用户自定义事件-游标_第4页
第17-20用户自定义事件-游标_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、数据库管理系统数据库管理系统第第17章章 用户自定义事件用户自定义事件 nPowerBuilder的窗口、控件、用户对象等都有一组系的窗口、控件、用户对象等都有一组系统预先定义好的事件,打开与前面所述的某对象相关联统预先定义好的事件,打开与前面所述的某对象相关联的代码编辑器后,在事件列表框中就会看到这组事件。的代码编辑器后,在事件列表框中就会看到这组事件。n一般来说,这些系统预定义事件能够满足应用程序的大一般来说,这些系统预定义事件能够满足应用程序的大多数需求。然而,有时候应用程序需要某种特殊控制,多数需求。然而,有时候应用程序需要某种特殊控制,有时候应用程序需要在特定情况下执行某段代码,有时

2、有时候应用程序需要在特定情况下执行某段代码,有时候应用程序中对象间需要灵活的通讯,此时,开发人员候应用程序中对象间需要灵活的通讯,此时,开发人员可以根据需要为对象定义自己的事件,这类事件就称做可以根据需要为对象定义自己的事件,这类事件就称做用户事件。用户事件。 数据库管理系统数据库管理系统n在下列情况下经常使用用户事件:在下列情况下经常使用用户事件:n1. 解决用户对象与窗口之间的通讯问题。用户事件解决用户对象与窗口之间的通讯问题。用户事件可以通过参数进行信息传递。可以通过参数进行信息传递。n2. 响应特殊操作,这些操作没有相应的响应特殊操作,这些操作没有相应的PowerBuilder预定义事

3、件。例如,我们希望用户预定义事件。例如,我们希望用户按下按下Enter键后将输入焦点从一个单行编辑框移动到键后将输入焦点从一个单行编辑框移动到下一个单行编辑框(正常情况下需要按下一个单行编辑框(正常情况下需要按Tab键);再键);再如,在数据窗口控件中,当用户将输入焦点定位在最如,在数据窗口控件中,当用户将输入焦点定位在最后一行后,再按后一行后,再按或或Enter键时插入一个空行等。键时插入一个空行等。 数据库管理系统数据库管理系统n3. 支持用户通过多种方式完成同一个功能。支持用户通过多种方式完成同一个功能。例如,在更新数据库时,应用程序既允许用户例如,在更新数据库时,应用程序既允许用户通过

4、单击窗口上的按钮完成,也允许用户通过通过单击窗口上的按钮完成,也允许用户通过选择菜单项完成。使用用户事件后,就只需要选择菜单项完成。使用用户事件后,就只需要在一个地方编写代码,在需要使用该功能的地在一个地方编写代码,在需要使用该功能的地方触发相应的用户事件就可以了。方触发相应的用户事件就可以了。数据库管理系统数据库管理系统一、一、 定义用户事件定义用户事件n事件是从属于某个对象的,因此定义用户自定义事件是从属于某个对象的,因此定义用户自定义事件首先选定所在的对象,为窗口、控件、用户事件首先选定所在的对象,为窗口、控件、用户对象定义用户事件的方法都是一样的,见书上。对象定义用户事件的方法都是一样

5、的,见书上。n定义一个用户事件通常包括三部分:定义一个用户事件通常包括三部分:n1、事件名、事件名以以u_或或ue_开头,定义事件后,该事件就以该开头,定义事件后,该事件就以该名字出现在对象的事件列表中。名字出现在对象的事件列表中。数据库管理系统数据库管理系统2、事件号(、事件号(eventID)n用户事件号以用户事件号以pbm_开头。当我们定义一个用户定义开头。当我们定义一个用户定义事件时,事件号可以有三种取值:事件时,事件号可以有三种取值:n(1)WINDOWS系统自动触发的事件。每个事系统自动触发的事件。每个事件标识都对应于特定的件标识都对应于特定的Windows消息。我们可以消息。我们

6、可以从两者相似的名字后半部推断其对应关系。例如,从两者相似的名字后半部推断其对应关系。例如,pbm_mousemove对应于对应于Windows消息消息wm_mousemove,pbm_keydown对应于对应于Windows消息消息wm_keydown。n(2)Windows系统不会自动触发的事件,这些系统不会自动触发的事件,这些事件只能通过代码来触发。事件只能通过代码来触发。其中其中pbm_custom01不对应不对应pbm_custom75任何任何WINDOWS的消息,相当于的消息,相当于WINDOWS的用户的用户事件事件WM_USER至至WM_USER+74,不由系统,不由系统触发由用

7、户自己触发。触发由用户自己触发。n(3)事件号选为)事件号选为none表示无事件号。表示无事件号。数据库管理系统数据库管理系统3、事件的参数及返回值。、事件的参数及返回值。n只有用户事件的事件号选为只有用户事件的事件号选为none时才可以定时才可以定义事件的参数及返回类型。义事件的参数及返回类型。数据库管理系统数据库管理系统二、使用用户事件二、使用用户事件n定义了用户事件后,还需要完成下述工作才能使用用户定义了用户事件后,还需要完成下述工作才能使用用户事件:事件:n1 编写用户事件的事件处理程序,没有事件处理程编写用户事件的事件处理程序,没有事件处理程序时,即使发生了该事件,应用程序也不做任何

8、处理。序时,即使发生了该事件,应用程序也不做任何处理。n2、必要时编写触发用户事件的代码。如果用户事件、必要时编写触发用户事件的代码。如果用户事件对应于某个对应于某个Windows消息(例如事件标识为消息(例如事件标识为pbm_mousemove的用户事件的用户事件ue_mousemove对应于对应于Windows消息消息wm_mousemove),那么当相应动作在应用程),那么当相应动作在应用程序上发生时,该事件将被自动触发。如果用户事件不序上发生时,该事件将被自动触发。如果用户事件不对应于任何对应于任何Windows消息(也就是说事件号为消息(也就是说事件号为none或或pbm_custo

9、m01到到bm_custom75),),那么必须使用代码触发该事件。那么必须使用代码触发该事件。 数据库管理系统数据库管理系统三、触发用户事件三、触发用户事件1、Object_name.triggerevent(event_name)Event_name可以对于系统以定义好的事件而言可以是可以对于系统以定义好的事件而言可以是枚举类型枚举类型Cb_1.triggerevent(clicked!)对于用户自定义的事件应是用户事件的字符串对于用户自定义的事件应是用户事件的字符串dw_1.triggerevent(“ue_keydown”)2、Object_name.postevent(event_n

10、ame)该函数的用法与该函数的用法与triggerevent()相同相同不同之处在于不同之处在于triggerevent()表示立即触发该事件表示立即触发该事件postevent()将事件放入消息队列的尾部将事件放入消息队列的尾部以上两个函数处理的事件都不能带参数。以上两个函数处理的事件都不能带参数。数据库管理系统数据库管理系统3、Object_name.trigger|post static|dynamic event event_name(para_)1)Trigger与与post只能选择一个,缺省状态下是只能选择一个,缺省状态下是trigger2)static与与dynamic只能选择一

11、个,缺省状态下是只能选择一个,缺省状态下是staticstatic是静态连接,编译时事件必须存在,否则编译通不是静态连接,编译时事件必须存在,否则编译通不过。过。Dynamic指动态连接,编译时事件可以不存在,在运行指动态连接,编译时事件可以不存在,在运行时检查事件是否存在时检查事件是否存在带参数的事件只能这样触发带参数的事件只能这样触发Cb_1.event clicked()Cb_1.triggerevent(clicked!)W_1.event u_display(4,”math”)数据库管理系统数据库管理系统四、编程实例四、编程实例P174在在cb_append的的clicked事件中事

12、件中long rowrow=dw_1.insertrow(0)dw_1.setrow(row)dw_1.scrolltorow(row)dw_1.setfocus()2在在cb_append中定义一个用户事件,事件号为中定义一个用户事件,事件号为pbm_keydownif keydown(keyenter!) thenthis.triggerevent(clicked!)end if其余控件和其余控件和cb_append的思路相同的思路相同数据库管理系统数据库管理系统3、在、在dw_1中定义一个用户自定义事件中定义一个用户自定义事件u_keyenter,事件号为事件号为pbm_dwnproce

13、ssenter,当焦点落到该,当焦点落到该控件上时,按回车键将触发控件上时,按回车键将触发u_keyenter。Int colLong row/得到当前的行号得到当前的行号row=getrow()/得到当前的列号得到当前的列号col=getcolumn()if col9 thensetcolumn(col+1)else数据库管理系统数据库管理系统/当前行不是最后一行当前行不是最后一行if row将左边列表框的选中学生姓名移到右边的列表将左边列表框的选中学生姓名移到右边的列表框中。框中。单击按纽单击按纽的的clicked事件中:事件中:nint index1,ts,instring item1/

14、nts=lb_1.totalselected()/得到列表框得到列表框1选中的项数选中的项数ni=0/循环变量赋初值循环变量赋初值ndo while itsnfor index1=1 to lb_1.totalitems()nif lb_1.state(index1)=1 thennlb_2.additem(lb_1.text(index1)ni+nlb_1.deleteitem(index1)nexitnend ifnnextnloop数据库管理系统数据库管理系统换一种方式换一种方式:ninteger in/将将LB_1选中的项加到选中的项加到LB_2中中nfor i=1 to lb_1.t

15、otalitems()nif lb_1.state(i)=1 thennlb_2.additem(lb_1.text(i)nend ifnnextn/删除删除LB_1中选中的项中选中的项nfor lb_1.totalitems() to 1 step -1nif lb_1.state(i)=1 thennlb_1.deleteitem(i)nend ifnnext数据库管理系统数据库管理系统2.在按纽在按纽的的clicked事件中事件中wf_move_item(lb_1,lb_2)2、在、在的的clicked事件中事件中wf_move_item(lb_2,lb_1)3、在、在lb_1的的dou

16、bleclicked事件中事件中wf_move_item(lb_1,lb_2)4、在、在lb_2的的clicked事件中事件中wf_move_item(lb_2,lb_1)数据库管理系统数据库管理系统第第19章章 游标游标n 游标是什么游标是什么n在关系型数据库的在关系型数据库的SQL语言中,游标是存放结语言中,游标是存放结果集的数据对象。我们需要对后台数据库查询多果集的数据对象。我们需要对后台数据库查询多条符合条件的记录时,我们使用条符合条件的记录时,我们使用SELECT语句就语句就会出现错误。会出现错误。Datawindow可以实现在图形状可以实现在图形状态下数据的查询,但游标与数据窗口相

17、比存在系态下数据的查询,但游标与数据窗口相比存在系统占用资源少,操作灵活等特点。使用游标有四统占用资源少,操作灵活等特点。使用游标有四个步骤:个步骤:数据库管理系统数据库管理系统一、声明游标一、声明游标declare 游标名游标名 cursor for Sql语句;语句;sql语句是语句是SELECT语句语句declare my_cursor cursor forselect name,id,sex from studentwhere addr=”南京南京”;二、打开游标二、打开游标open 游标名游标名;open my_cursor;数据库管理系统数据库管理系统三、提取数据三、提取数据nfe

18、tch 游标名游标名 into :var1,:var2,:varn;n使用使用fetch语句从数据库读取数据一次只能读取一条语句从数据库读取数据一次只能读取一条符合条件的记录,所以我们必须根据执行符合条件的记录,所以我们必须根据执行fetch语句语句后的结果,逐行的读取数据。后的结果,逐行的读取数据。n使用使用fetch语句后,我们可以通过检测事务对语句后,我们可以通过检测事务对象象.sqlcode的值,可以得知是否取到数据,的值,可以得知是否取到数据,0表示成表示成功,功,100表示没有找到符合条件的数据,表示已经读表示没有找到符合条件的数据,表示已经读完数据完数据数据库管理系统数据库管理系统nfetch my_cursor into :s_name,:s_id,:s_sex;ndo while sqlca.sqlcode=0nlb_1.additem(s_id+”“+s_name+”“+s_sex)nfetch my_cursor into :s_name,:s_id,:s_sex;nloop四、关闭游标四、关闭游标nclose 游标名;游标名;nclose my_cursor;数据库管理系统数

温馨提示

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

最新文档

评论

0/150

提交评论