我有个数据库异常的问题想和大家讨论一下(高手进来看看!) (100分)

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

Unregistered / Unconfirmed
GUEST, unregistred user!
当在数据库程序时,总会出现一些数据库异常的现象,但是都是系统自己提示的英文信息。
这样用户是不会同意的。用户要的是中文提示。现在能捕捉到BED错误并且显示自己写的中
文提示。但是无法向系统提示的那样,提示具体哪个字段发生什么样的异常。不知道哪位
高手能解决这样的问题。例如:主键重复,通过取出错误代码可以知道是主键重复,提示
用户输入了重复的键但是不能提示用户是哪个字段重复了。但是体统提示的错误信息却能
作到。不知道谁能解决?
 
try

except
on e:Exception do
showmessage(pchar('数据提交出错'+#13+#13+e.message)) ;
end
给分
 
使用SQL2000,他的错误信息,都存储在Master.sysmessages表中,中文的,很好用,
还有在C:/Program Files/Borland/Delphi6/Source目录下搜索文件名const将列出好多
DELPHI的提示信息文件,如:bdeconst.pas,ADOConst.pas,SysConst.pas,自己
慢慢汉化吧(网上好像也有现成的)!
 
这个代码能取出是哪个字段错误吗?我指的不是通过自己写代码来判断是哪个字段出现了异常,
而是根据体统提示的错误,然后取出错误代码和错误字段来判断。如果自己写代码的话,以后
程序可能会运行很慢.例如主键重复。一般人会在保存记录之前先在数据库中用SQL语句先
检查一下是否有记录,如果有那么就提示主键重复,但是这样做不太好。如果以后数据越来越多
速度也会降下来。所以直接取系统提示的错误。然后转换为中文。现在能判断是什么错误,但是
不能想系统提示的英文那样,提示是哪个字段出了问题。
 
直接取系统给出的错误信息,再转换成中文的,这样不知得不得
 
bill_max,是的。我现在想问的就是怎么转换呀?我现在能作到提示各种错误。然后终止程序,
但是,如何判断是哪个字段出的错误呢?
 
有没有人知道啊?
 
真没有人知道吗?[?][?][?][?][?][?][?]
 
大家看看呀!我也有同样的问题呀!有人会吗?
 
基本上就是hryyx 说的了。或者你自己作一个错误提示用的表,在程序中动态的把系统
错误翻译成你自己表中的信息。。。
 
这么久都没有人回答呀?
 
我回答的还不行吗?
 
if (E is EDBEngineError) then
case (E as EDBEngineError).Errors[0].Errorcode of
eRequiredFieldMissing:
Application.MessageBox('对不起,您输入的输入项不全,请重新输入!','错误',MB_OK+MB_ICONERROR);
eKeyViol:
Application.MessageBox('对不起,您输入的编号或代码重复,请重新输入!'#13#13'如果编号或代码是系统自动生成的,并且出现该提示框的话,请和当地的系统管理员联系。谢谢','错误',MB_OK+MB_ICONERROR);
eDetailsExist:
Application.MessageBox('对不起,您要删除的内容中,有其他数据参照该记录,不能删除!','错误',MB_OK+MB_ICONERROR);
eNotNull:
Application.MessageBox('对不起,您输入的输入项不能改为空,请重新输入!'#13#13'如果您输入的输入项不是空的,但是出现了该提示框的话,请检查网络是否已经连通或者数据库是否可以连接?','错误',MB_OK+MB_ICONERROR);
eForeignKey:
Application.MessageBox('对不起,您要修改或者删除的项目违反参照性约束,不允许修改或删除!如果真的要进行删除的话,请和系统管理员联系!谢谢!','错误',MB_OK+MB_ICONERROR);
end
else Application.ShowException(E);

给你一点
 
大家没有看明白我的意思吗?
zqs10597249:你写的这个我已经做到了。但是你能知道是哪个字段出的错吗?我现在想知道
的就是这个问题。
 
后退
顶部