请教在paradox中如何用CacheUpdate(50分)

  • 主题发起人 主题发起人 linkfly
  • 开始时间 开始时间
L

linkfly

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个Paradox的本地数据库,现要修改其中的每一条记录,记录数约为9000条。
程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 1 to 9000 do
begin
screen.Cursor := crHourglass;
with query1 do
begin
close;
sql.clear;
sql.add('update daycheck set ?WorkTime1 = :sbdk, Worktime2 =:xbdk, WorkTime3 =:jbsb, WorkTime4 =:jbxb,');
sql.add(' WorkTime5 =:lcdk, WorkTime6 = :hcdk where (Date = :riqi) and (ID_no= :IDhao)');
paramByName('sbdk').AsDateTime := strtotime('12:22');
paramByName('xbdk').AsDateTime := strtotime('12:22');
paramByName('jbsb').AsDateTime := strtotime('12:22');
paramByName('jbxb').AsDateTime := strtotime('12:22');
paramByName('lcdk').AsDateTime := strtotime('12:22');
paramByName('hcdk').AsDateTime := strtotime('12:22');
paramByName('IDhao').Asstring := '0090';
paramByName('riqi').AsDatetime := strtodate('1999-12-31');
execsql;
end;
end;
screen.Cursor := crDefault;
end;

程序执行大约要20分钟,并且程序的界面(Form)好象死机一样,不知大家有没有什么方法。可以加快程序写库
的时间,用Cacheupdate如果操作?希望能讲得详细一点。给50分。
 
demo:
/Program Files/Borland/Delphi5/Demos/Db/Cachedup
你的SQL语句最好放在一个线程里执行,这样FORM就不会死了,呵呵。
9000说多不多,说少不少,呵呵。
CACHEDUPDATE=TRUE,UPPLYUPDATE
 
一般这种问题有两种处理办法.
1 用缓存更新.
2 用事务处理
1缓存更新 在你的程序中加入
sql.clear;
cachedupdate;
.
execsql;
end;
query.applyupdate;
2缓存更新不如事务处理能更好的控制
database.startrasction;
for i := 1 to 9000 do
.
prepare;
sql.clear;
.

execsql;
end;
query.unprepare;
try
database.commit;
exception
database.rollback;
end;
.
end;
 
试用后,好象没有明显的改变,不知用CACHEUPDATE后是否有明显的作用呢?
 
用CACHEUPDATE后是否有明显的作用?不如用事务处理明显
因为你这行代码。每次写入数据到要用 bde 打开数据库。(具体细节不说了)
而用了事务处理只打开一次。李维的书里有一个向你程序这样的例子。
5000 个数据 200 多秒。而用了事务处理后只有 10 几秒就行了
 
非常感谢阿蒙和CJ的帮助,但我对cacheupdate还是不太懂,如果阿蒙有关于这方面的资料,方便的话请mail一份给我,不胜感激。linkfly@263.net
 
把 query.close 去掉因为这样还是提前更新了.并不是先写在缓存中.一起更新.
query 每 close 一次都要重新驱动 bde 打开数据库主要的时间便浪费在 bde 开
关数据库上了.
 
后退
顶部