ACCESS数据库速度问题
时间:2011-12-09
来源:互联网
在DataModule1用3个TADOTable控件和1个TADOConnection控件,TADOTable分别关联TB、TS、TRef ACCESS表。其目的就是要将3张表中的相关信息放到IB结构中。TB大约3000记录,TS大约3000记录 ,TRef 大约50000记录,代码如下:
大约需要16分钟简直让人无法忍受啊,请大家看看,是代码的问题还是方法问题?如何提高速度,谢谢!
DataModule1->TB->Open();
DataModule1->TS->Open();
DataModule1->TRef->Open();
DataModule1->TB->Filter = "type = 'DX'";
DataModule1->TB->Filtered = true;
int Count = DataModule1->TB->RecordCount;
j=0;
for ( i=0;i<Count;i++) //Count大约2000左右
{
SigOff = 0;
IB[i].Name = DataModule1->TB->FieldByName("name")->AsString ;
IB[i].Type = DataModule1->TB->FieldByName("Type")->AsString ;
IB[i].Max = DataModule1->TB->FieldByName("max")->AsString ;
IB[i].Perd = DataModule1->TB->FieldByName("perd")->AsString ;
IB[i].Ser = DataModule1->TB->FieldByName("ser")->AsString ;
IB[i].Explain = DataModule1->TB->FieldByName("label")->AsString ;
IB[i].Note = DataModule1->TB->FieldByName("description")->AsString;
DataModule1->TRef->Filter = "id = '" + IntToStr(i) +"'";
DataModule1->TRef->Filtered = true;
DataModule1->TRef->Sort = "offset ASC";
while(!DataModule1->TRef->Eof)
{
if(DataModule1->TRef->FieldByName("id")->AsString != "")
{
int SN = DataModule1->TRef->FieldByName("id")->AsInteger;
IB[i].Ref[j].SigRef = Base2SignalNum(SN);
IB[i].Ref[j].SizeOffset = SigOff;
j++;
DataModule1->TS->First();
DataModule1->TS->Filter = "id = '" + IntToStr(SN) +"'";
DataModule1->TS->Filtered = true;
SigOff = SigOff + DataModule1->TS->FieldByName("size")->AsInteger/8;
DataModule1->TS->Filtered = false;
}
DataModule1->TRef->Next();
}
IB[i].SigNum = j;
DataModule1->TB->Next();
}
DataModule1->TB->Filtered = false;
DataModule1->TRef->Filtered = false;
DataModule1->TB->Close();
DataModule1->TS->Close();
DataModule1->TRef->Close();
大约需要16分钟简直让人无法忍受啊,请大家看看,是代码的问题还是方法问题?如何提高速度,谢谢!
DataModule1->TB->Open();
DataModule1->TS->Open();
DataModule1->TRef->Open();
DataModule1->TB->Filter = "type = 'DX'";
DataModule1->TB->Filtered = true;
int Count = DataModule1->TB->RecordCount;
j=0;
for ( i=0;i<Count;i++) //Count大约2000左右
{
SigOff = 0;
IB[i].Name = DataModule1->TB->FieldByName("name")->AsString ;
IB[i].Type = DataModule1->TB->FieldByName("Type")->AsString ;
IB[i].Max = DataModule1->TB->FieldByName("max")->AsString ;
IB[i].Perd = DataModule1->TB->FieldByName("perd")->AsString ;
IB[i].Ser = DataModule1->TB->FieldByName("ser")->AsString ;
IB[i].Explain = DataModule1->TB->FieldByName("label")->AsString ;
IB[i].Note = DataModule1->TB->FieldByName("description")->AsString;
DataModule1->TRef->Filter = "id = '" + IntToStr(i) +"'";
DataModule1->TRef->Filtered = true;
DataModule1->TRef->Sort = "offset ASC";
while(!DataModule1->TRef->Eof)
{
if(DataModule1->TRef->FieldByName("id")->AsString != "")
{
int SN = DataModule1->TRef->FieldByName("id")->AsInteger;
IB[i].Ref[j].SigRef = Base2SignalNum(SN);
IB[i].Ref[j].SizeOffset = SigOff;
j++;
DataModule1->TS->First();
DataModule1->TS->Filter = "id = '" + IntToStr(SN) +"'";
DataModule1->TS->Filtered = true;
SigOff = SigOff + DataModule1->TS->FieldByName("size")->AsInteger/8;
DataModule1->TS->Filtered = false;
}
DataModule1->TRef->Next();
}
IB[i].SigNum = j;
DataModule1->TB->Next();
}
DataModule1->TB->Filtered = false;
DataModule1->TRef->Filtered = false;
DataModule1->TB->Close();
DataModule1->TS->Close();
DataModule1->TRef->Close();
作者: tls3511 发布时间: 2011-12-09
这样看不出啥问题,循环是够慢的
作者: ksrsoft 发布时间: 2011-12-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28