我将远程库全倒到我的计算机里也试过了,结果也差不多,都慢得很,索引也分别建了4个,其中有一个是复合索引,完全按我的求和方式索引的,按Dater,Fzks,Bzbh,Dw索引。不过,我还发现如果不求和,仅仅是复制以往的记录都很慢!我是采用以下方法:
首先在库中找到所有最后一天的记录,一次取出,如果最后的一天记录录入时间是今天,就结束,这样还是很快的,如果不是今天的记录,就逐条的将其中的Jrlh,Jrwg清0,这样就慢了,但这还可以忍受,不能忍受的是求和,我和求各和是各项求各和是按:Select Fzks,Dw sum(Jrlh),sum(Jrwg) From Sjlr_jj where Bzbh>'101' and Bzbh<'199' and Date<'2003-07-10' Group Fzks,Dw 仅前面这部分执行起来,速度也还是可以将就忍受, 半分钟,然后用所得结果逐条的用sum(Jrlh)-Sum(Jrwg)赋值给Wwgs,采用的是Query1->first(),
For循环,
Table1->FieldByName("Wwgs")->AsInteger=Query1->Fields->Fields[2]->AsInteger-Query1->Fields->Fields[3]->AsInteger;
query1->Next(),
类似方法反复调用了几次,这样就慢了,有时长达几分钟,机子差点儿的就得十几分钟,但每次这样的结果才几百条记录啊!有什么办法解决吗?
顺便说一句,你真是个热心的人!我很感激你!在这儿的所有留言您都回言了!以前我问个问题是倒处发,现在就这儿一个就成了,还真快!谢谢!
--------------------next---------------------
我经过逐步测试时间,明白了慢不是在求和上,而是在求完后,再逐条执行上!如:
AnsiString gmd,gme,gmf;
int n,b;
Table1->First();
for(n=0;n
RccordCount;n++)
{
gmd=Table1->FieldByName("Fzks")->AsString;
gme=Table1->FieldByName("Dw")->AsString;
n=Table1->FieldByName("Jrlh")->AsInteger;
b=Table1->FieldByName("Jrwg")->Asinteger;
if(Fine_Table2(gmd,gme)) //在Table2中找到相同的Fzks,Dw
{
Table2->Edit();
Table2->FieldByName("Cgjc")->AsInteger=n-b;
Table2->Post();
}
Table1->Next();
}
我觉得用这种逐条的取算很浪费时间,有什么办法能完成所有这种每条记录间都是同种方法的运算的方法吗?
也就是以前FoxBase中的Change all ...的那一种!就是后面能用表达式的那一种!
--------------------next---------------------
阅读(1408) | 评论(0) | 转发(0) |