要求第一个DBGrid是主表,第二个DBGrid是附表,主表与附表是1对多的关系,删除主表前要将从表的相应的信息全部删掉,删附表的信息时可以直接删除,怎么实现啊?

解决方案 »

  1.   

    procedure TfrmMain.btnDeleteClick(Sender: TObject);
    begin
      if not qryText.IsEmpty then
      begin
        if {添加判断是在主表DBGrid中删除数据} then
        begin
          ShowMessage('该帐号下存在文章信息不能删除');
        end
        else if MessageBox(Handle,'删除该文章信息,确认删除吗?','删除确认',MB_OKCANCEL)=1 then
        begin
          qryText.Delete;
          ShowMessage('该文章信息已删除');
        end
        else
        Exit;
      end
      else
      begin
        if MessageBox(Handle,'确认删除该帐号?','删除确认',MB_OKCANCEL)=1 then
        begin
         qryAccount.Delete;
         ShowMessage('帐号删除成功');
        end
        else
        Exit;
      end;
      btnSearch.Click;
    end;
      

  2.   

    副表中肯定有跟主表相关联的字段,例如A
    你可以这样
    qryAccount.Locate('A','主表DBGrid中删除数据对应的字段值',[])
    //还有第三个参数一般是不填,也可以是以下的值,loCaseInsensitive方式指定查找时区分大小写,loPartialKey方式指定查找支持部分匹配
    如果能定位的话,就会返回True。
      

  3.   

    self.adoquery1.sql.clear;
    self.adoquery1.sql.add('select * from 文章库 where 帐号=主表关联信息');
    self.adoquery1.open;
    if self.adoquery1.reccount>1 begin
      ShowMessage('该帐号下存在文章信息不能删除');
      end;
      

  4.   

    删除要在一个OnClick里面写,而且不能同时执行对两个表的删除
      

  5.   

    呵呵,谢谢你们,我决定分开写了,谢谢babydog01,
      

  6.   

    一起写我也实现了,就是用OnCellClick和OnDateChange结合实现的,定义一个全局变量分别指示两个DBGrid,不过我再三考虑还是分开写了,我自己删除的时候也有点分不清了,谢谢你们,第一次在这里发问就得到这么多的回答,呵呵。
      

  7.   

    procedure TfrmMain.FormShow(Sender: TObject);
    begin
      btnSearch.Click;
      I := 0;
    end;procedure TfrmMain.dbgrdShowTextCellClick(Column: TColumn);
    begin
       I := 2;
    end;procedure TfrmMain.dbgrdShowBasicInfCellClick(Column: TColumn);
    begin
        I := 1;
    end;
    if I = 0 then
       begin
         ShowMessage('请选择要删除的数据!');
       end
       else if I = 1 then
       begin
         if qryText.IsEmpty then
         begin
           qryDeleteMain.Parameters.ParamByName('@ID').Value := qryAccountID.Value;
           qryDeleteMain.ExecSQL;
         end
         else
         begin
           ShowMessage('帐号有文章不能删除!');
         end;
       end
       else if I = 2 then
       begin
         qryDeleteChild.Parameters.ParamByName('@ID').Value := qryTextID.Value;
         qryDeleteChild.ExecSQL;
       end;