100 分!!我在CSDN问了一圈,没有人能够回答我,不知道这里有没有高手,关于三层中错误处理的问题!!(100分)

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

xhyph

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi5.0+ADO+MIDAS+SQL Server2000
我在SQLServer2000创建了好几个唯一约束,,
当我在ClientDataSet输入数据的时候,违反了这些约束键。。
我想在OnRelicentError(好象写错了)获得这些错误,
但是我只能在E.Message 里得到错误信息,
我如何得到我到底违反了哪个约束键名?
我现在的办法事从 E.Message 提炼出我所违反的约束键名,
但是我觉得这个办法不地道,
请问我如何得到我到底违反了哪个约束键名?
 
如果你用MIDAS+DCOM,处理错误还是相对简单的。
至于怎样得到违反的约束名,我也不知道。
不过对于一般的处理处理,你可以看看李维的“系统篇”。
 
可是我要的不是一般处理
 
有必要把数据库更新问题用运行期绑定的方法吗?
如果你不是做什么查询生成器的话,没有必要走这个牛角尖
 
To BigTall
是这样的,我的数据库里有张表
表中有三四个字段 均是必须是唯一性的
我把这些字段都创建个唯一约束
只要是输入了已有的数据,就会出错
但是在MIDAS的客户端里, 我只能得到它违反约束键的错误事件
至于哪个字段哪个约束被违反了 ,我就不知道的
我总得让输入的人知道他哪个数据是后台已经有的
否则人家不干
 
TField有ConstraintErrorMessage属性,对应你的各个唯一的字段
设不同的ConstraintErrorMessage不可以吗?
 
"TField有ConstraintErrorMessage属性,对应你的各个唯一的字段
设不同的ConstraintErrorMessage不可以吗?"
不懂?你是说从ConstraintErrorMessage得到错误?
 
我没时间写详细答案。
去看李维的《ADO高级编程》,书中自有指明灯。
 
那本书里没有
 
在中间层,用F8来追踪不就行了。
方法:1、把中间层用DELPHI来运行,使DELPHI处于调试状态。
2、把客户端启动,运行,在中间层设置断点,追踪。
 
自己把输入的数据逐一放到ADOQuery中查询一次,如果有记录说明已经存在这样的记录,就可以报错了!
 
To starbzj:
你难道要叫我的客户用Delphi来跟踪我的程序????
To biggj
我要个正规化的解决方法 你的办法还不如我的有效
 
由服务端来处理错误,然后把错误送到客户端!!!
 
To wlmmlw:
你能否举个例子
记住要得到所违反的那个约束键名
 
这样,把你的表解开来,有几个字段解成几个表。
然后在每个表的OnPoseError中处理错误。就行了。
 
To :txmaster
我指的是在三层中 是在ClientDataSet.ApplyUpdates后
如何得到错误(包含所违反的约束键名)
再说把字段拆开也太不现实了
 
在TClintDataSet控件的OnRecordError事件中调用
HandleReconcileError(DataSet,UpdateKind,E);
 
To 9861
那个错误显示的对话框只能把 E.Message 一丝一毫的显示
而我要用自己的话提醒客户
而且那个错误显示的对话框也不能够把 哪个被违反的约束键名提炼出来
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
948
import
I
后退
顶部