求救,计算问题,大侠们请进

he59195 2011-11-01 12:03:17
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的值
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaikai_kk 2011-11-01
  • 打赏
  • 举报
回复
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;
bdmh 2011-11-01
  • 打赏
  • 举报
回复
调试吧,先看看edit1和edit3中都是什么内容
某某某 2011-11-01
  • 打赏
  • 举报
回复
晕倒,你的代码也忒乱了吧,类型乱,代码顺序乱。
你那个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;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧