ado+access加速(50分)(50分)

  • 主题发起人 主题发起人 hkunfcn
  • 开始时间 开始时间
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;
 
我不知道你这句语句是不是返回表的全部数据,
tab_yssf.Open;如果是,应该比较费时间。
还有,是否可以考虑使用sql 命令,insert 来保存数据,速度应该会有改善。
 
1, 采用直连式连接方式。
2,采用sql语句的插入、删除、修改。
 
1.禁用Select *,改为Select FldName
2.改为SQL语句直接操作,效率可以提高12.5-20%.
 
用insert语句子不就可以吗
不要使用open这样的方法,这样做就是很慢的
 
1500 个数据也不应该是50s 这样慢呀
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
934
DelphiTeacher的专栏
D
D
回复
0
查看
728
DelphiTeacher的专栏
D
D
回复
0
查看
688
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部