三层问题:删除数据出错!!!(100分)

F

fpsky

Unregistered / Unconfirmed
GUEST, unregistred user!
if ClientDataSet1.RecordCount > 0 then
begin
if Application.MessageBox('真的要删除吗?', '提示信息',MB_OKCANCEL+MB_ICONQUESTION)= 1 then
begin
ClientDataSet1.Delete;
if ClientDataSet1.ApplyUpdates(-1) > 0 then
begin
Application.MessageBox('删除数据出错...', '系统信息', MB_OK);
Abort;
end;
end;
end;

删除数据报错!
程序结构:ADO+MIDAS+ORACLE8
 
1。三层我不是很熟悉,但我知道RecordCount本身有问题的。
最好用while not eofdo
2。删除是用try捕捉看看是什么错误信息
祝你成功
 
用if ClientDataset.ChangeCount>0 then
试试!
 
谢谢楼上两位回答,程序以前是BDE+MIDAS+OARCLE8,删除无任何问题,后来改为
ADO+MIDAS+ORACLE8,代码没有动过,结果就报这个错。请出高见。。。
 
最好不要用ADO連oracle,我個人覺得ado連非win32的東西在效果上總是不好,我以前也是
用bde連,後來就改dbExpress了,都沒想用ado!
 
我比较喜欢用ADO,因为在三层中,做成安装包后,去配置BDE是一件很烦的事情,能在安装少做一点就少做一点,
我用了ADO+DCOM+SQLSERVER用了以上的代码,没有出任何问题,我想会不会ADO在ORACLE的支持上
还是在ORACLE的数据的字段类型的命名和ADO不太一样,能不能换个数据类型,我这没ORACLE,所以没
法试
 
大家判断一下具体是什么问题!
 
你用ApplyUpdates(0)>0 尝试一下呢?
 
TO fpsky:
其實用if ClientDataSet1.ApplyUpdates(-1) > 0 then
這句語句可能有几種情況會執行,
其中要是沒有權限,也會觸發執行.請細心檢查一下.
 
请问怎么才能捕获这错误的具体内容?请高手指点
 
你用delphi打开你的中间服务程序源码,然后在delphi中执行这个中间服务程序
,然后你再执行你的client上的操作就可以知道具体是什么错误了。
 
我用BDE的时候是正确的,只是把DATABASE控件换成了ADO,
对应的QUREY换成了ADOQUERY,别的都没有变呀,
而且以前用BDE时什么都是正常的,为什么现在有问题?
 
to fpsky:
你在ClientDataSet1的ONReconcileError事件中寫下如下代碼,運行試試看:
Application.MessageBox(Pchar(E.Message),'Warning',MB_ICONWARNING+MB_OK);
 
1、将错误信息公布出来,才能认断。
2、我也用ORacle作后台数据库,但我习惯用SQL语名来删除,没出现类似的错误。
3、最好不要用ApplyUpdates(-1),而用ApplyUpdates(0)来更新数据。
 
十分同意楼上的观点。。。
 
因你提供的错误信息不全,因此建议你用clientdataset的onReconcileError事件来看一下
具体是什么地方出的错了。
如果要看具体更新数据的话,可以用file->new->other..->dialogs里的reconcile error
dialog对话框来察看你的每一笔更新出错的数据。只要在onReconcileError里加这么一行:
Action := HandleReconcileError(DataSet, UpdateKind, E);
看能不能帮到你了。
 
if Not(ClientDataSet1.isEmpty) then
begin
if Application.MessageBox('真的要删除吗?', '提示信息',MB_OKCANCEL+MB_ICONQUESTION)= 1 then
begin
ClientDataSet1.Delete;
ClientDataSet1.ApplyUpdates(0);
end;
end;
而后在ClientDataset1的OnReconcileError事件中加入
Showmessage(E.Messages);
Action:=RaAbort;
//
试一下就知道了。
若还不行,可能就是你作了数据触发器了。
 
多人接受答案了。
 
顶部