自定义函数一:search 作用是在添加数据时搜索以前是否存在相同的字段值。
自定义函数二:checkdata 作用是在添加数据时检测所有数据是否符合规则,checkdata中有时候需调用search.
增加时用的控件均为dbedit控件
错误提示1:参数a没有默认值(a是dbedit1的值)
错误提示2:标准表达示数据类型不匹配
注:出现两种错误时,调示器箭头都指向if form3.search(dbedit1.DataField,DBEdit1.Text) then这一句代码。用的是access数据为。代码如下:
function tform3.checkdata:boolean;
begin
  result:=true;
  if form3.dbedit1.text='' then
  begin
    result:=false;
    showmessage('编号不能为空!');
    form3.DBEdit1.SetFocus;
    exit;
  end;
  if form3.search(dbedit1.DataField,DBEdit1.Text) then
  begin
    result:=false;
    showmessage('编号重复,请重新录入');
    form3.DBEdit1.SetFocus;
    exit;
  end;
  if form3.DBEdit3.Text='' then
  begin
    result:=false;
    showmessage('名称重复,请重新录入');
    form3.DBEdit3.SetFocus;
    exit;
  end;
end;
function tform3.search(fieldname:string;value:string):boolean;
begin
   form3.adoquery1.Close;
   form3.ADOQuery1.SQL.Clear;
   form3.adoquery1.SQL.Add('select * from toru_zl where '+trim(fieldname)+'='+trim(value));
   form3.adoquery1.Open;
   if adoquery1.RecordCount>0 then result:=true
   else result:=false;
end;

解决方案 »

  1.   

    说明一点,添加数据时是用的adotable的append方法。
      

  2.   

    你的checkdata有很大问题
    1、if form3.dbedit1.text=''  改为 Trim(form3.dbedit1.text)=''
    2、你没有把她修改前的值保存下来,修改后再判断,该字段是否修改过,修改过有没修改成和别的重复,不然你没有修改过改字段的话,数据库中肯定是有该机录的
      

  3.   

    to: ljmanage(过客)
       第二个错误,标准表达示中数据类型不匹配是怎么回事?
      

  4.   

    to  fulinlin(初学者)        if form3.search(dbedit1.DataField,DBEdit1.Text) then
     
            function tform3.search(fieldname:string;value:string
     
           检查dbedit1.DataField 子段是否为 STRING  ?   
      

  5.   

    回答: 第二个错误,标准表达示中数据类型不匹配是怎么回事?楼主呀.我没有说明出错是在哪一行,我们又怎么知道具体是什么一回事呀.但我可以举个例子给你说明一下:比如: FiledName 的字段类型是整型,但你要给它赋一个字符串符,你说会不会产生 数据类型不匹配呢???????
      

  6.   

    to:liqxdt(黑客剑)
       
        if form3.search(dbedit1.DataField,DBEdit1.Text) then
        是判断adotable的dbedit1.datafield中是否存在dbedit1.text,如果存在,表示值已经重复,search返假.
        function tform3.search(fieldname:string;value:string
        是判断adotable的fieldname字段中是否存在value值,如果有返回真,否则返回假.
      

  7.   

    form3.adoquery1.SQL.Add('select * from toru_zl where '+trim(fieldname)+'='+trim(value));
    你的FieldName字段类型是文本型吗?
    判断是否重复,可以在beforePost事件判断
    1.先查找数据
    2.if (RecordCount>=1) and (DataSet.State=DsInsert) then
      //重复
      

  8.   

    to: Maple119(枫叶)
       fieldname代表字段名,只有在第一个编号字段用了search,此字段类型为文本型,数据类型应该不会错吧,出错是在"if form3.search(dbedit1.DataField,DBEdit1.Text) then"这一句代码