表A字段:id(主键),Aname,Bname,C;
表B字段:id(主键),Aname,Bname,D,F;我现在用俩个TADOQuery1,TADOQuery2 和显示到DBgrid1,DBgrid2现在想实现这样功能:
表A一条数据移动到表B 表A中id与表B中的id相同则在表B中的最后一条记录的id号加一,表B其他如有相同字段则直接从表A拷贝到表B,没有的字段表(如表B中的D,F)则显示为空,移动完成之后把表A中的这条数据删除掉请问该怎么做 ?新人刚接触数据库,理解不到位请大家多指教,谢谢!

解决方案 »

  1.   

    declare @ID integer
    declare @MaxID integer
    select @MaxID = max(ID) + 1 from B
    select @ID = ID from B where ID = A.ID(查询表A中ID的条件语句)
    if ( @ID is null)
    begin
     set @ID = @MaxID
    end
    insert into B (ID, Aname,Bname) select @ID, Aname,Bname from B where B.ID = A.ID(查询表A中ID的条件语句)将以上语句组成字符串,供一个ADO执行即可。建议:
    一、如果不确定字段列表,可以使用查询字段列表的方式,先获取B表中的字段列表,再依次循环比对A中的字段列表,然后组成SQL语句进行执行。
    二、强烈建议,插入数据时,不要再使用原来的主键ID,如果万一不小心,造成主键数据混乱,将是很麻烦的一件事情,可以使用自动编号类型,让数据库自动创建。
     
      

  2.   

    你好 首先谢谢你的帮助  问下是在TADOQuery2把你的代码add上去吗?
    另: id类型我是用的int 你的建议我有点看不懂(对我来说深奥了)呵呵 
      

  3.   

      ADOdoing.Close;
      ADOdoing.SQL.Clear;
      ADOdoing.SQL.Add('declare @ID integer');
      ADOdoing.SQL.Add('declare @MAXID integer');
      ADOdoing.SQL.Add('select @MAXID=max(ID)+1 From T_doingrd');
      ADOdoing.SQL.Add('select @ID=ID From T_doingrd Where ID=T_Waitrd.id '); //这里不对,出现‘无法绑定由多个部分组成的标示符‘T_Waitrd.id ’’ 请问这个是什么原因啊  ADOdoing查询的是T_doingrd 表,而T_Waitrd表是关联ADOwait 请问是这个原因引起的吗?
      ADOdoing.SQL.Add('If (@ID is null) begin Set @ID=@MAXID end ');
      ADOdoing.SQL.Add('Insert Into T_doingrd (ID,P_name,st_time) select @ID,P_name,st_time From T_doingrd Where T_doingrd.ID=T_Waitrd.ID ');
      

  4.   

    前台操作数据库
    表A   id(主键 int)  Aname(char)  Bname(char)  C(datetime)
          1              硬件                张某        2012-7-8
    表B   id (主键int) Aname(char)  Bname(char)  E(char)  F(char)
           1             软件                李四      资料已提交     高
    我现在用了俩个ado来连接 显示在俩个DBGrid 要实现的功能:现选中DBGrid1(表A)中的一条记录,然后要把它移到DBGrid2(表B)中,然后把DBGrid1中的要移动的记录删掉 
    也相当于需要把表A中的记录移到表B ,如果表B中ID与表A中相同,则在表B的最后一条记录的ID加一(现在表B中有一条数据且id为1(冲突),则需要插入表A的数据时在表B中的id为id+1,也就是id为2 现把表A数据插入到表B数据为 2 硬件 张某  )
    麻烦大侠们帮帮忙 多谢了
      

  5.   


    一个表A的记录插入到另一个表B中(通过 DBgrid-》ado来实现),关键点:俩个表的id(主键,自动编号类型)一个表A插入到另一个表B通过比较有冲突的id(俩表存在相同的id),则被插入的这条记录在表A的id为表A的最后一条记录的id加一