为什么会很慢:

xmcxy 2004-09-23 04:05:22
在BCB中,为什么采用循环赋值的方法很慢,我复运行了300行的数据花去了半小时
while(!DataModule1->ADOQuery2->Eof){
autoID++;
DataModule1->ADOQuery2->Fields->Fields[0]->AsString =autoID;
for(int i=1 ;i<fldCun; i++)
{
DataModule1->ADOQuery1->Fields->Fields[i]->AsString =
DataModule1->ADOQuery2->Fields->Fields[i]->AsString ;
}
DataModule1->ADOQuery2->Next();
}
有没有更好的方法,排除用insert into
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CACACACACA 2004-09-27
  • 打赏
  • 举报
回复
不知道你的数据表用的是SQL里的,还是DBF,还是MDB,还是EXECL,
我试过在EXECL文件中相互导入数据,但也不会这么慢。其他的会更快了。
在SQL和MDB,可以直接,SELECT * INTO 新表 FROM 。。。。
建你把cachesize设置到100-200,把prepared设置为TRUE。
另外,你的代码里怎么没有POST()呢?
真如实观 2004-09-26
  • 打赏
  • 举报
回复
这样做慢是必然的,我知道你不喜欢用"insert into",那用ado连接excel后再导入到目标数据集,否则用:
insert into tablename(col1,col2...)select xxx,xxx... from
penrowset('microsoft.jet.oledb.4.0',Excel 8.0;imex=1;hdr=yes;database=c:\test.xls',[test$])
cuiyu616ok 2004-09-25
  • 打赏
  • 举报
回复
up
xmcxy 2004-09-25
  • 打赏
  • 举报
回复
to:pcclever,不会的,我用insert into的方法复制相同的数据,不超过30秒.内存256 CPU C1.1G,移动PC
to:kmfangxun 因为我的源数据是EXCEL表,所以在连接时没有设置主键,不过我做了排序,这样对速度是否有所改善.
pcclever 2004-09-24
  • 打赏
  • 举报
回复
我觉得楼主的电脑有问题,我做过30万条记录的类似copy,最多也不超过十二分钟。
除非记录中包含大量的信息,比如图片、声音等等。
kmfangxun 2004-09-23
  • 打赏
  • 举报
回复

建表时有Primary Key或索引字段,在复制记录时会快一些.



     另外我觉得300条记录不会那么慢吧?你的表字段数有多少?操作系统?CPU? 内存?
  • 打赏
  • 举报
回复
CacheSize
Bachupdate
xmcxy 2004-09-23
  • 打赏
  • 举报
回复
大家可能遇到过建系统时需导入数据,如从excel表中导入BOM,或导入末完成的定单等等,
大家来讨论讨论一下,怎样做才能更快,让操作人员使用更方便。
xmcxy 2004-09-23
  • 打赏
  • 举报
回复
谢谢省委书记,我会试的。
胡绵涛已向你颁发委任状......................................
558047 2004-09-23
  • 打赏
  • 举报
回复
数据源是Excel我没有试过
一般情况下,如果数据量大或者复杂计算、循环等数据操作,建议用存储过程
558047 2004-09-23
  • 打赏
  • 举报
回复
SQL-Server数据库
首先要建好存储过程
然后在程序里面调用
AdoStoredProc->Close();
AdoStoredProc->ProcedureName = "update_gxWstd";
AdoStoredProc->Parameters->Clear();
AdoStoredProc->Parameters->CreateParameter("@WstdDate",ftDateTime,pdInput,10,NULL);
AdoStoredProc->Parameters->CreateParameter("@WstdNamePart",ftString,pdInput,40,NULL);
AdoStoredProc->Parameters->ParamByName("@WstdDate")->Value =StrToDate(strDate);
AdoStoredProc->Parameters->ParamByName("@WstdNamePart")->Value =strNamePart;
//AdoStoredProc->Open(); //不返回结果集不能用Open
AdoStoredProc->ExecProc();
xmcxy 2004-09-23
  • 打赏
  • 举报
回复
ado组件怎么用,能否给出代码?如果需复制的数据源是excel表呢?
558047 2004-09-23
  • 打赏
  • 举报
回复
用存储过程。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧