现有两个表A和B,结构相同,可以称为子表A和总表B。我现在需要将子表A中的所有数据按照编号(关键字段)从总表B中取得相应数据对子表A进行更新。我的想法是:
  遍历子表A开始
       按编号从总表B中取相应数据
       UPDATE 子表A
  子表A指针移动
  遍历子表A结束
但是实际上这段代码有问题,因为在UPDATE 子表A的时候,子表A的记录指针就变化了,所以遍历顺序也就错了。
请问各位有什么高招吗?
注意:
1、只能对照子表A按编号去总表B中查找数据,而且子表A的记录数远远少于总表B的记录数。
2、有朋友曾建议用book来标记每次UPDATE前的记录指针位置,我觉得那样不太方便。

解决方案 »

  1.   

    update A set A.要更新的字段=B.对应的字段 where A.id=B.id
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这样不行吗....
      

  2.   

    可以用三个数据控件dsA,dsB,updateA
    dsA用于遍历A表,
    dsB用于动态获取B表符合条件的记录,
    updateA用于更新A表,可以用动态生成SQL语句的方法来更新
      

  3.   

    to gxgyj(杰克.逊) :我试过了,where条件无论是A.ID=B.ID还是B.ID=A.ID,A总是只有第一条记录被更新了。问题出在什么地方呢
      

  4.   

    把你用
    update A set A.要更新的字段=B.对应的字段 where A.id=B.id
    来更新的代码贴出来看看.....
      

  5.   

    再to gxgyj(杰克.逊) :从你给的sql语句表面来看,好像是可以达到的。上面说的是在VFP中试验的结果,只更新第一条记录。如果在ACCESS中,还会提示输入B.字段的具体值,感觉是它并没有按照我们设想的从B中取字段值,而是要求用户输入用于更新的值。 你看看,还有别的办法吗?或者是这个sql语句还应该做别的修改啊?谢谢!
      

  6.   

    表结构很简单, id:整型,score:整型。按id去查分数。 update a set a.score=b.score where a.id=b.id 。感觉问题的关键在于在进行update的时候,语句本身不知道如何获得要更新的值。
      

  7.   

    update a set a.score=b.score where a.id=b.id改为:update a,b set a.score=b.score where a.id=b.id
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      

  8.   

    togxgyj(杰克.逊) ,update后只能跟一个表,update a,b这样的语法就通不过。
      

  9.   

    update a,b set a.score=b.score where a.id=b.id
    我试过了D6+Access通过了....
      

  10.   

    update a
     set score=b.score
     From a a ,b b
     where a.id=b.id
      

  11.   

    to gxgyj(杰克.逊) ,我刚才是在vfp中试的,语法错误。按你说的,在access中试验,通过了。不知道oracle是否也支持这样的扩展语法啊。等我试过了再说。先谢谢了!
      

  12.   

    to wozhuchuanwei(一个组件编写者,就一定是一个更优秀的Delphi开发者),你的语句象gxgyj(杰克.逊) 那样试过了吗?你的语句在vfp和access中都不行啊。不过还是也要谢谢你。