首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

,计算有关问题,大侠们请进

2012-04-03 
求救,计算问题,大侠们请进rocedure TForm31.Button1Click(Sender: TObject)vara,b,c:realbeginwith qy d

求救,计算问题,大侠们请进
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的值

[解决办法]
晕倒,你的代码也忒乱了吧,类型乱,代码顺序乱。
你那个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;
[解决办法]
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;

热点排行