procedure TzjyzzzForm.button3Click(Sender: TObject);
var
  Faccount, Faccounts: double;
  Ftext: String;
  k: integer;
begin
  if (zjyz1=true) and (zjyz2=true)
    then begin
      DMBacu.zjyz.Insert;
      DMBacu.zjyz.FieldByName('enterpriseID').Asinteger :=DMBacu.SelectUID;
      DMBacu.zjyz.FieldByName('evaluate_personne').AsString :=trim(ComboBox2.Text);
      DMBacu.zjyz.FieldByName('retained_profits').AsFloat :=StrToFloat(trim(edit1.Text));
      DMBacu.zjyz.FieldByName('profits_amount').AsFloat :=StrToFloat(trim(edit2.Text));
      DMBacu.zjyz.FieldByName('operation_profits').AsFloat :=StrToFloat(trim(edit3.Text));
      DMBacu.zjyz.FieldByName('merchandise').AsFloat :=StrToFloat(trim(edit39.Text));
      //数据保存进数据库
      DMBacu.zjyz.Post;
      showmessage('数据保存成功!');
      addata;
           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 := 2;
         Ftext := ' UPDATE account_expressions16 '
                + ' SET ';         DMBacu.expressions_result.SQL.Clear;
         DMBacu.expressions_result.SQL.Add('SELECT * FROM account_coefficient');
         DMBacu.expressions_result.Open;
         DMBacu.expressions_result.First;
         while (not DMBacu.expressions_result.Eof) and (k <= DMBacu.zjyz.Fields.Count -1) do
         begin
           Ftext := Ftext + DMBacu.zjyz.Fields[k].FullName + ' = ';
           Faccount := DMBacu.zjyz.Fields[k].AsFloat;
           Faccounts := Faccount;
           Faccount := Faccount * 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('allright').AsFloat) then
               Faccount := Faccounts;
           end
           else
             if (Faccount < DMBacu.expressions_result.FieldByName('inferior').AsFloat) then
               Faccount := Faccounts * 0.2 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat
               else
                 Faccount := Faccounts * 0.4 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat;
           if (k <> DMBacu.zjyz.Fields.Count -1) then
             Ftext := Ftext + FloatToStr(Faccount) + ', '
           else
             Ftext := Ftext + FloatToStr(Faccount);
           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;
 
我在保存数据的时候,当程序执行下边这段代码时候:
      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 := 2;
         Ftext := ' UPDATE account_expressions16 '
                + ' SET ';         DMBacu.expressions_result.SQL.Clear;
         DMBacu.expressions_result.SQL.Add('SELECT * FROM account_coefficient');
         DMBacu.expressions_result.Open;
         DMBacu.expressions_result.First;
         while (not DMBacu.expressions_result.Eof) and (k <= DMBacu.zjyz.Fields.Count -1) do
         begin
           Ftext := Ftext + DMBacu.zjyz.Fields[k].FullName + ' = ';
           Faccount := DMBacu.zjyz.Fields[k].AsFloat;
           Faccounts := Faccount;
           Faccount := Faccount * 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('allright').AsFloat) then
               Faccount := Faccounts;
           end
           else
             if (Faccount < DMBacu.expressions_result.FieldByName('inferior').AsFloat) then
               Faccount := Faccounts * 0.2 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat
               else
                 Faccount := Faccounts * 0.4 * DMBacu.expressions_result.FieldByName('quanzhong').AsFloat;
           if (k <> DMBacu.zjyz.Fields.Count -1) then
             Ftext := Ftext + FloatToStr(Faccount) + ', '
           else
             Ftext := Ftext + FloatToStr(Faccount);
           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;
执行到: while (not DMBacu.expressions_result.Eof) and (k <= DMBacu.zjyz.Fields.Count -1) do
就直接跳到END;
请问你们能不能帮我看看这是哪里出的问题啊,小弟在线等,急!!!!!!

解决方案 »

  1.   

    最近正在写一个企业综合能力评价系统。可是刚学的DELPHI,所以有很多问题都不能解决,小弟不才还请高手们指教
      

  2.   

    你的写法太复杂,且没有注释,好难懂。看了一点SELECT * FROM account_expressions16 where uid=(select max(id) from account_expressions16)这样简便点,下面的我没有看了。太多内容、没有注释