高手请帮忙,我有一个dbgrid,是由两个表连接起来显示的(一对多的关系),我的两个表如下:
member表
id   dept      name    native
1    人事部    张三    湖南
2    财务部    李四    贵州
3    客服部    王五    广西
4    人事部    李二    广东     dept表
id   dept     header
1    人事部   冯某某
2    财务部   李某某
3    客服部   王某某
我把两个表进行了连接,dbgrid的表格的显示如下:(我把dept里面的项给屏蔽了,因为不需要)
部门:       主管:
-----------------------------
id   dept      name    native 
1    人事部    张三    湖南
2    财务部    李四    贵州
3    客服部    王五    广西
4    人事部    李二    广东 
-----------------------------
现在的情况是:
1、我想在点击dbgrid表格的每行时显示部门是什么?主管是什么?这个通过两个表连接就可以达到了。2、我已经做好了记录的多条选择,当我选择多条记录时,如何删除呢?我只想删除member表这些选择的记录?  当我用dbgrid1.selectedrows.delete进行删除,会把dept表里面相关的记录也删除掉。请高手们帮忙啊?兄弟在此谢谢了! 

解决方案 »

  1.   

    是主键,那具体怎么做呢?我用的代码如下:(可是不行)procedure TForm1.N9Click(Sender: TObject);
    var
      i:Integer;
      s: string;
    begin
      if DBGrid1.SelectedRows.Count>0 then
        with DBGrid1.DataSource.DataSet do
          for i:=0 to DBGrid1.SelectedRows.Count-1 do
          begin
            GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
            s:=dbgrid1.DataSource.DataSet.Fields.Fields[0].AsString;
            Listbox1.Items.Add(s);
            adoquery2.Close;
            adoquery2.SQL.Clear;
            adoquery2.SQL.Add('delete * from member where id in(s)');
            adoquery2.ExecSQL;
          end;
    end;
    注:
       1、我的fields[0]就是各行的id号,是主键,我先得到了多条记录的id号,然后根据id号去member表里面删除,但是不行。
       2、Listbox1.Items.Add(s),这一句我用来显示一下看id号是不是对的。
      

  2.   

    不行啊。兄弟们,我不理解这什么说要把id设为主键,因为表里面的id是唯一的,就是ID不是主键,但是它是唯一的也可以啊。
      

  3.   

    看你的需求,应该是要显示member的数据,并对member进行增删改操作,而dept作为附加信息添加上去,主要是作为提示用的,只看不删。
    感觉楼主的实现把问题复杂化了。
    我一般的实现方式是,定义一个TSimpleDataSet,用来将member的数据全部读过来(不要用表连接,直接select * from member),然后,dept中的主管以lookup字段的形式添加到刚才的TSimpleDataSet控件中,这样,就可以按正常的方式对member表进行增删改操作了
      

  4.   

    我觉得xinghun61的方法倒是可以一试,至少提供了一种解决的方法,看楼上的回答感觉是完全没有经过大脑。谢谢了xinghun61,我一会儿去试一下。但是有一种疑惑,就是我这种实现方式理论是行得通吗?我试过单独一行删除是没有问题的。可是在多选的时候却不行。不知道哪里需要改进?
      

  5.   

    你这直接用SQL语句删除会容易点
      

  6.   

    ADOQuery2.SQL.Add('delete from member where id ='+s);