欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

TClientDataSet 提交时提示 Field value Required 但是未提示具体哪个字段。

程序员文章站 2022-03-10 12:46:42
TClientDataSet 提交时提示 Field value Required 但是未提示具体哪个字段。 这个错误特别麻烦,要使用 midas 控件时,虽然很方便。但是出错了根本找不到原因,特别是这个异常。下面的补丁,可以帮助找到错误原因。 注:我们自己在使用的时候,采用了控件继承,因此可以把这 ......

tclientdataset 提交时提示 field value required 但是未提示具体哪个字段。

这个错误特别麻烦,要使用 midas 控件时,虽然很方便。但是出错了根本找不到原因,特别是这个异常。
下面的补丁,可以帮助找到错误原因。

注:我们自己在使用的时候,采用了控件继承,因此可以把这个功能变成控件基本功能,但是继承相关代码特别多,就不在这里贴了。

 

 1 procedure postandcheckvalue(ds: tdataset);
 2 var
 3   i: integer;
 4   curfield: tfield;
 5   strfield: tstringfield;
 6 begin
 7   try
 8     ds.post;
 9   except
10     on e: edbclient do begin
11       if e.message = 'field value required.' then begin
12         for i := 0 to ds.fields.count - 1 do begin
13           curfield := ds.fields[i];
14           if curfield.required and ds.fields[i].isnull then
15             raise edbclient.create('必要的数据项“' + ds.fields[i].displaylabel + '”为空值!', e.errorcode);
16 
17           if curfield.required and (curfield is tstringfield) then begin
18             strfield := curfield as tstringfield;
19             if strfield.fixedchar and (strfield.asstring = '') then
20               raise edbclient.create('必要的数据项“' + ds.fields[i].displaylabel + '”为空值!', e.errorcode);
21           end;
22         end;
23       end;
24       raise;
25     end;
26   end;
27 end;

调用时,如果出错。就用这个进行提交即可:

mydataset.append;

postandcheckvalue(mydataset);