我用DBNavigator1,ADOQuery1,DBGrid1对数据库数据进行操作。其中当我点击DBNavigator1的新增“+”记录时,我想做到如下事情:当相同记录在数据库中已经存在。如姓名为“王五”的记录已经存在。当我点击“+”时。应该提示我相同记录的记录已经存在。并取消数据的插入。我该在什么地方写什么东西?

解决方案 »

  1.   

    在数据集的beforpost事件中写相关代码
      

  2.   

    procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    if button=nbInsert then  //“+”
      begin
        //    查找表,判断重复
      end;
    end;
      

  3.   

    偶建议还是在数据集的beforpost事件中写,这样做规范!在按钮里写代码比较乱
      

  4.   

    adoQuery.open('select id from 表 where 字段1=''值1'' and 字段2 = ''值2''');
    if adoquery.eof 
       //不重复
    else 
       //重复
      

  5.   

    这个是当前输入的值吗:比如
    值1:=dbgrid1.Fields[0].AsString?
      

  6.   

    我在ADOQuery1BeforePost事件中 判断到重复值,可是当我取消后。值已经写入数据库,是怎么回事?怎么解决呀?程序大致如下:
       adoquery2.sql.clear;
       adoquery2.Sql.add('select * from 表1 where name='+QuotedStr(dbgrid1.Fields[0].AsString));
       adoquery2.open;
       if adpquery2.RecordCount>0 then  //找到重复值
       begin
         ADOQuery1.Edit;
         ADOQuery1.Cancel;  //取消post到数据库
         showmessage('记录已存在!');
       end;
      

  7.   

    在beforepost事件中重新检索一次数据库,从而进行判断
      

  8.   

    if adpquery2.RecordCount>0 then  //找到重复值
       begin
          showmessage('记录已存在!');
          Abort;
       end;
      

  9.   

    if button=nbpost then  //“+”
      begin
        //    查找表,判断重复
        ADOQuery1.Cancel;  //取消post到数据库
      end;