DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: KfnqDuxw
今日帖子: 30
在线用户: 26
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 lsh998 (lsh) ★☆☆☆☆ -
盒子活跃会员
2004/4/16 18:29:24
标题:
请各位大虾,给我调试这个程序,(赐黄金万两,美女一群),谢谢!~ 浏览:1513
加入我的收藏
楼主: 这个程序的目的是为了扑捉在(delphi+数据库)时产生的异常,利用application的onexception的事迹来响应异常,以便程序员,能够扑捉。
在工程文件的程序如下:
 
program project1
uses
forms,windows,classes,dialogs,db,,dbtables,sysutils,
unit1 in ’unit1.pas’ {form1};

 

type
tmyclass=class(tobject)
public
procedure  AppException(Sender :TObject; E:Exception); 
procedure  DBEngineError( E :EDBEngineError ); 
procedure  DatabaseError( E :EDatabaseError ); 
function     strkeyviol(str:string):string;
function     strtranengconstriant(str:string):string;
end;
const 
maxCon_straint=1;
con_e=0
con_c=1
//================ 
// 数据库错误处理 
//================ 

procedure Tmyclass.AppException(Sender :TObject; E:Exception); 
begin 
  if (E is EDBEngineError) then begin 
    if ( E as EDBEngineError ).ErrorCount>1 then 
      DBEngineError( E as EDBEngineError ) 
    else 
      Application.ShowException(E); 
  end else if (E is EDatabaseError) then begin 
    DatabaseError( E as EDatabaseError ); 
  end else 
    Application.ShowException(E); 
end; 
 
 
//对于服务器错误,处理Errors[0,1] 


procedure Tmyclass.DBEngineError( E :EDBEngineError ); 
const
errcode_keyviol:tdberror=1;
begin 
  case E.Errors[0].SubCode of 
  ERRCODE_KEYVIOL: // Primary Key, Unique Index  //11111111111
    ShowError( strKeyViol(E.Errors[1].Message) ); 
  else{case} 
    Application.ShowException(E); 
  end;{case} 
end; 

 
//处理本地发现的错误 
procedure tmyclass.DatabaseError( E :EDatabaseError ); 
begin 
  if Pos(’must have a value’, E.Message)<>0 then 
    ShowError(’”’ + strGetToken( E.Message, ’’’’ ) + ’”不能为空’ ) 
  else if Pos(’ not a valid float’,E.Message)<>0 then begin 
    ShowErr or(’您输入的数字不合法’) 
  end else 
    Application.ShowException(E); 
end; 

function Twyclass.strKeyViol( str: string ): string; 
var 
  strE: string; 
begin 
{$IFDEF DBMS_SQL65} 
  strE := strGetToken( str, ’’’’ ); 
  Result := ’”’ + strTranEngConstraint(strE) + ’”不能重复’; 
{$ELSE IFDEF DBMS_INTER5} 
  strE := strGetToken( str, ’”’ ); 
  Result := ’”’ + strTranEngConstraint(strE) + ’”不能重复’; 
{$ENDIF} 
end; 


function Tmyclass.strTranEngConstraint( str: string ): string; 
var 
  i: integer; 
  isFound: boolean; 
begin 
  isFound := False; 
  for i := 0 to maxConstraint do 
    if a2strConstraint[i,conE] = str then begin 
      isFound := True; 
      Break; 
    end; 

  if isFound then 
    Result := a2strConstraint[i,conC] 
  else 
    Result := ’未知错误(’ + str + ’)’; 
end; 

{$define dbms_sql65}
{$define dbms_inter5}
----------------------------------------------
lsh
作者:
男 lsh998 (lsh) ★☆☆☆☆ -
盒子活跃会员
2004/4/17 16:56:51
1楼: 我只有狠心,把奖赏加翻!`~

----------------------------------------------
lsh
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行66.40625毫秒 RSS