H
hkunfcn
Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是用ado+access编写的,在达到1500(大约)条记录时,增加一条记录后执行tab_yssf.post语句时,速度很慢,大约需50秒以上,将该条语句删除后速度很快,我的表中有17个字段,请问是何原因?原程序附后,tab_yssf为adotable控件。
procedure Tfrm_yssf.btn_saveClick(Sender: TObject);
var
s:string;
id:integer;
begin
btntag:=0;
tab_yssf.Open;
tab_yssf.Edit;
tab_yssf.FieldByName ('所属年度').asstring:=inttostr(spe_year.value);
tab_yssf.FieldByName ('所属月份').asstring:=inttostr(spe_month.value);
with tab_yssf do
begin
tab_yssf.FieldByName('实缴水费').asfloat:=fieldbyname('水费').asfloat;
tab_yssf.FieldByName('实缴水费附加').asfloat:=fieldbyname('水费附加费').asfloat;
tab_yssf.FieldByName('实缴污水处理费').asfloat:=fieldbyname('污水处理费').asfloat;
tab_yssf.FieldByName('实缴金额').asfloat:=fieldbyname('应收金额').asfloat;
end;
tab_yssf.Post ;
tab_yssf.edit;
if messagedlg('是否打印?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
with rpt_fpdy.qry_yssf do
begin
sql.Clear ;
s :='select * from yssf '+'where 用户水表编号="'+dbe_sbbh.Text +'"and 所属年度="'+spe_year.text+'"and 所属月份="'+spe_month.Text+'"';
sql.text:=s;
open;
end;
s:='select * from yhxx '+ 'where 用户水表编号="'+ dbe_sbbh.text +'" ';
rpt_fpdy.qry_yhxx.sql.clear;
rpt_fpdy.qry_yhxx.sql.add(s);
rpt_fpdy.qry_yhxx.open;
rpt_fpdy.addr .dataset:= rpt_fpdy.qry_yhxx;
rpt_fpdy.sfr.dataset:=rpt_fpdy.qry_yhxx;
rpt_fpdy.addr .datafield:= '用户地址';
rpt_fpdy.sfr.datafield:='收费人';
with rpt_fpdy do
begin
tab_fpno.Last ;
id:=tab_fpno.fieldbyname('fno').asinteger;
tab_fpno.Append ;
tab_fpno.Edit;
tab_fpno.FieldByName ('fno').asinteger:=id+1;
tab_fpno.FieldByName ('用户水表编号').asstring:= dbe_sbbh.text;
tab_fpno.FieldByName ('用户姓名').asstring:=dbe_yhxm.text;
tab_fpno.FieldByName ('所属年度').asstring:=spe_year.text;
tab_fpno.FieldByName ('所属月份').asstring:=spe_month.text;
tab_fpno.Post ;
tab_fpno. last;
end;
rpt_fpdy.preview;
end;
end;
procedure Tfrm_yssf.btn_saveClick(Sender: TObject);
var
s:string;
id:integer;
begin
btntag:=0;
tab_yssf.Open;
tab_yssf.Edit;
tab_yssf.FieldByName ('所属年度').asstring:=inttostr(spe_year.value);
tab_yssf.FieldByName ('所属月份').asstring:=inttostr(spe_month.value);
with tab_yssf do
begin
tab_yssf.FieldByName('实缴水费').asfloat:=fieldbyname('水费').asfloat;
tab_yssf.FieldByName('实缴水费附加').asfloat:=fieldbyname('水费附加费').asfloat;
tab_yssf.FieldByName('实缴污水处理费').asfloat:=fieldbyname('污水处理费').asfloat;
tab_yssf.FieldByName('实缴金额').asfloat:=fieldbyname('应收金额').asfloat;
end;
tab_yssf.Post ;
tab_yssf.edit;
if messagedlg('是否打印?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
with rpt_fpdy.qry_yssf do
begin
sql.Clear ;
s :='select * from yssf '+'where 用户水表编号="'+dbe_sbbh.Text +'"and 所属年度="'+spe_year.text+'"and 所属月份="'+spe_month.Text+'"';
sql.text:=s;
open;
end;
s:='select * from yhxx '+ 'where 用户水表编号="'+ dbe_sbbh.text +'" ';
rpt_fpdy.qry_yhxx.sql.clear;
rpt_fpdy.qry_yhxx.sql.add(s);
rpt_fpdy.qry_yhxx.open;
rpt_fpdy.addr .dataset:= rpt_fpdy.qry_yhxx;
rpt_fpdy.sfr.dataset:=rpt_fpdy.qry_yhxx;
rpt_fpdy.addr .datafield:= '用户地址';
rpt_fpdy.sfr.datafield:='收费人';
with rpt_fpdy do
begin
tab_fpno.Last ;
id:=tab_fpno.fieldbyname('fno').asinteger;
tab_fpno.Append ;
tab_fpno.Edit;
tab_fpno.FieldByName ('fno').asinteger:=id+1;
tab_fpno.FieldByName ('用户水表编号').asstring:= dbe_sbbh.text;
tab_fpno.FieldByName ('用户姓名').asstring:=dbe_yhxm.text;
tab_fpno.FieldByName ('所属年度').asstring:=spe_year.text;
tab_fpno.FieldByName ('所属月份').asstring:=spe_month.text;
tab_fpno.Post ;
tab_fpno. last;
end;
rpt_fpdy.preview;
end;
end;