uid
evaluate_personne
enterpriseID
asset_yield
asset_guerdon
capital_increment
operation_gain
cash_ensure
cost_charge
asset_velocity
currentassets_velocity
merchandise_velocity
meritfund_velocity
badasset_ascale
balancesheet
accrual_multiple
owes_ascale
career_ascale
sell_mount
capital_pile
years_capitalmount
years_sellcapital
art_ascale
我在程序中要对account_expressions16表中的一条记录进行更新,我的程序在下边,哪个能帮我改一下谢谢急: DMBacu.zjyz.SQL.Clear;
      DMBacu.zjyz.SQL.Add(' SELECT MAX(uid) AS id FROM account_expressions16');
      try
        DMBacu.zjyz.Open;
        if (DMBacu.zjyz.RecordCount > 0) then
         uid := DMBacu.zjyz.FieldByName('id').AsInteger;
      except
      end;
      DMBacu.zjyz.SQL.Clear;
      DMBacu.zjyz.SQL.Add(' SELECT * FROM account_expressions16 where uid = '+ IntToStr(uid));
     try
        DMBacu.zjyz.Open;
        if (DMBacu.zjyz.RecordCount > 0) then
         uid := DMBacu.zjyz.FieldByName('uid').AsInteger;
         k := 3;\\从asset_yield记录开始更新
Ftext := ' UPDATE  FROM account_expressions16 '
               + ' SET ';
         DMBacu.expressions_result.SQL.Clear;
         DMBacu.expressions_result.SQL.Add('SELECT * FROM account_expressionsresult');
         DMBacu.expressions_result.Open;
         DMBacu.expressions_result.First;
         while (not DMBacu.expressions_result.Eof) and (k <= DMBacu.zjyz.Fields.Count -1) do
         begin
           //实际值
           Faccount := DMBacu.zjyz.Fields[k].AsFloat;
           //写入数据库值
           Faccounts:= 0.6 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat;
           if (Faccount >= DMBacu.expressions_result.FieldByName('average').AsFloat) then
           begin
             //Faccount := Faccounts * 0.8 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat;
             if (Faccount > DMBacu.expressions_result.FieldByName('excellence').AsFloat) then
               //优秀值
               Faccounts := DMBacu.expressions_result.FieldByName('quanzhong').AsFloat
             else
               Faccounts := DMBacu.expressions_result.FieldByName('quanzhong').AsFloat * 0.8;
           end
           else
             if (Faccount <= DMBacu.expressions_result.FieldByName('inferior').AsFloat) then
               Faccounts := 0.2 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat
             else
               Faccounts := 0.4 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat;
           if (k <> DMBacu.zjyz.Fields.Count -1) then
             Ftext := Ftext + FloatToStr(Faccounts) + ', '
           else
             Ftext := Ftext + FloatToStr(Faccounts);
           DMBacu.expressions_result.Next;
           k:= k+1;
         end;
         Ftext := Ftext + ' Where uid = ' + IntToStr(uid);
         DMBacu.zjyz.SQL.Clear;
         DMBacu.zjyz.SQL.Add(Ftext);
         showmessage(Ftext);
         DMBacu.zjyz.ExecSQL;
      except
       end;
   end
   else
     showmessage('指标没有填写完整,请仔细检查!')
     end;

解决方案 »

  1.   

    你把Ftext给showmessage出来,看看是否出什么问题了
      

  2.   

    写得太乱了,看得人晕。随便看了一下:
         Ftext := ' UPDATE  FROM account_expressions16 '
                + ' SET ';
    那有这种写法。(from 去掉)
      

  3.   

    DMBacu.zjyz.SQL.Clear;
          DMBacu.zjyz.SQL.Add(' SELECT * FROM account_expressions16 where uid = '+ IntToStr(uid));
          try
            DMBacu.zjyz.Open;
            if (DMBacu.zjyz.RecordCount > 0) then
             uid := DMBacu.zjyz.FieldByName('uid').AsInteger;
             k := 3;
             Ftext := ' UPDATE account_expressions16 '
                    +' SET asset_yield,asset_guerdon,capital_increment,operation_gain,'
                    +' cash_ensure,cost_charge,asset_velocity,currentassets_velocity,'
                    +' merchandise_velocity,meritfund_velocity,badasset_ascale,balancesheet,'
                    +' accrual_multiple,owes_ascale,career_ascale,sell_mount,capital_pile,'
                    +' years_capitalmount,years_sellcapital,art_ascale,';
    你看看这个更新程序怎么不对阿,急