常用控件的编程实验报告.doc
实验二 常用控件的编程 一、实验目的和要求 (1)掌握窗口下拉列表框、选择钮、组合框、多行编辑框等常用控件的基本使用方法和编程方法; (2)掌握窗口控件的齐整性操纵方法以及Tab顺序的设置; (3)掌握SQL语句的使用,PowerBuilder系统提供的SQL画板的使用方法。 二、实验准备 (1)复习有关下拉列表框控件、选择按钮控件、多行编辑框控件以及组合框控件的内容; (2)启动Powerbuilder 9.0; (3)选择已经创建的应用 mypb.pbl。三、实验步骤 本次实验将创建一个学生基础数据的录入窗口;其功能是向实验1中创建的student数据库中的student表输入数据。1创建窗口对象创建一个新的弹出式窗口对象,Title为“学生基本情况输入”;WindowType为“popup!”;保存窗口名称为w_studentinput。2向窗口中添加控件 (1)布置窗口中的静态文本控件在窗口控件下拉列表工具栏图标中选择静态文本控件,然后在窗口上单击,生成静态文本控件。将 Text属性设置为“学生情况录人”,选择字体为“华文行楷”(无此字体时,可以换成别的字体),字体尺寸为26,按下“Bold”图标按钮,选择“TextColor”为深蓝色。其他输入栏的说明文字都选为宋体12号黑色宇;使用Ctrl和T组合键进行外观复制后修改Text 属性完成。(2)布置窗口中的单行编辑框控件 在窗口控件下拉列表工具栏图标中选择单行编辑框控件,然后在窗口上单击,生成单行编辑框控件。使用 Ctrl和 T组合键进行外观复制生成 5个单行编辑框,它们的名称和用途见表4。表4 单行编辑框的名称和用途控件名称说明字段用 途sle_id学号输入学生学号sle_name姓名输入学生姓名sle_birthday出生日期输入学生出生日期sle_home家庭地址输入学生家庭地址sle_tel联系电话输入学生家庭联系电话 (3)布置窗口中的多行编辑框控件在窗口控件下拉列表工具栏图标中选择多行编辑框控件,然后在窗口上单击,生成多行编辑框控件。其名称Name为“mle_resume”,选中“IgnoreDefaultButton”复选框。多行编辑框控件用于输入个人简历。(4)布置窗口中的单选钮和组合框控件 窗口中共有两组单选钮,一组为性别选择,另一组为党团员选择。性别选择单选钮的设计方法为:在窗口控件下拉列表工具栏图标中选择组合框控件,然后在窗口上单击,生成组合框控件、再选择单选钮控件,在组合框中单击,生成单选钮控件。设置其名称为rb_man,Text为“男”,选中Checked属性;同样再在组合框中放置一个单选钮控件,设置其名称为rb_woman,Text为“女”,不选中Checked属性。类似地,再设置一组单选钮,用于党团员选择,其属性设置见表5。表5 党团员选择单选钮控件名称Text属性Checked属性rb_CY团员选中rb_CP党员不选中rb_none非不选中注意,在PowerBuilder中,单选钮的组合是根据输入的顺序和Checked属性的选择自动识别的;所以,一定要有秩序地输入,如果出现组合上的混乱,可以将单选钮全部删除后重新输入。 (5)布置窗口中的下拉列表框控件在窗口控件下拉列表工具栏图标中选择下拉列表框控件,然后在窗口上单击,生成下拉列表框控件。输入下拉列表框控件名称为ddlb_nation,不选中Sorted属性,选中Vscrollbar属性。单击下拉列表框控件后拖动下边框,调整下拉列表框展开后的长度。 (6)布置窗口中的命令按钮控件在窗口控件下拉列表工具栏图标中选择命令按钮控件,然后在窗口上单击,生成命令按钮控件。窗口中共有两个命令按钮控件,设置一个按钮的Text属性为“确定”,名称为cb_ok选中 default属性;设置一个按钮的 Text属件为“退出”,名称为 cb_exit,选中 Cancel属性。图1 学生情况录入界面3窗口控件的齐整性操作和设置输入时的Tab顺序用手工来对齐控件和调整控件大小是费时且枯燥的工作。PowerBuilder已经为我们提供了自动化的齐整性操作工具,例如,要使一排控件对齐,首先选中一排中的第1个控件,然后按下Ctrl键,再去单击选中这一排中的其他控件,可以看到,当选择达到两个或两个以上控件时,工具栏上齐整性操作下拉列表图标按钮由灰(不可用)变为亮(可用)。单击齐整性工具栏中的上边对齐图标按钮,被选中的这一排控件就按上边对齐了。试着使用其他齐整性工具按钮。设置输入数据时的Tab键顺序的方法:(1)单击菜单项 FormatTab Order,这时,所有控件右上角出现红色数字框;(2)按照输人习惯;从10开始,以10递增的顺序设置输人控件的Tab键顺序,0为无Tab键顺序;(3)调整完后,再单击菜单项 FormatTab Order,结束 Tab键顺序的设置。 4编写脚本 (1)下拉列表框控件的Constructor事件的脚本 单击选中下拉列表框控件,选择右键弹出菜单中的Script菜单项,进人SCript子窗口,选择事件下拉列表框中的Constructor事件,输人以下脚本: this.additem("汉族") this.additem("回族") this.additem("维吾尔族) this.additem("藏族") this.additem("苗族") this.additem("黎族")(2)“退出”按钮的脚本单击选中“退出”命令按钮控件,选择右键弹出菜单中的SCript菜单项,进入SCript子窗口,选择事件下拉列表框中的Clicked事件,输入以下脚本: Close(Parent)(3)“确定”按钮的脚本“确定”按钮的代码比较长,首先是对输入数据的有效性检查。这是所有用户界面设计时都必须考虑到的,它包括检查必要的数据是否输入了,输入的类型、范围和格式是否正确;其次是对输入数据的预处理,例如去前后的空格,数值的转换等:第三是逻辑检查,尽管输入数据是有效的,但还必须保证数据在逻辑上的有效性,此例中,学号是惟一的,不允许有重复,所以进行了学号的重复性检查;第四是将数据写入数据库,这里直接采用了 SQL语句;最后是将输入控件全部置空,为下一条记录的输入作准备。PowerBuilder提供了常用的变量类型、函数、全局变量、循环语句以及SQL语句的粘贴工具,将光标置于Script区中,试着使用工具栏上“Paste Function”、“Paste SQL”、“Paste Statement”和“Paste Global”等图标按钮,将会发现在 PowerBuilder环境中编程是非常简便的。尤其是SQL语句的输入画板,十分方便快捷,即使对SQL 语句不熟悉也可以输入完整、正确的 SQL语句,可以说,PowerBuilder的 SQL 语句画板,也是一个学习 SQL 语句的很好的工具。单击选中“确定”命令按钮控件,选择右键弹出菜单中的SCript菜单项,进人SCript子窗口,选择事件下拉列表框中的 Clicked 控件,输入以下脚本。 Long ll_id,ll_i date ld_birthday string ls_name,ls_nation,ls_home, ls_sex,ls_tel,ls_party /数据格式检验 if sle_id.text” OR isNull(sle_id.text)then messagebox(”缺少数据”,”请输入学号”) sle_id.setfocus() return elseif sle_name.text” OR isNull(sle_name.text)then messagebox(”缺少数据”,”请输入学生姓名”) sle_name.setfocus() return end if If sle_birthday.text<>” AND not isNull(sle_birthday) then if isDate(sle_birthday.text)then ld_birthdaydate(sle_birthday.text) else messagebox(”输入数据错误”,”请使用“年-月-日”的日期格式”) sle_birthday.setfocus() return end if end if ll_idlong(sle_id.text) /取出党团员选择 if rb_1.checked=true thenl ls_party=rb_1.text elseif rb_2.checked=true thenls_party=rb_2.text else ls_Party=rb_3.text end if/取出性别选择 if rb_man.checkedtrue then ls_sex=rb_man.text elseif rb_woman.checkedtrue then ls_sex=rb_woman.text end if/由民族ddlb,取出民族选择 if ddlb_nationtext="none" then ls_ nation="" else ls_ nation=trim(ddlb_nationtext) end if /检查学导有无重号 SELECT studentstud_id INTO:ll_i FROM student WHERE student.stu_id=:ll_id; if ll_i<>0 then messageBox("错误信息","学号第"+string(ll_i)+"号重号!请改正。") sle_id.setfocus() return end if ls_name=trim(sle_name.text) ls_home=trim(sle_home.text) ls_teltrim(sle_tel.text) /向数据库写入数据 INSERT INTO "student" ( "stud_id", "name", "birthday", "sex", "nation", "home", "tel", "party", "resume") VALUES(:ll_id, :ls_name, :ld_birthday, :ls_sex, :ls_nation, :ls_home, :ls_tel, :Is_party, :mle_resume.text); /数据写入数据库后,将输入控件全部置空 sle_idtext"" sle_nametext"" sle_birthdaytext"" mle_resume.text="" sle_hometext"" sle_teltext"" sle_idsetfocus()/将光标放到“学号”输入栏5关联窗口 W_studentinput到应用程序中 1)建立应用程序到数据库的连接。双击Workspace画板中的mypb应用图标,进入mypb的open事件,输入以下脚本:/ Profile sample 下面三行代码为连接参数SQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "ConnectString='DSN=mydb;UID=sa;PWD='"/ 连接数据库connect;/ 运行输入窗口Open(w_studentinput)其中,连接数据库的连接参数代码可以从Profile中粘贴过来:(1)在Database画板的窗口中,选择“ODBC”项; (2)在“ODBC”项下列出的所有可以连接数据库的 DB Profile中选中“mydb”后单击右键,在弹出式菜单选择“Properties”,会重新弹出“Database Profile SetupODBC”对话框,选择“preview”项,然后单击“copy”按钮。见图2。图2 copy数据库的连接参数代码 (3)在mypb的open事件中粘贴数据库的连接参数代码。如图3所示。图3 应用程序的open事件6预览窗口和运行程序在窗口设计过程中,按下“Preview”图标按钮,可以随时预览窗口运行时显示的实际效果。设计完毕后,可以按“ Run”图标按钮,即进入“学生基本情况输入”窗口,输入一些数据,每次输入一个学生数据后,按“确定”按钮或回车键。按Esc键或“退出”按钮,退出输入学生数据对话框。结束程序运行后,打开数据库,编辑student表,发现刚才输入的数据已经保存在表中了。四、实验结果1.录入学生情况2.检验输入是否正确五、实验总结在这次实验中,我学习了如何使用PowerBuilder系统建立界面并连接数据库以实现信息录入功能,掌握了窗口下拉列表框、选择钮、组合框、多行编辑框等常用控件的基本使用方法和编程方法以及掌握窗口控件的齐整性操纵方法以及Tab顺序的设置,学会了SQL语句的使用,PowerBuilder系统提供的SQL画板的使用方法。在实验过程中也出现了不少问题,例如对一些空间脚本的编写上,尤其是对确认按钮脚本的编写出现了不少错误,但经过老师和同学的帮助最终实现了信息录入功能。这次实验中我通过对数据库的具体应用与操作,更加彻底的明白了课本上讲的理论知识,理论与实践的结合使我对数据库的学习有了更浓厚的兴趣,也让我认识到数据库的使用的普遍性,我会在以后的编程开发中更好的使用数据库技术。