把一个计算字段的值赋给此表的实际字段
我不想用循环,请问可不可以用sql就能实际。
我单一的写了
SSDM.qryUpdateZZ.SQL.Add('update table_zz set sf=:zsf');
  SSDM.qryUpdateZZ.ParamByName('zsf').AsFloat :=SSDM.qryZZSFJE.Value ;
  SSDM.qryUpdateZZ.ExecSQL ;
这样的结果是所有的实际字段的值都为计算字段的第一个值。
不知道sql语句中的自连接可不可以实现?或者是加上where条件?

解决方案 »

  1.   

    你自己不用循环?
    那就只有让DELPHI帮你循环保存了!用TUpdateSQL控件解决吧.设置一下ModifySQL的SQL如下形式:update 物理表名
      set 物理字段名=:计算字段名称
    where 主键=:主键
      

  2.   

    update table_zz a set a.sf=b.计算字段
    from table_zz b
    where a.主键=b.主键
      

  3.   

    update table set table.a = (select b*c from table where ...) ;
      

  4.   

    只用上两位的sql还是不能实现,最后用了zhoutian618的循环可以了。
    但我还是想不用循环,这样效率能高一些,还有其他方法吗
      

  5.   

    UPDATE table, (SELECT id,aa*bb as cc
    FROM table) AS ta1 SET table.cc = ta1.cc
    WHERE table.id=ta1.id;
      

  6.   

    zhoutian618的办法很好用,而且速度快,没有用的Delphi循环语句,update 是SQL命令,用这个命令你是感觉不到循环存在的。
      

  7.   

    UPDATE 表 SET 字段1 = 字段2*字段3 WHERE 条件
      

  8.   

    我的程序都是这样做的,能满足要求;
    query.sql.clear;
    query.sql.add('update 表名 set 要计算的字段=A+B-C(表示计算项名项)');
    query.execsql();
    肯定没问题。