社区
数据库
帖子详情
ado+access插入记录的效率问题
bauhaus
2005-01-26 05:38:39
我插入3000条记录,感觉速度太慢了,简直无法忍受
有什么办法能提高插入的效率吗?
谢谢
...全文
178
18
打赏
收藏
ado+access插入记录的效率问题
我插入3000条记录,感觉速度太慢了,简直无法忍受 有什么办法能提高插入的效率吗? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jazy
2005-09-08
打赏
举报
回复
我觉得这种约束条件不清晰的表,一次又要插入上千条记录,不如这样处理:每次打开程序都把所有记录读出来放内存里,插入新记录先在内存里检查是否有重复应过滤掉的,内存操作很快啊,等整理好了再删除所有数据,一次批量插入(利用ado的updatebatch很快的)。
flyjzy5
2005-09-07
打赏
举报
回复
没办法定义主健?你把第一个字段置为自动编号不就行了
专注VB编程开发20年
2005-02-03
打赏
举报
回复
顶
bauhaus
2005-01-28
打赏
举报
回复
的确是那里降低了速度
但是我的表没办法定义主健
因为没有一个东西是唯一的
bauhaus
2005-01-27
打赏
举报
回复
我打错了
大概时间时2分左右
表含有5个字段
2个时间字段,其余的是整数
感觉速度还是很慢
部分代码如下:
CString strSql;
CString PyName;
CADORecordset * rs;
CString strTemp;
WORD wUserId;
if(0 == dwRecordCount) //如果没有纪录,不处理,避免不必要的刷新
return TRUE;
rs = theApp.GetRecordPointer();
strSql = "select * from openrecord";
rs->Open(strSql,CADORecordset::openQuery);
if(rs->GetRecordCount())
rs->MoveLast();
bProcessFinished = FALSE;
// _beginthreadex( NULL, 0, ActiveDisplay, NULL, 0, 0 );
for(DWORD i = 0 ; i <dwRecordCount ; ++i)
{
COleDateTime time(2000+BCD2DEC(pOpenRecord[i].year),
BCD2DEC(pOpenRecord[i].month),
BCD2DEC(pOpenRecord[i].day),
BCD2DEC(pOpenRecord[i].hour),
BCD2DEC(pOpenRecord[i].minute),
BCD2DEC(pOpenRecord[i].second));
if(COleDateTime::invalid == time.GetStatus())//如果开门纪录时间无效我没办法处理
continue;
// AfxMessageBox(time.Format("%Y-%m-%d %H:%M:%S"));
strTemp.Format("%s%d","Devicenum=",nDeviceAddress);
strSql = "select * from openrecord where "+strTemp+" and "+" opentime=#"+time.Format("%Y-%m-%d %H:%M:%S")+"#" ;
rs->Open(strSql,CADORecordset::openQuery);
if(rs->GetRecordCount() > 0) //已经存在的???
{
// continue;
}
PyName.Format("%s",pOpenRecord[i].username);
wUserId = ntohs(pOpenRecord[i].userID);
COleDateTime currenttime = COleDateTime::GetCurrentTime();
rs->AddNew();
rs->SetFieldValue("DeviceNum",nDeviceAddress);
rs->SetFieldValue("UserId",wUserId);
rs->SetFieldValue("PyName",PyName);
rs->SetFieldValue("time",time);
rs->SetFieldValue("AddTime",currenttime);
rs->Update();
oyljerry
2005-01-27
打赏
举报
回复
access中不能在程序中直接用存储过程
jayfunk
2005-01-27
打赏
举报
回复
能不能在access中用存储过程?影响速度的是太多I/O操作吧!没法的,只有等啦,因为你这个是写入硬盘
abc789
2005-01-27
打赏
举报
回复
用ADO2.7看看,应该是你的代码有问题。ACCESS数据库不能用存储过程的。
3000条不要怎么多时间的。
把你的代码贴出来看看
gdy119
2005-01-27
打赏
举报
回复
用存储过程,或者调用批处理(批插入)
bauhaus
2005-01-27
打赏
举报
回复
用了10分多钟
内容不是很大
就是一些简单的文本
llm06
2005-01-27
打赏
举报
回复
你能不能说的清楚一点,3000条记录,什么内容,花了多少时间?
估计你自己的代码由问题。
bauhaus
2005-01-27
打赏
举报
回复
谢谢
能够再详细一些吗?
llm06
2005-01-27
打赏
举报
回复
我觉得问题出在这里
strSql = "select * from openrecord where "+strTemp+" and "+" opentime=#"+time.Format("%Y-%m-%d %H:%M:%S")+"#" ;
rs->Open(strSql,CADORecordset::openQuery);
if(rs->GetRecordCount() > 0) //已经存在的???
{
// continue;
}
如果你的表记录很多,这里会很花时间的。
对于数据库,不应该使用这种方法来判断有效性。应该给表设置约束,然后通过try{}catch{}根据错误信息来处理。
stavck
2005-01-27
打赏
举报
回复
定义一个主键,这样插入时不用查询是否存在。
qingz
2005-01-27
打赏
举报
回复
请教一下:CADORecordset 是不是你自己写的一个类。
我也是刚开始看ADO, 看了一下你的代码,你好象是先执行一次 select语句查询一次,如果没有记录才执行插入操作,那你就要执行3000次查询,再加上3000次插入,不知是不是因为这样才慢呢?
oyljerry
2005-01-26
打赏
举报
回复
用存储过程
或分批插入
hxzb7215191
2005-01-26
打赏
举报
回复
怎么会要一下子写入这么多的记录呢?
kingzai
2005-01-26
打赏
举报
回复
1.用ADO中的存储过程.
2.在执行SQL之前,先Prepared = True;
ADO
+
ACCESS
数据库使用详解
ADO
+
ACCESS
数据库使用详解
ADO
+
ACCESS
数据库使用详解
ADO
+
ACCESS
数据库使用详解
ADO
+
ACCESS
数据库使用详解
VC技巧与VC+
ADO
+
Access
数据库数据库大全
里面总结了Vc 中
Ado
创建
access
数据库,VC小技巧,VC+
ADO
+
Access
2000数据库文件密码的设置和修改,在对话框中动态显示位图等等
无线实时仓库管理系统 (
ADO
+
ACCESS
)
无线实时仓库管理系统,由用户登录模块和系统管理、仓库管理、出入库管理三大功能组成。系统还成在不足,还需改善。这个系统是本人首个较完整的作品,系统的缺点还请多多指教!
VB+
access
+电脑报价
电脑报价 VB+
access
+电脑报价 VB+
access
+电脑报价 VB+
access
+电脑报价
超级经典的ASP+
ACCESS
动态网页的制作
超级经典的ASP+
ACCESS
数据库动态网页的制作,包括表单制作,添加数据,编辑数据,修改数据,保存数据,删除数据。
数据库
4,018
社区成员
39,807
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章