两个表,department,member,分别用grid1,grid2显示
grid1用adotable,grid2用adoquery
我在grid1的cellclick事件中写代码让grid2显示出对应的member(类似master,detail)
上面的都没有问题
可是在我操作查询后的数据集时就会出现错误,我删除grid2的某一个记录后,就会把department表里相对应的记录给删除了,比如department表有记录A,对应了member表的3个记录B,C,D,当我删除了B,则A记录也删除了,请问为什么?该怎么办?
删除的语句我是这样写的:adoquery->Delete();

解决方案 »

  1.   

    //点击某个部门时,显示该经销商的客户列表
    void __fastcall TMainForm::cxGridDBTableView1CellClick(
          TcxCustomGridTableView *Sender,
          TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
          TShiftState AShift, bool &AHandled)
    {
            adoquery->Close();
            adoquery->SQL->Clear();
            AnsiString tempsql;
            AnsiString tempid = tbl_department->FieldByName("department_id")->AsInteger;
            tempsql = "select a.* from department a,member b where a.department_id = b.department_id and a.dealer_id = "+tempid
            adoquery->SQL->Add(tempsql);
            adoquery->Open();
    }//删除adoquery记录的代码
    void __fastcall TMainForm::ButtonDeleteClick(TObject *Sender)
    {
            if(adoquery->RecordCount == 0){
                    ShowMessage("不存在相关记录!");
            }
            else{
                    if(MessageBox(Handle,"确定删除该客户记录?","警告",MB_ICONINFORMATION+MB_OKCANCEL)==IDOK){
                            adoquery->Delete();
                    }
            }
    }
      

  2.   

    是主从表,但是我从表不是用adotable来显示,而是用adoquery写代码捞出来,可是删除捞出来的资料却会把主表对应的记录删除了,请问这是什么原因,该怎么做??
      

  3.   

    我只想删除从表的某一条记录,请问该怎么写代码?我写adoquery.Delete();不行啊,这样写就把主表的记录也删除了~
    请教辣椒
      

  4.   

    var
      tempid,tempsql:string;
    ......
       tempid:=tbl_department.FieldByName('department_id').Asstring;
       tempsql:='delete department where department_id='+tempid;
        //以部门ID号作为删除的(条件)参数
       ......
       adoquery.close;
       adoquery.sql.clear;
       adoquery.sql.add(tempsql);
       adoquery.prepared;
       try
          
          adoquery.execsql;//---删除从表中的对应数据
       except
        
       end; //当然删除中可以加入事务处理等操作功能,你自己试试吧。
      

  5.   

    呵~~,不知你表结构是怎样的。如果有一个FID(自增字段)的话,
    你可以用这个FID来删除数据记录;
    可以利用时间作为条件来删除数据,当然,第条记录的时间必与其他记录不同;
    如果没有唯一的值来标志一行记录时,你想想是否可以利用某几个字段的值组合
    来形成一条记录的唯一标志,这样可以删除该记录。
      

  6.   

    你的主表要有唯一的ID號作為標式符
    而你的從表也要有唯一的ID號為作為標式符,
    這樣在修改和刪除用ID號作為條件進行操作
    這樣才不會誤操作
      

  7.   

    有的,我的从表也有唯一的字段(从表有主键)
    主表:deparment_id(主键),deparment_name
    从表:member_id(主键),deparment_id,member_name
    我是用adoquery做为从表的数据集,在主表grid的oncellclick动态捞出从表中deparment_id和主表一样的所有资料
    但是删除或修改从表时就会出错
    代码有贴在上面,请帮忙看一下,谢谢了``~
      

  8.   

    你要獲取从表:member_id(主键)值才行呀。
       member:= DBGrid1.DataSource.DataSet.Fields[0].value;  //雙擊member_id(主键)獲值;
       tempid:=tbl_department.FieldByName('department_id').Asstring;
       tempsql:='delete department where department_id='+tempid and member_id='member;