有一个表TABLE1字段有ID  MC
还有一表TABLE2 字段有ID MC,这两表结构相同,
DBGRID1连着TABLE1,DBGRID2连着TABLE2,现在窗体上是这样的DBGRID1    添加BUTTON        DBGRID2
           删除BUTTON                 
我想点“添加BUTTON  ”就把   DBGRID1 中选中的一行或多行添加到DBGRID2中也就是从TABLE1添加到TABLE2
点“删除BUTTON  ”就把   DBGRID2中选中的一行或多行删掉,也是从TABLE2中删掉
请问以上怎实现啊

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;type
      TForm1 = class(TForm)
        Button1: TButton;
        DBGrid1: TDBGrid;
        DBGrid2: TDBGrid;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DataSource1: TDataSource;
        ADOQuery2: TADOQuery;
        DataSource2: TDataSource;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      insert : TADOQuery;
    begin
      ADOQuery1.First;
      insert:=TADOQuery.Create(self);
      insert.Connection:=ADOConnection1;
      while not ADOQuery1.Eof do
      begin
        if DBGrid1.SelectedRows.CurrentRowSelected then
        begin
          insert.Close;
          insert.SQL.Clear;
          insert.SQL.Add('INSERT INTO TABLE2 (id,mc)VALUES (:id,:mc)');
          insert.Parameters.ParamByName('id').Value:=DBGrid1.DataSource.DataSet.fieldbyname('id').AsString;
          insert.Parameters.ParamByName('mc').Value:=DBGrid1.DataSource.DataSet.fieldbyname('mc').AsString;
          insert.ExecSQL;
        end;
        ADOQuery1.Next;
      end;
      ADOQuery2.Close;
      ADOQuery2.Open;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      insert : TADOQuery;
      Listid : TStringList;
      i : integer;
    begin
      ADOQuery1.First;
      insert:=TADOQuery.Create(self);
      insert.Connection:=ADOConnection1;
      Listid:=TStringList.Create;
      Listid.Clear;
      while not ADOQuery2.Eof do
      begin
        if DBGrid2.SelectedRows.CurrentRowSelected then
        begin
          Listid.Add(DBGrid1.DataSource.DataSet.fieldbyname('id').AsString);
        end;
        ADOQuery2.Next;
      end;  for i:=0 to Listid.Count-1 do
      begin
        insert.Close;
        insert.SQL.Clear;
        insert.SQL.Add('DELETE FROM TABLE1 where id=:id');
        insert.Parameters.ParamByName('id').Value:=Listid[i];
        insert.ExecSQL;    insert.Close;
        insert.SQL.Clear;
        insert.SQL.Add('DELETE FROM TABLE2 where id=:id');
        insert.Parameters.ParamByName('id').Value:=Listid[i];
        insert.ExecSQL;  end;  ADOQuery1.Close;
      ADOQuery1.Open;
      ADOQuery2.Close;
      ADOQuery2.Open;
    end;end.
      

  2.   

    Button1Click 添加
    Button2  删除
    DBGrid1->DataSource1->ADOQuery1
    DBGrid2->DataSource2->ADOQuery2
      

  3.   

    思路:
    先把原GRID对应的RECORDSET进行FILTER,过滤出选种的
    然后通过RECORDSET的CLONE来实现