社区
数据库
帖子详情
ado+access插入记录的效率问题
bauhaus
2005-01-26 05:38:39
我插入3000条记录,感觉速度太慢了,简直无法忍受
有什么办法能提高插入的效率吗?
谢谢
...全文
205
18
打赏
收藏
ado+access插入记录的效率问题
我插入3000条记录,感觉速度太慢了,简直无法忍受 有什么办法能提高插入的效率吗? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jazy
2005-09-08
打赏
举报
回复
我觉得这种约束条件不清晰的表,一次又要插入上千条记录,不如这样处理:每次打开程序都把所有记录读出来放内存里,插入新记录先在内存里检查是否有重复应过滤掉的,内存操作很快啊,等整理好了再删除所有数据,一次批量插入(利用ado的updatebatch很快的)。
flyjzy5
2005-09-07
打赏
举报
回复
没办法定义主健?你把第一个字段置为自动编号不就行了
专注编程优化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
实现Excel批量导入
Access
数据库实战
ADO
(ActiveX Data Objects)是微软提供的一套用于访问数据源的 COM 组件接口,广泛应用于 VB、VBA、ASP 等开发环境中。它通过统一的编程模型,屏蔽了底层数据存储的差异,使开发者能够以一致的方式访问包括 Excel、
Access
、SQL Server 等多种数据源。
ADO
的核心对象包括ConnectionCommandRecordsetFieldProperty等,其中Connection负责建立与数据源的连接,Command用于执行命令,
C# 向
ACCESS
中批量
插入
记录
用
ado
.net操作
ACCESS
数据库时,发现批量
插入
记录
时,速度很慢,百度了不少文章后,终于发现使用DAO,或是
ADO
DB来操作,速度很快。 以一万条
记录
为例,使用
ADO
.net
插入
,耗时约20秒,同样的,使用
ADO
DB,或是DAO,耗时小于300ms。...
bulkwrite 批量
插入
_在.NET / C#中将大量
记录
(批量
插入
)写入
Access
我发现以特定方式使用DAO大约比使用
ADO
.NET快30倍。 我正在共享代码并得到此答案的结果。 作为背景,下面的测试是写出20列的表的100000条
记录
。技术和时间的摘要-从好到坏:02.8秒:使用DAO,使用myFields[k]引用表格列02.8秒:写出到文本文件,使用自动化将文本导入
Access
11.0秒:使用DAO,使用列索引引用表列。17.0秒:使用DAO,按名称引用该列79.0秒:使...
Access
数据库数据
插入
操作详解与实例
在探索Microsoft
Access
的奥秘之前,让我们首先了解其核心组件,以便更好地把握后续章节的内容。
Access
数据库由多个独立但相互关联的对象组成,其中最为关键的三个部分是:表、查询和表单。表是存储数据的容器,它由列(字段)和行(
记录
)构成,我们将在第二章深入探讨。查询是检索和操作数据的强大工具,用于从表中提取信息、执行更新或
插入
操作等,具体细节将在后续章节展开。表单则提供了用户与数据交互的界面,让数据的查看和编辑变得更加直观便捷。
MFC中使用
ADO
的
记录
集
ADO
是ActiveXDataObjects 参考:https://blog.csdn.net/xzsfg6825/article/details/80047946
记录
集的open()方法的原型是这样的: HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & Ac...
数据库
4,017
社区成员
39,805
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章