1、第十四章 应 用 实 例,14.1 实 例 概 述,本书的实例是一个科研成果管理系统。 本实例的功能包括了下面四部分: (1)录入(2)查询(3)统计(4)设置,14.2 创建一个应用,创建一个工作空间(Workspace)kygl、创建一个目标(Target)kygl创建一个应用(Application)kygl,在应用的Open事件中写语句,Solca.DBMS = ODBCSolca.AutoCommit = FalseSolca.DBParm = Connectstring=DSN=kyglConnect Using Sqlca;If Sqlca.Sqlcode 0 ThenMessa
2、geBox(与数据库连接失败,错误。请稍后再试,或者向管理员联系。)ReturnEnd If/Open(w_userid),14.3 数据库设计,科研人员简历表(employees)科研项目情况表(items) 项目参加人员表 (member)获奖情况表(prize) 辅助编码表 (code)用户口令表 (yhkl),14.4 创 建 表,14.5 创 建 窗 口,主菜单窗口w_main用户登录窗口w_userlogin维护窗口w_employees_maintain、w_items_maintai录入窗口w_employees_input、w_items_input、w_prize_inpu
3、t编辑窗口w_employees_modify、w_items_modify查询窗口w_employees_browse、w_prize_browse 统计窗口w_employees_stat、w_items_stat、w_items_fun_stat、w_prize_stat 编码设置窗口w_code,创建用户登录窗口,图14-4 用户登陆窗口,在“确定”按钮的Clicked事件中写代码,string ls_user,ls_passwordls_user=sle_user.textselect yhklinto :ls_password from yhklwhere yhmc=:ls_use
4、r;if sle_user.text=or sle_password.text=thenmessagebox(,用户名或口令不能为空!)returnend ifif sle_password.text=ls_password thenopen(w_main)close(parent)elsemessagebox(,用户名或口令错误!)end ifgs_user=ls_user /把用户名存储在全局变量中,创建录入和编辑窗口,首先创建用于录入和编辑科研人员的祖先窗口,祖先窗口的代码, 定义实例变量:blob ib_emp_pic/存储图片,祖先窗口的代码, 在窗口的Open事件中编写如下代码:d
5、w_1.settransobject(sqlca)setnull(ib_emp_pic),祖先窗口的代码, 在窗口的CloseQuery事件中写如下代码:,/退出窗口前,检查数据是否修改,提示是否存盘long ll_backvalue if (dw_1.modifiedcount()+dw_1.deletedcount() 0) thenll_backvalue=messagebox(警告,数据已修改,存盘吗?,question!,YesNoCancel!)if ll_backvalue=3 thenmessage.returnvalue=1 elseif ll_backvalue=1 the
6、ncb_save.triggerevent(clicked!)elseend ifend if,祖先窗口的代码, 创建一个函数wf_save(),此函数没有参数和返回值,代码略。,祖先窗口的代码, 在“确定”按钮cb_save的Clicked事件中编写如下代码:wf_save()close(parent),祖先窗口的代码, 在浏览图片按钮cb_browse的Clicked事件中编写代码,略。,创建科研人员详细情况录入窗口,从祖先窗口继承,创建科研人员详细情况录入窗口, 在窗口w_employees_input的Open事件中编写如下代码:long ll_newrowll_newrow=dw_1
7、.InsertRow(0)dw_1.ScrollToRow(ll_newrow)dw_1.SetFocus(),创建科研人员详细情况录入窗口, 在“增加”按钮的Clicked事件中编写如下代码:wf_save()p_1.picturename=nullsetnull(ib_emp_pic)dw_1.reset()dw_1.insertrow(0)dw_1.setfocus(),创建科研人员编辑窗口,从祖先窗口继承,创建科研人员编辑窗口, 在窗口的Open事件中编写如下代码:long ll_rowsstring ls_codels_code=message.stringparmll_rows=d
8、w_1.retrieve(ls_code)selectblob pictureinto:ib_emp_pic from Employeeswhere em_code=:ls_code;p_1.setpicture(ib_emp_pic),创建科研项目录入和编辑的祖先窗口, 创建新窗口,窗口的类型为Response。窗口上的控件如 教材表14-2所示 在窗口的Open事件中编写如下代码 在窗口的CloseQuery事件中编写如下代码 创建一个函数wf_save()在“确定”按钮的Clicked事件中编写如下 在项目参加人员控件中编写如下代码,创建科研项目情况录入窗口,从祖先窗口继承在窗口上添加命
9、令按钮cb_add。 在窗口的Open事件中编写如下代码在“增加”按钮cb_add的clicked事件中编写如下代码,创建科研项目情况编辑窗口,从祖先窗口继承在窗口的Open事件中编写如下代码:long ll_rowsstring ls_codels_code=message.stringparmll_rows=dw_1.retrieve(ls_code),创建祖先窗口w_input,主要目的是以下窗口要继承:创建科研成果窗口w_prize_input科研项目人员参加窗口w_member_input编码设置窗口w_code,创建科研成果录入窗口,从窗口w_input继承创建w_prize_in
10、put,并把标题改为“科研成果录入窗口”。,创建科研项目参加人员录入窗口,从窗口w_input继承创建w_member_input,并把标题改为“科研项目参加人员录入窗口”。,14.5.4 创建维护窗口,创建科研人员维护窗口创建科研项目维护窗口,14.5.5 创建查询窗口,创建科研成果详细情况查询窗口 创建科研人员详细情况查询窗口,14.5.6 创建统计窗口,创建各部门科研人员统计窗口 创建各部门科研项目数统计窗口w_items_stat和各获奖等级的科研成果数窗口w_prize_stat创建项目经费浏览窗口,14.5.7 创建设置窗口,创建编码设置窗口 创建更改密码窗口,14.6 创 建 菜 单,图14-9 设计时的菜单,14.7 将主菜单与主窗口连接,主菜单创建好后,只有与特定的窗口连接才能在运行中应用。在System Tree工作区中打开窗口w_main,在窗口的属性工作区中选择窗口的类型为mdihelp!,在MenuName项中选择我们刚创建好的主菜单m_main。最后单击Save图标退出。,14.8 创建数据窗口,14.8.1 创建下拉数据窗口14.8.2 创建录入数据窗口14.8.3 创建有检索参数的数据窗口 14.8.4 创建查询数据窗口 14.8.5 创建表格统计数据窗口 14.8.6 创建图形统计数据窗口 14.8.7 创建编码设置数据窗口,