第08章教案-数据窗口对象应用riuiso(PowerBuilder).ppt
《第08章教案-数据窗口对象应用riuiso(PowerBuilder).ppt》由会员分享,可在线阅读,更多相关《第08章教案-数据窗口对象应用riuiso(PowerBuilder).ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 数据窗口对象的应用 创建数据窗口对象使它和数据库相连接,执行数据的检索、修改、删除等工作。注意:数据窗口对象只有通过数据窗口控件才能发挥它的巨大作用。8.1 数据窗口控件的使用数据窗口控件是窗口中一个标准的PowerBuilder控件,它放在窗口中,是窗口的一部分,不能独立存在。数据库中的数据要在数据窗口对象中显示和修改,必须依靠数据窗口控件。把数据窗口控件放在窗口中,使这个数据窗口控件和相应的数据窗口对象关联,通过这个数据窗口控件完成数据窗口对象和数据库的连接。8.1.1 添加数据窗口控件 打开要添加数据窗口控件的窗口,选择菜单【Insert|Control|DataWindow】,
2、在窗口的适当位置点击鼠标左键,这时出现一个空白框,这个空白框就是数据窗口控件。结束放映第一页上一页下一页最后一页8.1.2 更改数据窗口控件属性 常用的属性有:(1)DataObject:设置与数据窗口控件关联的数据窗口对象名称。(2)TitleBar复选框:选中表示数据窗口控件显示标题栏,否则不显示。(3)Title文本框:定义标题栏中标题内容。(4)ControlMenu复选框:选中表示在标题栏上显示控制按钮,否则不显示。(5)MaxBox、MinBox:选中这两个复选框分别表示给标题栏添加最大化按钮和最小化按钮。(6)HScrollBar VscrollBar:选择这两个复选框分别表示给
3、数据窗口控件添加水平和垂直滚动条。(7)Border复选框和Border Style下拉列表框:用来设置控件的边界形状。(8)Name:编辑框中的内容表示数据窗口控件名称,编写脚本时使用该名称。(9)Other标签页:设置控件的位置、大小及鼠标在控件中的形状。结束放映第一页上一页下一页最后一页8.1.3 设置数据窗口控件中关联的数据窗口对象(1)静态关联选择数据窗口控件,点击右键,选择Properties进入数据窗口控件的属性视窗,在DataObject框中输入要关联的数据窗口对象。(2)动态关联程序运行过程中,若一个数据窗口控件在不同情况下要关联不同的数据窗口对象,这时就要用脚本控制,实现动
4、态关联。脚本控制语句如下:dw_controlname.dataobject=“d_objectname”。8.2 操作数据窗口对象中数据的前提 程序运行时,要操纵数据窗口对象中的数据,就要在程序中连接数据库,让数据窗口对象与数据库之间建立连接。必须首先创建应用程序与数据库之间的连接,应用程序与数据库之间的连接是通过事务对象完成的。(1)什么是事务对象事务对象是一个传递应用程序与数据库之间信息的一个变量,它驻留在内存中,存储着用于连接数据库及从数据库得到反馈的所有信息,它定义了数据库与应用程序连接的参数。一个应用程序开始创建时,系统就自动定义一个名为SQLCA的默认全局变量。结束放映第一页上一
5、页下一页最后一页8.2 操作数据窗口对象中数据的前提(2)事务对象的属性事务对象共有15个属性,可以分为两类,一类有10个,用来描述连接数据库的信息,如所连接的数据库的名称;另一类有5个,用来接受有关数据库或最近执行SQL语句的情况或状态,如数据库操作是否成功。AutoCommit:这是一个布尔型属性。它指定是否将数据库设置成自动提交所有事物。当它为TRUE时,由系统自动提交所有事务,当为FALSE时,用户必须自己在程序中设置事务管理,并在需要的时候对数据库进行提交事务。它的默认值是FALSE。DataBase:这是一个字符串类型的属性。它指定要连接的数据库名称。DBMS:这是一个字符串类型的
6、属性。它指定应用程序所使用的数据库管理系统的名称,如ODBC。DBPass:这是一个字符串类型的属性。它描述的是用户连接数据库的密码。Lock:这是一个字符串类型的属性。它是数据库的保护级别,一般不必给出。LogID:这是一个字符串类型的属性。它用于指定登录数据库服务器所需的用户名或用户的ID。结束放映第一页上一页下一页最后一页8.2 操作数据窗口对象中数据的前提SQLCode:这是一个长整型(Long)的属性。它用来指定最近一次数据库操作成功与否的代码,共有三个返回值:0表示操作成功;100表示操作成功,但没有返回数据;-1表示操作失败。用户可以从SQLDBCode或SQLErrTex中得到
7、具体详细的错误信息。SQLDBCode:这是一个长整型的属性。它包含了数据库错误代码,不同的数据库,错误代码不同,但大部分数据库厂商都用0表示操作成功,100表示成功但没有检索到数据,负数表示没有成功。SQLErrText:这是一个字符串类型的属性。它包含了数据库操作的错误信息。UserID:这是一个字符串类型的属性。它指定了连接数据库的用户名或用户的ID。8.2.1 使用系统默认的事务对象SQLCA 系统提供了一个默认的全局事务对象SQLCA,可以在程序的任何地方使用这个事物对象。结束放映第一页上一页下一页最后一页8.2.1 使用系统默认的事务对象SQLCA下面是一个连接ODBC数据库所用的
8、代码:/Profile ExerciseSQLCA.DBMS=ODBCSQLCA.AutoCommit=FalseSQLCA.DBParm=Connectstring=DSN=exercise这段脚本用来设置事务对象的属性,一般把它写在应用程序的Open事件中8.2.2 自己定义事务对象 一般情况下,使用系统提供的全局事务处理对象SQLCA就可以了,但有时需要连接多个数据库,这时只用一个SQLCA就不够了,需要用户自己定义事务对象,因为一个事务对象只能保存一个数据库的连接信息。自己定义事务对象步骤如下:(1)确定事物对象变量的作用域和名称像变量一样,事务对象的作用域有局部的、实例的、全局的和共
9、享的,声明的地方决定了事务对象的作用域,事务对象变量的类型是transaction。声明事务对象的格式为:transaction 用户自定义的事务对象名如要声明一个全局的事务对象sqluser,则在定义全局变量的位置书写transaction sqluser声明语句。结束放映第一页上一页下一页最后一页8.2.2 自己定义事务对象(2)创建事务对象实例上面只是声明了一个自定义的事务对象sqluser,但该事务对象并没有创建。创建语句如下:自定义的事务对象名=create transaction如要创建事物对象sqluser,描述创建的语句为sqluser=create transaction。要
10、使得打开应用后,就能使用自己定义的事务处理对象sqluser,则该语句必须写在应用的Open事件中。(3)确定事务对象变量的属性自定义事务对象的属性设置可参考前面的SQLCA属性的设置,将SQLCA信息拷贝到应用的Open事件后,将其SQLCA改为sqluser即可。/Profile Exercisesqluser.DBMS=ODBCsqluser.AutoCommit=Falsesqluser.DBParm=Connectstring=DSN=exercise(4)注意:系统提供的默认事务对象SQLCA,用户不能声明、创建、删除它,系统会自动处理对它的操作;给事务对象赋值时,只能给事物对象的
11、属性一一赋值,不能将一个事物对象直接赋给另一事务对象。结束放映第一页上一页下一页最后一页8.2.3连接数据库 定义了事务对象之后,要在数据窗口对象中处理数据库中数据,还必须配合其它语句一起使用。(1)connect:数据库连接该语句表示与数据库连接。它的语句结构是:connect using 事务对象名;若是使用sqlca,可以使用两种格式:connect;connect using sqlca;上面两条语句作用一样,也就是说使用系统默认的sqlca,语句中可以指明,也可以不指明,默认指sqlca。下面两条语句作用不同:connect;connect using sqluser;第一条使用默认
12、的事务对象sqlca,第二条使用自定义的事务对象sqluser。(2)disconnet:断开与数据库的连接该语句表示断开与数据库的连接,它的语法结构是:disconnect using 事务对象名;使用方法同(1)connect。结束放映第一页上一页下一页最后一页8.2.3连接数据库(3)commit:提交事务用来提交当前所做的一切事务,实际上是向数据库提交所有数据修改工作。它的语句结构及使用方法同(1)connect。(4)rollback:取消事务它用来回滚当前的所有事务,实际上是取消自上次提交事务以来的这一段时间内所有数据修改工作。它的语句结构及使用方法同前面(1)connect。(5
13、)settransobject():事务对象与数据窗口控件关联通过connect语句,将一个事务对象与数据库连接起来了,但为了能使一个具体的数据窗口访问数据库,还必须把数据窗口控件和事务对象关联起来。关联语句中一定要使用数据窗口控件名,而不是数据窗口对象名。使用下面语句将数据窗口控件和事务对象关联。语句格式如下:DWControlname.settransobject(TransactionObjectName)如 让 dw_1数 据 窗 口 控 件 与 sqlca事 务 对 象 关 联,语 句 写 为dw_1.settransobject(sqlca)。该语句一般写在数据窗口控件所在窗口的O
14、pen事件中。结束放映第一页上一页下一页最后一页8.3 操作数据窗口中的数据 8.3.1 检索数据(retrieve)检索数据使用函数retrieve。(1)函数不带参数格式:dwcontrolname.retrieve()如数据窗口控件dw_1检索数据,可用dw_1.retrieve()语句。这种情况的使用简单,用于没有设定任何参数的数据窗口对象。(2)函数带有n个参数,格式是dwcontrolname.retrieve(参数1,参数2,参数n),如数据窗口控件dw_1检索数据,可用dw_1.retrieve(参数1,参数2,参数n)。要特别注意,这里参数的个数、类型、与数据窗口对象中定义的
15、变量个数、类型要相对应,若这里给定的参数个数少于数据窗口对象中定义的变量个数,程序运行时就会出现错误;若这里的参数个数多于数据窗口对象中定义的变量个数,程序运行时就会自动去掉后面多余的参数。检索函数多用于settransobject(sqlca)语句后面。(3)函数的返回值函数返回一个整型值,表示从数据库中检索到的行数;若没有匹配的结果,则返回值是0;若检索中出现了错误,返回值是-1。结束放映第一页上一页下一页最后一页8.3.1 检索数据(retrieve)(4)执行函数时触发的事件DBError:检索失败时发生。RetrieveRow:每行数据检索出来以后发生。RetrieveStart:检
16、索开始时发生。RetrieveEnd:检索完成后发生。(5)典型应用dw_1.settransobject(sqlca)dw_1.retrieve()将数据窗口与事务对象关联,并检索数据窗口中数据。8.3.2 更新数据(update)Update函数用于把当前数据窗口中从上次执行update或retrieve函数以来进行的所有修改保存到数据库中。(1)常用语法形式如下:DWcontrolname.Update()如更新数据窗口控件dw_1,脚本写为:dw_1.update()。结束放映第一页上一页下一页最后一页 8.3.2 更新数据(update)(2)函数返回值若返回值是1表示成功,返回值是
17、-1表示失败。(3)执行函数时触发的事件DBErrorSQLPreviewUpdateStartUpdateEnd(4)典型应用if dw_1.update()=1 thencommit;elserollback;end if数据窗口中数据更新正确则提交事务(保存数据),否则取消事务(不保存数据)。结束放映第一页上一页下一页最后一页8.3.3 从数据窗口控件中读数据(getitemstring)处理数据时,经常要从数据窗口中读出数据,然后再进行处理。(1)常用语法形式:DWcontrolname.getitemstring(rownum,column)DWcontrolname.getitem
18、number(rownum,column)DWcontrolname.getitemdate(rownum,column)DWcontrolname.getitemdatetime(rownum,column)DWcontrolname.getitemdecimal(rownum,column)如从数据窗口dw_1中取出第二行第一列“name”字段值,这里假设“name”字段是字符型,则用以下脚本:dw_1.getitemstring(2,“name”)或用dw_1.getitemstring(2,1)。getitemstring表示从数据窗口中取出字符型数据;rownum表示所取数据在数据窗
19、口中的行号;column表示所取字段,可用字段名或表示列号的整数表示,若用字段名表示,要将字段名用引号引起来;若用表示列号的整数,用数字1、2、表示。Getitemnumber:所取字段的类型是不带小数的数值型。Getitemdate:所取字段的类型是日期型。Getitemdatetime:所取字段的类型是日期时间型。Getitemdecimal:所取字段的类型是带小数的数值型。结束放映第一页上一页下一页最后一页8.3.3 从数据窗口控件中读数据(getitemstring)(2)典型应用string name1name1=dw_1.getitemstring(2,“name”)message
20、box(“第二条记录的名字是:”,name1)从dw_1的第二行中取出“name”字段,然后以对话框的方式显示出来。8.3.4 将数据写到数据窗口控件中(setitem)处理数据时,除了要从数据窗口中读出数据,有时还要把数据写到数据窗口中。(1)语法形式:DWcontrolname.setitem(rownum,column,value)rownum和column与前面的含义相同,value表示要放在数据窗口中的值。(2)典型应用string name1name1=dw_1.getitemstring(2,“name”)dw_2.setitem(1,“name”,name1)从dw_1的第二行
21、中取出“name”字段,然后将取出的值放在dw_2中的第一行“name”字段上。结束放映第一页上一页下一页最后一页8.3.5 对数据窗口控件中的数据进行排序(setsort)运行程序数据窗口按原排序显示数据,有时希望根据不同情况对不同字段进行再排序,这时就要用到setsort()和sort()函数。(1)语法形式:dwcontolname.setsort(sortexpression)dwcontolname.sort()sortexpression是一个字符串,表示排序条件表达式,包括要排序的列名或列号以及排序方式,具体形式是一个列名后加上一个空格,然后是字符A或D,表示升序或降序,若对多列
22、同时排序,它们之间用逗号隔开。说明:排序字段若用列号,表示为#1,#2,#n,注意这里的列号前面要加上#符号,与前面的getitemstring有区别。(2)函数返回值这两个函数的返回值一样,1表示成功,-1表示失败。(2)典型应用例1:dw_1.setsort(“name A”)dw_1.sort()将数据窗口控件dw_1中的数据按“name”字段递增排序。若“name”字段的列号是1,上述第一行脚本可写为:dw_1.setsort(“#1 A”)。结束放映第一页上一页下一页最后一页8.3.6 对数据窗口控件中的数据进行过滤(setfilter)对数据窗口中的数据进行过滤,但又不想重新从数据
23、库中检索数据,这时就要用到setfilter()和filter()两个函数。(1)语法形式:dwcontolname.setfilter(filterexpression)dwcontolname.filter()filterexpression是一个字符串,表示过滤条件表达式,它是一个逻辑表达式,其中各关系表达式之间用逻辑运算符and、or、not连接。在过滤表达式中可以使用列名或列号,列号使用方法同上面的setsort()函数。(2)函数的返回值1表示成功,-1表示失败。(3)典型应用例1:过滤条件中包含数值型常量。dw_1.setfilter(“math_score=70 and mat
24、h_score90”)dw_1.filter()数据窗口控件dw_1的过滤结果:显示“math_score”字段的值介于70和90之间的记录(包含70,不包含90)。结束放映第一页上一页下一页最后一页8.3.7 重新设置数据窗口中的数据(reset)在使用retrieve函数进行检索之前,系统自动调用该函数重置数据窗口,不必在retrieve函数前使用该函数。(1)语法形式:dwcontrolname.reset()此函数不要求参数。(2)函数的返回值1表示成功,-1表示失败。(3)典型应用dw_2.reset()dw_2.insertrow(0)重置数据窗口控件dw_2,清除数据窗口缓冲区内
25、的所有行后,添加一条空白记录。结束放映第一页上一页下一页最后一页8.3.8 插入记录(insertrow)录入数据,添加新记录,就要用到insertrow函数。要想将插入的记录保存到数据库中,还应执行更新命令。(1)语法形式:DWcontrolname.insertrow(rownumber)其中rownumber表示插入行的行号,它是一个long型变量。若它的值是0,表示在数据窗口的最后插入一条记录。(2)函数的返回值函数的返回值是long型,表示插入行的行号;插入失败返回值是-1。该函数只能插入一条记录,但不能自动滚动到插入行,也不能自动把插入行设置为当前行。(3)典型应用long nnn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08 教案 数据 窗口 对象 应用 riuiso PowerBuilder
限制150内