我有dbgrid1,dbgrid2,分别对应是adoquery1,adoquery2,及表table1,table2,(dbgrid1中的数据并不一定是table1中的全部数据),我点击一个按钮,dbgrid1中的数据就全部转移到了dbgrid2,我该如保操作?
我用的是adoquery2.Recordset:=adoquery1.Recordset,但是数据并没有保存到table2中去,加了dbgrid2.datasource.dataset.post也不行;
我的dbgrid1中的数据如何删除?

解决方案 »

  1.   

    function Tfrm_ZCDW_Initiate.Copy_Tables(tbName: String): Boolean;  // 拷贝系统表上年度的记录
    var
      Field_Name: String;  // 表字段名称
      i: Integer;
      Field_Name_List: TStringList;
    begin
      Result := True;  if DM.TmpTable.Active then DM.TmpTable.Close;
      DM.TmpTable.Connection := DM.Conn1;   // 当前的注册单位
      DM.TmpTable.TableName  := tbName;  if DM.TmpTable2.Active then DM.TmpTable2.Close;
      DM.TmpTable2.Connection := DM.Conn2;       // 新建数据库的连接
      DM.TmpTable2.LockType   := ltBatchOptimistic;  // 使用批方式更新
      DM.TmpTable2.TableName  := tbName;  Field_Name_List := TStringList.Create;
      try
        try
          DM.TmpTable.Open;
          DM.TmpTable2.Open;
          DM.TmpTable2.GetFieldNames(Field_Name_List);  //取新表的字段列表
          while not DM.TmpTable.Eof do begin  // 遍历上年度的系统表记录
            DM.TmpTable2.Append;
            for i := 0 to Field_Name_List.Count - 1 do begin
              Field_Name := Field_Name_List[i];
              if DM.TmpTable.FindField(Field_Name) <> nil then  // 在上年度表中找到该字段
                DM.TmpTable2.FieldByName(Field_Name).Value := DM.TmpTable.FieldByName(Field_Name).Value;
            end;
            DM.TmpTable2.Post;
            DM.TmpTable.Next;
          end;
          DM.TmpTable2.UpdateBatch();
        except;
          DM.TmpTable2.CancelBatch();
          Result := False;
        end;
      finally
        Field_Name_List.Free;
      end;  if DM.TmpTable.Active  then DM.TmpTable.Close;
      if DM.TmpTable2.Active then DM.TmpTable2.Close;
      DM.TmpTable2.LockType := ltOptimistic;  // 使用默认方式
    end;
      

  2.   


    procedure From_QuerySource_To_QueryDest(QuerySource:TADOTable; QueryDest: TADOTable);overload;
    var
      i: integer;
    begin
      QueryDest.Append;
      if not QuerySource.IsEmpty then
        for i:=0 to QuerySource.FieldCount-1 do
          QueryDest.Fields[i].AsString:= QuerySource.Fields[i].AsString;
    end;