实验二PowerBuilder编程基础 一、实验目的 l、熟悉PowerBuilder运行环境: 2、掌握PowerBuilder语法及函数的使用 二、实验内容 1、对w_data的open事件编程,使w_data一打开dw_1中就显示数据 (1)显示数据 Dw 1.settransobjict (splca) Dw 1.retrieve( (2)添加int1 I=dw_1.insertrow(0) Dw 1.scrolltorow (1) Dw_1.setfocus() 除 dw_1.deleterow(0) 保存 int i dw_1.updata() if I=-1 then messagebox("information'”,“数据无法保存) end if 关闭close(parent) (3)对w_data的dlosequery事件编程,使dw中的数据发生改变而又未保存就退出口时给用户一个 消息框提示。 Integer m If dw_1.modifiedcount()+deletedcount(0 then M=messagebox(~信息”“数据已改变,是否保存”,question!YesNoCancel) If m=1 then Else Messagebox("information'”,”已保存数据) End if Elseif m=2 then Return 0 Elseif m=3 then Return I 2、ddb1中为各系名称,当选了一个系后w_1显示该系学生姓名,对ddb_1的selectionchanged 事件编程。 Int I String outname Declare namecur cursor for dist 学生 inct department 6
6 实验二 PowerBuilder 编程基础 一、实验目的 1、熟悉 PowerBuilder 运行环境; 2、掌握 PowerBuilder 语法及函数的使用。 二、实验内容 1、对 w_data 的 open 事件编程,使 w_data 一打开 dw_1 中就显示数据。 (1)显示数据 Dw_1. settransobjict (splca) Dw_1. retrieve( ) (2)添加 int I I= dw_1. insertrow (0) Dw_1. scrolltorow (i) Dw_1. setfocus ( ) 删除 dw_1 . deleterow (0) 保存 int j j= dw_1 . updata ( ) if I= -1 then messagebox (“information” , “数据无法保存”) end if 关闭 close (parent ) (3)对 w_data 的 closequery 事件编程,使 dw_1 中的数据发生改变而又未保存就退出窗口时给用户一个 消息框提示。 Integer m If dw_1.modifiedcount ( ) + deletedcount ( )>0 then M = messagebox (“信息”“数据已改变,是否保存”,question!YesNoCance!) If m=1 then If dw_1.updata ( )= -1 then Messagebox (“information”,”无法保存数据”) Else Messagebox (“information”,”已保存数据”) End if Return 0 Elseif m=2 then Return 0 Elseif m=3 then Return 1 2、ddlb_1 中为各系名称,当选择了一个系后 tv_1 显示该系学生姓名,对 ddlb_1 的 selectionchanged 事件编程。 Int I String outname Declare namecur cursor for Select distinct department From 学生
Where department=:ddlb 1.text Open namecur If sqlea.sqlcode=-1 ther Messagebox(“sql error“,sqlca,sqlerrtext) Else Fetch namecur into :outname: Do where sqlca .sqlcode=0 t :outname I=tv_1.insertitemlast(),outname,2) L0Op while sqlca.sqlcode=0 Tv_1 :deleteitem(i) End if 3dd1为下拉列表框, t1,t2为静态文本框。该窗口打开时,ddb_1从数据库中的院系表中 读出了所有系名,当选择了某系时s1,2分别显示该系系领导和系办电话。 (1)在w_1的open事件下编程. String outname Declare namecur cursor for Select department From Where department=:ddlb_1.text Open namecur; If sqlca.sqlcode=-1 then Messagebox ("sql error",sqlca ,sqlerrtext Fetch namecur into :outname; Do where sqlca .sqlcode=0 Ddlb 1.additem(outname) Fetch namecur into:outname; End if Close namecur; (2)在ddlb_I的selectionchanged事件下编程。 Select系领导,系办电话 From院 Whe 系名=ddb_l.text st1.text=系领导 st2.text=系办电话 4、w_query上有控件ddlb_1和dw_l,在ddlb1中选择系名后dw_1中显示该系的学生。 (1)如果通过带参数的数据窗口对象来完成,请问dw_1中的数据窗口对象的数据源为quick select还 是sql seleet。 (2) 为ddb_I的selectionchanged事件编程 Dw_1.settransobject(sqlca) Dw 1.retricve(ddlb 1.text) 5、当选择了某单选框并输入选择条件,按回车后,w1中显示满足条件的记录。请对以下控件编程。 ( rb_1 >
7 Where department = :ddlb_1.text Open namecur ; If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext ) Else Fetch namecur into :outname ; Do where sqlca .sqlcode = 0 Frtch namecur into :outname ; I=tv_1 .insertitemlast ( ) ,outname,2) L00p while sqlca .sqlcode = 0 Tv_1 :deleteitem (i) End if Close namecur ; 3、 ddlb_1 为下拉列表框,st_1,st_2 为静态文本框。该窗口打开时,ddlb_1 从数据库中的院系表中 读出了所有系名,当选择了某系时 st_1,st_2 分别显示该系系领导和系办电话。 (1) 在 w_1 的 open 事件下编程。 String outname Declare namecur cursor for Select distinct department From 院系 Where department = :ddlb_1.text Open namecur ; If sqlca.sqlcode = -1 then Messagebox ( “sql error “, sqlca ,sqlerrtext ) Else Fetch namecur into :outname ; Do where sqlca .sqlcode = 0 Ddlb_1.additem (outname) Fetch namecur into :outname ; L00p End if Close namecur ; (2) 在 ddlb_1 的 selectionchanged 事件下编程。 Select 系领导,系办电话 From 院系 Where 系名= :ddlb_1.text :st_1.text = 系领导 :st_2.text = 系办电话 4、w_query 上有控件 ddlb_1 和 dw_1,在 ddlb_1 中选择系名后 dw_1 中显示该系的学生。 (1) 如果通过带参数的数据窗口对象来完成,请问 dw_1 中的数据窗口对象的数据源为 quick select 还 是 sql select。答:sql select。 (2) 为 ddlb_1 的 selectionchanged 事件编程。 Dw_1.settransobject (sqlca) Dw_1.retricve (ddlb_1.text) 5、当选择了某单选框并输入选择条件,按回车后,dw_1 中显示满足条件的记录。请对以下控件编程。 (1) rb_1
sle1.enabled=true (2)sle_1 dw-l.setfilter(姓名=+slel.text+”) dw 1.filter() cb 1.visible =true (3)cb_1 rh I checked false rb_2.checked=fals rb3.checked=fals rb 4.checked false sle_1.text sle 2text=" sle_3.text= sle_4.text sle 1.enable false sle 2.enable false sle 3 enable=false sle 4 enable fals 6、W1为列表视图,报表风格 ,当Wist打开时st中显示数据库中学生表的所有学生的信息 请为w_1的pen事件编程. Integer I,j,outage String outname,outsex,soutage Lv1.addcolumn("姓名",left!,800) Lv1.addcolumn(性别,left!,500) Lv1.addcolumn(年龄”,lefl,200 Declare namecur cursor for Select姓名,性别,年龄 From学生; Open namecur If sqlca.sqlcode=1 then essagebox(sql.eror”,sqlca.sqlerrtext) Else 1=1 Do Fetch namecur into :outname,:outsex,:outage J= Lv 1.setitem(I.2.outname Lv1.setitem(I,2,outsex) Soutage=string(outage) Lv_1.setitem(I,3,soutage) I++ Loop while sqlca.sqlcode=0 Lv_1.deleteitem(j) End if Close namecur
8 sle_1.enabled= true (2) sle_1 dw-1.setfilter (“姓名= ‘”+ sle_1.text +” ‘”) dw_1.filter ( ) cb_1.visible = true (3)cb_1 rb_1.checked = false rb_2.checked = false rb_3.checked = false rb_4.checked = false sle_1.text = “” sle_2.text = “” sle_3.text = “” sle_4.text = “” sle_1.enable = false sle_2.enable = false sle_3.enable = false sle_4.enable = false 6、lv_1 为列表视图,报表风格,当 w_list 打开时 lv_list 中显示数据库中学生表的所有学生的信息。 请为 w_1 的 open 事件编程。 Integer I, j , outage String outname , outsex , soutage Lv_1.addcolumn (“姓名”,left! , 800) Lv_1.addcolumn (“性别”,left! , 500) Lv_1.addcolumn (“年龄”,left! , 200) Declare namecur cursor for Select 姓名,性别,年龄 From 学生; Open namecur ; If sqlca.sqlcode = 1 then Messagebox (“sql.error” , sqlca.sqlerrtext ) Else I=1 Do Fetch namecur into :outname, :outsex, :outage ; J=I Lv_1.setitem(I, 2, outname ) Lv_1.setitem(I, 2, outsex ) Soutage = string (outage) Lv_1.setitem (I, 3, soutage) I++ Loop while sqlca.sqlcode=0 Lv_1.deleteitem ( j) End if Close namecur ;
实验三计算器设计 一、实验目的 l、熟悉PowerBuilder运行环境: 2、掌握PowerBuilder数据窗口的创建及使用 二、实验内容 1、用PowerBuilder实现如下计算器(图1): 计算器口回☒ 清除 1 2 3* 4 5 6/ 7 8 + 0 (图1) (CTL+C:复制按钮及按钮中的代码:CTL+T:复制按钮但不复制按钮中相应的代码) (1)声明变量 decimal data/保存中间结果 char str /保存按下的运算符 int flag /f1ag=l表示按下的数字是前面数字的一部分,flag=0表示按下 的数字是一个新的数字的开始 (2)十个数字按钮和小数点按钮代码 if flag=0 then sle_1.text= flag=1 end if sle_1.text=sle_1.text+this.text (3)+、一、*、/运算按钮代码 9
9 实验三 计算器设计 一、实验目的 1、熟悉 PowerBuilder 运行环境; 2、掌握 PowerBuilder 数据窗口的创建及使用。 二、实验内容 1、 用 PowerBuilder 实现如下计算器(图 1): (图 1) (CTRL+C:复制按钮及按钮中的代码;CTRL+T:复制按钮但不复制按钮中相应的代码) (1)声明变量 decimal data //保存中间结果 char str //保存按下的运算符 int flag //flag=1 表示按下的数字是前面数字的一部分,flag=0 表示按下 的数字是一个新的数字的开始 (2)十个数字按钮和小数点按钮代码 if flag=0 then sle_1.text="" flag=1 end if sle_1.text=sle_1.text+this.text (3)+、-、*、/运算按钮代码
choose case str case'' text=string(dec (sle_1.text)*da sle_1.text=string(data/dec(sle_1.text)) case ' sle 1.text=string(dec(sle 1.text)+data) case’ sle_1.text=string(data-dec(sle_1.text)) end choose data=dec(sle_1.text) str=this.text flag=0 (4)“清除”按钮代码 sle_1.text=" data=0 str=', flag=0 (5)“=”按钮代码 sle_1.text=string(dec(sle_1.text)*data) case ' sle_1.text=string(data/dec(sle_1.text)) case'+ .ttrin(d(s_.text)+data) case sle_1.text=string(data -dec(sle_1.text)) end choose flag=0 str=' (6)“应用程序”open事件代码 open(w calculator)
10 choose case str case '*' sle_1.text=string(dec(sle_1.text)*data) case '/' sle_1.text=string(data/dec(sle_1.text)) case '+' sle_1.text=string(dec(sle_1.text)+data) case '-' sle_1.text=string(data - dec(sle_1.text)) end choose data=dec(sle_1.text) str=this.text flag=0 (4)“清除”按钮代码 sle_1.text="" data=0 str='' flag=0 (5)“=”按钮代码 choose case str case '*' sle_1.text=string(dec(sle_1.text)*data) case '/' sle_1.text=string(data/dec(sle_1.text)) case '+' sle_1.text=string(dec(sle_1.text)+data) case '-' sle_1.text=string(data - dec(sle_1.text)) end choose flag=0 str='' (6)“应用程序”open 事件代码 open(w_calculator)