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的值
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;
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;