rocedure TForm31.Button1Click(Sender: TObject);
  var
  a,b,c:real;
begin  with qy do begin
  qy.Close;
  qy.SQL.Clear;
  qy.sql.Add('select * from jl where 笔数时间 = #'+DateToStr(d1.date)+'# ');  try
  qy.Open;
  except
  showmessage('操作错误');
  exit;
  end;
  edit3.Text :=(' '+inttostr(recordcount)+'');
  if qy.RecordCount<>0 then
  begin
qy.SQL.Clear;
qy.SQL.Add( ' SELECT SUM(合计)');
qy.SQL.Add( 'FROM jl ');
qy.SQL.Add( 'where 笔数时间 = #'+DateToStr(d1.date)+'# ');
qy.Open;
  a := strtoint(edit1.Text);
 b := strtoint(edit3.Text); c :=a/b;
 edit2.text:=floattostr(c);
  EDIT1.TEXT:=qy.Fields[0].Asstring;
 showmessage('计算完成');
  end
  else
  showmessage('对不起,当天的记录还没添加呢');
 end;
end;
运行程序后,说字符类型不正确,要如何改上面的代码呢?edit1输入框是SUM求出来的合计数,EDIT3是查询了来的行数,我想把合计数除以行数,也就是A/B,再把数据写到C,也就是EDIT2输入框,上面的程序能运行,但点按钮后就是不能正确计算出C的值

解决方案 »

  1.   

    晕倒,你的代码也忒乱了吧,类型乱,代码顺序乱。
    你那个edit1没有赋值就直接用了,要是对才怪呢,
     qy.Open;
     a := strtoint(edit1.Text);//open之后就直接把edit1的值给a了,还没有给edit1赋值啊,
     b := strtoint(edit3.Text);
    改一下,把后面的EDIT1.TEXT:=qy.Fields[0].Asstring;
    提到a := strtoint(edit1.Text);之前应该就可以了。
    或者按照下面的修改一下你的程序,这个效率最高:
    rocedure TForm31.Button1Click(Sender: TObject);
    begin
      with qy do
      begin
        Close;
        SQL.Clear;
        sql.Add('select case when cnt > 0 then hj/cnt else 0 end as ret from '
              + '(select sum(合计) as hj, count(0) as cnt from jl '
              + 'where 笔数时间 = '''+DateToStr(d1.date)+''')temp');    try
        Open;
        except
        showmessage('操作错误');
        exit;
        end;
        if recordCount >0 then
        begin
          edit2.text:=FieldByName('ret').AsString;
         showmessage('计算完成');
        end
        else
          showmessage('对不起,当天的记录还没添加呢');
      end;
    end;
      

  2.   

    调试吧,先看看edit1和edit3中都是什么内容
      

  3.   

    Procedure TForm31.Button1Click(Sender: TObject);
    begin
      with qy do
      begin
       close;
       sql.clear;
       sql.add('select sum(合计) as A,Count(*) as B, sum(合计)/Count(*) as C from jl');
       sql.add('where 笔数时间 = #'+DateToStr(d1.date)+'# ');
       sql.add('and Count(*)<>0');
       try
       open;
       except
         showmessage('操作错误');
         exit;
       end;
      
       if not IsEmpty Then
       begin
         edit3.text:=fieldbyname('A').asfloat;
         edit1.text:=fieldbyname('B').asfloat;
         edit2.text:=fieldbyname('C').asfloat;
         showmessage('计算完成');
       end else
          showmessage('对不起,当天的记录还没添加呢'');
      end;
    end;