我现在在开发一套系统,我用的是delphi6.0+SQLServer2000。我现在是用Ttable + tdatasource连接数据库,然后我是一条一条新增记录到库里面,程序如下:
table_platepo.Active:=true;
with table_platepo do
begin
append;
fieldbyname('po').AsString:=edit3.Text;
post;
end;
table_platepo.Active:=true;
with table_platepo do
begin
append;
fieldbyname('po').AsString:=edit3.Text;
post;
end;
但我那样写,我老板老是说程序运行慢,启动慢,总之就是慢.
我想,我能不能不这样一条一条提交,改成一批一批提交,但我又不知道怎么写这个一批一批提交的代码还有用什么控件。很烦的。我也看了很多网友说最好不要用table控件,为什么不要用这个控件啊,如果这个控件不好用,为什么borland公司又要开发这个控件呢。
你说的批量在PB中的DataWindow可以,但是Delphi好象没有相应的东西
打开数据库的所以的记录到本地(select * from tablename),这样就
就浪费了时间,也没有必要。用TQuery/TADOQuery,那么你可以用SQL语句来添加记录,如:
Insert into.....values....,这样就可以避免用Table所浪费的时间。少批量多批次的话,可以这样,如每100条记录提交一次,那么要有100条
Insert语句写在Query.SQL中,可以用TStringList对象(如SqlList)来存
储这些语句,用Query.SQL.Assign(SqlList)即可,用完后sqlList.clear,
sqlList:=nil即可
建议用TADOQuery,灵活而且很方便!
对于批量添加可以将Tquery的CACHEDUPDATES设置为TRUE
这样修改的数据将保存在内存中,显示快速。
在确认修改时调用Tquery的.ApplyUpdates方法,就能实现批量保存。
table只有在一种情况下才不得不用
adoquery.add('insert into 数据表 values(....)');
不要直接更新ADODataset
用ADODataset->DatasetProvider->ClientDateset
更新完Clientdateset后再用Applyupdates方法回传
如果数据量可以使用分页方法,尽可能的一次通讯不超过1000条记录
尽可能的少和数据服务器通讯
主与你同在
with table_platepo do
begin
append;
fieldbyname('po').AsString:=edit3.Text;
append;
fieldbyname('po').AsString:=edit4.Text;
append;
fieldbyname('po').AsString:=edit5.Text;
end;
updatebatch ;
小弟想请问一下,程序运时时产生的del01.mb,del02.mb,del03.mb之类是什么东东?是不是CACHEDUPDATES的数据?
你将column1这个列单独设成索引,那样查询效率就会是以前的10倍,至于delphi中的方法嘛你可以参考上面其他人说的
所以启动肯定是慢的。