数据库的错误提示(100分)

  • 主题发起人 主题发起人 zhj_nc
  • 开始时间 开始时间
Z

zhj_nc

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是ADOQuery+SQL Server 7.0,当用户输入时,如果关键字为空或重复,数据库会报错
我希望能给用户中文提示,我查过以前的问题,没搞明白。
好象主要有三种办法。
1.把提示信息汉化,但是没有具体到那一个文件,如dbcount,我没找到相应的错误。
2.用IF E.Message=,但是错误提示太长了。
3.用DBEdit的OnEixt,肯定不行,用FIELD,我也没用起。
我最希望能捕捉到错误的编号,是不是不行?
 
用TField 的OnValidate, 你也可用错误信息编号,但错误信息有时不一定正确.
 
怎样用编号,E.???,好象没有这个属性!
 
你要自己作Help最好, 用CreateFmtHelp.
 
能给个例子吗?
 
自己写一个出错模块吧,针对错误编号作相应的解释,若你还能注意到约束出错键值,就能
做更好的解释。
 
升级你的ado,我用的是Microsoft Data Access Components 2.5错误提示就是中文的
不过如果你要给用户看的错误提示我想这样是不够的,最好是在有可能出错的地方用异常
处理,出现异常时提示。
 
to zhangkan:
我也想自己写一个出错模块,但是我找不到错误编号,您是否可以说明怎样获得错误编码?
 
看相关的书呀,我是在用ORACLE,不是SQL SERVER,也没有怎么专门去收集错误信息。不过,
经常容易出错的代码倒是知道。
 
to zhangkan:
请告诉我在DELPHI中如何获取编码,具体编码对应的错误到是可以查书。请贴个例子。
 
非常抱歉哈,我是建议你去书上找错误代码最好,我是出错的时候才知道那个错误代码,再
将它记下来,多了就知道了,这个方法不好,因为我很懒,代码也记了些,所以就没有管它。
 
to zhangkan:
对不起,我没说清楚。
我是问在出错时如何获得错误的编码,您用的什么控件,我用的是ApplicationEvents,在
OnException事件中,E的属性有Message是错误的提示,有个HelpContext,但没用,我想知道
您是怎样知道错误编码的?
 
是的,我用ApplicationEvents中的OnException事件,
你可以判断E.message中是否包含了某个字符串,用pos(string)<> 0 ;
这个方法很笨,不过我一直用它。
我也想找个好的方法,呵。。。。。
 
to sumingfei:
我按照您的办法作了,但是英文的提示在我的中文提示又弹出,怎样将它屏蔽?
 
给你一段别人的代码
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
// Database1.Rollback;
// raise;
On E: EDBEngineError do
begin
Database1.Rollback;
for i := 0 to E.ErrorCount - 1 do
begin
case E.Errors.ErrorCode of
$2601:
ShowMessage('呵呵!不允许鍵值重复!');
$0021:
Showmessage('太糟糕了,系统发生故障!TMD');
$270b:
Showmessage('对不起,你的受到主外键约束!怎么样,很失望吧!');
$2b05:
Showmessage('太糟糕了,网络连接超时判负!TMD');
$0028:
Showmessage('锁定违例!');
$1200:
Showmessage('不能识别的SQL错误!呵呵,有事干了!');
$2501:
Showmessage('太糟糕了,你的内存不足!请使用N(N>=10000)兆内存');
$2605:
Showmessage('对不起,你所添加的数据违反外键约束!');
$2728:
Showmessage('你所操作的表不存在!');
$2801:
Showmessage('记录已经被其它用户琐定!');
$2a06:
Showmessage('数据引擎初始化错误!');
$2c01:
Showmessage('网络初始化失败!');
$2c07:
Showmessage('呜呜..呜呜!一个我不知道的网络错误,这不可能!');
$2c0d:
Showmessage('是谁干的!!服务器竟然没打开!');
$3e07:
Showmessage('初始化失败!');
$3303:
// ShowMessage('服务器端错误:一般的SQL错误!');
else
// //raise EDatabaseError.Create(E.Message);
end;//case
end;//for
end;//on EDBError
end;
CommitUpdates;
end;
 
To sgxia
但是ADO的Error好象不是EDBEngineError,不知ADO有类似的用法吗?
 
我一般懒得去找出错代码,我是出一种错,我才记下来的。而且我的数据库是ORACLE,跟
SQL SERVER的出错代码不一样吧。我的建议是将出错解释放在一个模块里,遇到出错就去
模块里根据相应的e.Message找出相应的解释。统一来管理出错信息。
 
多人接受答案了。
 
后退
顶部