判断有无记录 有则UPDATE 无则INSERT

解决方案 »

  1.   

    if  query.eof  then
       query.append 
       else
          query.edit;
          ....
        query.post;
      

  2.   

    LZ不会是想在Edit模式下修改主键内容吧?如果是,那么需要查的是修改之后的主键是否重复;如果不是,那么修改时根本不需要校验。
    另外最简单的方法是在表结构中增加唯一性索引,修改时如果报主键冲突或唯一性冲突就提示数据重复,连校验都省了
      

  3.   

    我保存数据用的是ltBatchOptimistic所以想在输入时就能提示用户重复
      

  4.   

    我就想在保存时如何判断内容重复输入
    在保存时用:
    with Qry_Code do
     beign
      sql.clear;
      sql.add('select 1 from table1 where code=:code');
      parameter.parabyname('code').values:='123';
      open
     end
    if  qry_code.reacordcount>0 then
      begin
         Application.MessageBox('数据保存失败,数据重复!','系统提示',MB_OK+MB_ICONERROR);
         Abort;
      end;
    可以编辑时用以上就会出错,因为DB中已存在这次记录了;
      

  5.   

    楼主的select 1 from table1 where code=:code'不是保存数据的语句。对于数据集的insert或edit,一般应该在本地数据集tclientdataset类型处理。当然如果是c/s结构,是adoquery类型的数据集,也是针对adoquery类型本地缓存的数据在inser或edit后再保存到数据库的(这种方法强烈不建议)。而对于判断数据是否重复,首先需了解数据是关键字段还是非关键字段的数据,关键字段的数据库自然回维护,如果是非关键字段的,建议在数据库中对字段设置唯一处理。不建议在数据保存前查找数据库中是否存在相同数据。本身对于数据库来说是一个多线程连接,有多人同时进行数据编辑的。
      

  6.   

    我明白你的意思,交给数据库处理!unique 、primary key