2026年pb编程试题及答案_第1页
2026年pb编程试题及答案_第2页
2026年pb编程试题及答案_第3页
2026年pb编程试题及答案_第4页
2026年pb编程试题及答案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

2026年pb编程试题及答案一、选择题(每题2分,共20分)1.在PowerBuilder2026中,以下关于数据窗口(DataWindow)的描述,错误的是:A.自由格式(Freeform)数据窗口适用于单条记录的详细显示与编辑B.分组式(Group)数据窗口需至少定义一个分组表达式C.图表式(Graph)数据窗口的数据源可以是SQL查询或外部数据D.交叉表(Crosstab)数据窗口的行、列、值字段必须来自不同的数据表2.事务对象(TransactionObject)的默认名称是:A.SQLCAB.TransObjC.AppTransD.SysTrans3.当用户在数据窗口中修改某行记录的字段值并移动焦点后,会触发的事件是:A.RowFocusChangedB.ItemChangedC.RowUpdatedD.UpdateStart4.以下哪项不是PowerBuilder中变量作用域的类型?A.全局变量(Global)B.实例变量(Instance)C.共享变量(Shared)D.局部变量(Local)5.若要在运行时动态修改数据窗口的SQL语句,应使用的函数是:A.SetSQLSelectB.ModifyC.RetrieveD.SetFilter6.在PB中,使用DECLARE...DYNAMICCURSORFOR语句定义动态游标时,绑定输入参数的函数是:A.USINGSQLSAFETYB.USINGDESCRIPTORC.USINGPARAMETERD.USINGVARIABLE7.关于用户对象(UserObject)的描述,正确的是:A.自定义用户对象(CustomUserObject)不能继承标准可视化对象B.可视用户对象(VisualUserObject)只能包含单一类型的子控件C.类用户对象(ClassUserObject)可作为其他对象的属性类型D.用户对象无法在运行时动态创建8.执行dw_1.Update()后,若要判断是否提交成功,应检查的事务对象属性是:A.SQLCA.SQLCodeB.SQLCA.SQLDBCodeC.SQLCA.DBMSD.SQLCA.AutoCommit9.在PB的事件处理中,窗口的Open事件与Close事件的触发顺序是:A.Open在窗口创建前触发,Close在窗口销毁后触发B.Open在窗口创建后触发,Close在窗口销毁前触发C.Open在窗口显示前触发,Close在窗口隐藏后触发D.Open在窗口显示后触发,Close在窗口隐藏前触发10.以下关于错误处理的描述,错误的是:A.TRY...CATCH块可捕获PB运行时错误和数据库错误B.事务对象的DBError事件可自定义数据库错误处理逻辑C.若AutoCommit为True,执行非查询SQL语句后会自动提交事务D.调用Rollback()函数仅回滚当前事务,不会重置事务对象状态二、填空题(每题3分,共15分)1.PowerBuilder中,用于将数据窗口与事务对象关联的函数是________。2.若要在数据窗口中过滤显示“药品价格大于50且库存数量小于100”的记录,应使用的函数组合是SetFilter()和________。3.动态创建窗口对象时,需使用________函数实例化窗口,使用Destroy()函数释放资源。4.事务对象的________属性用于设置数据库连接的超时时间(单位:秒)。5.在数据窗口的ItemChanged事件中,若要取消当前修改并恢复原值,应设置参数________为1。三、简答题(每题10分,共30分)1.简述PowerBuilder数据窗口的工作原理(从定义到数据提交的完整流程)。2.说明PB中事务处理的核心步骤,并解释AutoCommit属性对事务提交的影响。3.举例说明如何使用自定义用户对象实现“带输入验证的文本框”(要求描述属性、事件和方法设计)。四、编程题(共35分)1.(15分)设计一个社区医疗信息管理系统的“药品信息维护”窗口,要求实现以下功能:窗口包含数据窗口dw_drug(数据源为drug表,字段:drug_id[主键]、drug_name、price、stock、producer)提供“新增”“保存”“删除”“查询”按钮(分别命名为cb_add、cb_save、cb_delete、cb_query)新增时清空数据窗口当前行,保存时验证药品名称非空、价格大于0;删除时提示“确认删除该药品?”查询功能支持按“药品名称模糊匹配”检索数据2.(20分)编写PB代码实现以下需求:连接SQLServer数据库(服务器名称:SQLSERVER2026,数据库名:MedicalDB,用户名:sa,密码:P@ssw0rd)使用动态SQL执行存储过程usp_UpdateDrugStock(参数:@drug_idINT,@new_stockINT,输出参数:@resultINT,0表示成功,1表示库存不足)调用该存储过程更新药品库存,若@result=1则抛出异常“库存更新失败:库存不足”,并回滚事务答案一、选择题1.D(交叉表的行、列、值字段可来自同一表)2.A(默认事务对象为SQLCA)3.B(修改字段值并移动焦点触发ItemChanged)4.C(PB变量作用域无“共享变量”)5.A(SetSQLSelect用于动态修改SQL语句)6.B(动态游标绑定参数使用USINGDESCRIPTOR)7.C(类用户对象可作为属性类型)8.A(Update()后通过SQLCA.SQLCode判断是否成功)9.B(Open在窗口创建后触发,Close在销毁前触发)10.D(Rollback()会重置事务对象状态)二、填空题1.SetTransObject()2.Filter()3.Open()4.LockTimeout5.dwo.Protect(或设置ItemChanged事件的参数Action=1)三、简答题1.数据窗口工作流程:(1)定义阶段:通过数据窗口画笔选择数据源(表、SQL查询等),设置显示格式(如自由格式、网格)、编辑风格(下拉列表、文本框)及校验规则。(2)关联事务:使用SetTransObject()将数据窗口与事务对象(如SQLCA)绑定,确保数据库操作通过该事务执行。(3)检索数据:调用Retrieve()函数向数据库发送查询请求,数据库返回结果集,数据窗口将结果加载到缓存(RowBuffer)中。(4)显示与编辑:用户在数据窗口中查看或修改缓存中的数据,修改会触发ItemChanged等事件,可在此进行实时校验。(5)提交数据:调用Update()函数将缓存中的修改(插入、更新、删除)提交到数据库。若AutoCommit为False,需手动Commit();若失败则Rollback()。2.事务处理核心步骤:(1)配置事务对象:设置DBMS(数据库类型)、Database(数据库名)、UserID、DBPass等连接参数。(2)连接数据库:调用Connect()函数,若SQLCA.SQLCode=0则连接成功。(3)执行数据库操作:通过数据窗口或SQL语句(如INSERT、UPDATE)修改数据,操作结果通过SQLCA.SQLCode反馈。(4)提交或回滚:若所有操作成功,调用Commit()提交事务;若出错则调用Rollback()回滚。AutoCommit影响:若AutoCommit=True,每条非查询SQL语句执行后自动提交(无需手动Commit),适用于单次操作;若为False,需手动控制提交,适用于需要原子性的多步操作(如转账)。3.自定义用户对象“带输入验证的文本框”设计:属性:添加MaxLength(最大输入长度)、AllowEmpty(是否允许空值)、RegEx(正则表达式规则)。事件:继承标准文本框的Modify事件,在事件中添加验证逻辑:检查输入长度是否超过MaxLength,若AllowEmpty=False则验证非空,使用RegEx.PowerMatch()验证格式。方法:AddValidationRule(stringrule)(动态添加验证规则)、ClearError()(清除错误提示)。扩展:在对象中添加一个隐藏的静态文本框(st_error),当验证失败时显示错误信息(如“输入格式错误”),成功则清空。四、编程题1.药品信息维护窗口实现代码(关键部分):(1)窗口Open事件:dw_drug.SetTransObject(SQLCA)dw_drug.Retrieve()(2)cb_add(新增)点击事件:dw_drug.InsertRow(0)//在末尾插入空行dw_drug.SetColumn("drug_name")//焦点移至药品名称字段(3)cb_save(保存)点击事件:stringls_namedecimalld_pricelongll_rowll_row=dw_drug.GetRow()ifll_row=0thenreturn//验证药品名称非空ls_name=dw_drug.GetItemString(ll_row,"drug_name")iftrim(ls_name)=""thenMessageBox("错误","药品名称不能为空!")returnendif//验证价格大于0ld_price=dw_drug.GetItemDecimal(ll_row,"price")ifisnumber(string(ld_price))=falseorld_price<=0thenMessageBox("错误","价格必须为大于0的数值!")returnendif//提交修改ifdw_drug.Update()=1thenCommit;MessageBox("提示","保存成功!")dw_drug.Retrieve()//刷新数据elseRollback;MessageBox("错误","保存失败:"+SQLCA.SQLErrText)endif(4)cb_delete(删除)点击事件:longll_rowll_row=dw_drug.GetRow()ifll_row=0thenMessageBox("提示","请选择要删除的药品!")returnendififMessageBox("确认删除","是否删除该药品?",Question!,YesNo!)=IDYesthendw_drug.DeleteRow(ll_row)ifdw_drug.Update()=1thenCommit;MessageBox("提示","删除成功!")dw_drug.Retrieve()elseRollback;MessageBox("错误","删除失败:"+SQLCA.SQLErrText)endifendif(5)cb_query(查询)点击事件:stringls_namels_name=InputBox("查询条件","请输入药品名称关键字:")iftrim(ls_name)=""thendw_drug.SetFilter("")elsedw_drug.SetFilter("drug_namelike'%"+ls_name+"%'")endifdw_drug.Filter()//应用过滤2.动态SQL调用存储过程代码://配置事务对象SQLCA.DBMS="MSSMicrosoftSQLServer"SQLCA.Database="MedicalDB"SQLCA.ServerName="SQLSERVER2026"SQLCA.UserID="sa"SQLCA.DBPass="P@ssw0rd"SQLCA.AutoCommit=False//连接数据库Connect;ifSQLCA.SQLCode<>0thenMessageBox("错误","数据库连接失败:"+SQLCA.SQLErrText)Returnendif//定义变量intli_drug_id=1001//示例药品IDintli_new_stock=200//新库存intli_result//动态SQL调用存储过程DECLAREdynamic_cursorDYNAMICCURSORFORSQLSAFETY;PREPARESQLSAFETYFROM"EXECusp_UpdateDrugStock@drug_id=?,@new_stock=?,@result=?OUTPUT";IFSQLCA.SQLCode<>0THENMessageBox("错误","预处理失败:"+SQLCA.SQLErrText)

温馨提示

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

评论

0/150

提交评论