三层:前台delphi如何根据后台sql server7返回的消息,确定是什么错误?如主键重复,违反那一约束条件等!(225分)

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

gravel

Unregistered / Unconfirmed
GUEST, unregistred user!
三层:前台delphi如何根据后台sql server7返回的消息,确定是什么错误?
如主键重复,违反那一约束条件,数据溢出等!
另外:
如果我有大量表的大量字段是非负整数,为了限制用户输入负数,方法1:在后台数据库建
立约束条件,这样做起来方便,但要用户ApplyUpdate时候才知道出错,增大网络传输负荷。
方法2:在前台写代码(一般是Beforepost事件),这样要写的代码多,但在post之前就可以
检查出错误。
请问你们一般是怎样做的!
 
调用ApplyUpdates方法更新数据时,如果发生了错误,那呒MIDAS首先会触发应用
程序服务器中TDataSetProvider组件的OnUpdateError事件处理函数,让应用程序
服务器有机会处理错误,然后会触发客户端应用程序中TClientDataset组件的OnReconcileErrOR
事件.
给你看一段李维书里的程序:
procedure TErrorServer.DataSetProvider1UpdateError(Sender:TObject;
DataSet:TClientDataSet;E:EUpdateError;UpdateKind:TUpdateKind;
var Response:TResolveResponse);
var
eDBError:EDBEngineError;
iCount:Integer;
begin
frmErrorServer.Edit1.Text:=IntToStr(E.ErrorCode);
frmErrorServer.Edit2.Text:=E.Context;
if (E.ErrorCode<>0) then
if (E.OriginalException is EDBEngineError) then
begin
eDBError:=E.OriginalException as EDBEngineError;
ShowMessage(IntToStr(eDBError.ErrorCount));
for iCount:=0 to eDBError.ErrorCount-1do
begin
frmErrorServer.ListBox1.Items.Add(IntToStr(eDBError.Errors[iCount].NativeError));
end;
end;
end;

procedure TForm1.ClientDataSet1ReconcileError(DataSet:TClientDataSet;
E:EReconcileError;UpdateKind:TUpdateKind;
var Action:TReconcileAction);
begin
HandleReconcileError(DataSet,UpdateKind,E);
end;

呼~~~~~~,敲得我手都酸了!!!!
 
yunshang,有光盘,可以copy
 
从哪考啊?!
我这人好笨的!!!!!
 
1:既然是三层结构,那看你中间层的处理了。可以返回出错的代码等。
2:用后台控制的话,数据库太累了。自己可以在前台控制。要不,用个
仅允许输入非负整数的控件,我用过Rx 的。自己Down一个吧(www.rxlib.com)
 
在ClientDataSet的OnReconcileError事件中写
Action := HandleReconcileError(DataSet, UpdateKind, E);
HandleReconcileError为ReconcileError dialog单元的一个方法
Delphi->File->New...->Dialog->Reconcile Error dialog
 
上面的例子都出自于李伟的书,我把源程序都E_mail给你吧。
另:出错处理我一般都在前台做,其实TField都有:
CustomConstraint,ConstraintErrorMessage,ImportedConstraint,MaxValue,MinValue
等属性,综合利用以上属性,就可以做得很好了,根本不用写代码。
 
多人接受答案了。
 
后退
顶部