PB开发笔记(3)

这篇博客介绍了PowerBuilder(PB)中的数据库错误处理,包括通过CHOOSE CASE结构处理不同错误代码,显示自定义错误信息。还涉及了数据窗口(DW)的DBError事件处理、规则检查、更新策略以及动态数据窗口的创建。此外,讲解了如何处理数据窗口的多行数据、动态SQL、游标操作,以及一些实用的PB函数和技巧,如设置数据窗口列的可见性、使用OLE对象与Word交互等。
摘要由CSDN通过智能技术生成

//DW的DBError事件
string          error_text
CHOOSE CASE sqlDBCode
          case 1                   error_text = '违反唯一索引!'
             case 1400          error_text = '字段不能为空!'
             case 1407          error_text = '字段不能为空!'
          case 1401          error_text = '字段太长!'
          case 1438          error_text = '数值大于列允许的最大精度!'
          case 2291          error_text = '出现非法字段!'         
          case 1031          error_text = '权限不足!'
          case 911          error_text = '注册名无效!'                  //权限专用
          case 922          error_text = '特殊字符无效!'          //权限专用        
          CASE 1017          error_text = '非法的用户名或口令,拒绝登录!'
          CASE 12154          error_text = '不能分解服务名称!'
          CASE 01005          error_text = '未给出口令或口令错误,拒绝登录!'
          CASE 01935          error_text = '注册名项输入的名称为系统关键字,禁止作为注册名使用!'
          CASE 540          error_text = '数据表或视图不存在!'
          CASE 942          error_text = '数据表或视图不存在!'
          CASE 903          error_text = '非法列名!'
          CASE 1403          error_text = '未查找到符合条件的数据!'                
          CASE -3                  error_text = '在您读入数据和存盘操作过程中,服务器中的数据已被别的用户或窗口改变,请重新读取数据后再试!'
          CASE 6                  error_text = '网络同数据库服务器的连接已经中断,请关闭应用程序然后重新打开.'
          CASE 50                  error_text = '网络同数据库服务器的连接已经中断,请关闭应用程序然后重新打开.'                
          case 1920          error_text = '用户名称与另外的用户或角色名称冲突'
          case 988          error_text = '缺少口令或其非法!'
          case 1918          error_text = '该ORACLE用户不存在!'
          case 1940          error_text = '不能放弃一个当前被连接的操作员,即当前删除的操作员正在使用!'
          CASE ELSE
                  if isnull(sqlca.sqlErrText) or sqlca.sqlErrText = '' then
                          error_text = '数据操作失败!'
                  else
                          error_text = sqlca.sqlErrText
                  end if
END CHOOSE
return MessageBox('错误',error_text,RetrYCancel!,1)        
//DBError参数
Buffer                  发生错误所在的缓冲区
Row                          发生第一笔错误的行数
SqlDBCode          数据库错误代码
SqlErrText          数据库错误信息


//MessageBox(title,text,icon,button,default)
icon参数:
information!          提示(缺省)
stopSign!                  中止
exclamation!          警告
question!                  询问
none!                          没有
button参数:
ok!                                  确定(缺省)
okCancel!                  确定,取消
yesNo!                          是,否
yesNoCancel!          是,否,取消
retryCancel!          重试,取消
abortRetryIgnore! 终止,重试,忽略


//如何在DBError event中处理多笔数据的错误
Rollback Using SQLCA;
If buffer = primary! Then
          Messagebox("error in row:" + string(row),"Code:" + string(sqldbcode) + "," + sqlerrtext)
          This.scrollToRow(row)
          return 1          //避免显示PB缺省的错误信息
end if


//数据窗口的规则检查
当用户在编辑控件中输入数据时,数据并不会立即写入数据窗口的缓冲区中,直到发生下面任何一种情况,
PowerBuilder才会把数据从编辑控件写入数据窗口的缓冲区中.
1.用户按下Enter键
2.用户按下Tab键跳到下一个字段
3.用户按下鼠标键跳到其它字段
4.运行AcceptText()函数
在完全通过4个步骤的规则检查后,才会真正把数据从编辑控件写入数据窗口缓冲区.任何一个步骤的错误
都会产生数据窗口的ItemError Event.数据窗口的数据规则检查步骤如下:
1.数据是否改变?
2.数据类型是否符合?
3.是否符合用户自定字段规则?
4.是否符合ItemChanged Event的程序?


//编辑控件函数
AcceptText():将编辑控件中的数据写入数据窗口缓冲区中.
不要在Itemchanged或ItemError event中编写Acceptext()函数,因为Acceptext()函数有可能驱动
ItemChanged或ItemError event,这将造成死循环的出现.
Ge

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值