日期:2014-05-16  浏览次数:21077 次

更新大量数据时出错,程序应该怎样改
用C++通过ado访问access数据库
当记录比较多,比如说几万条时,update语句出错
程序如下:
m_pRecordset-> Open( "select   *   from   table1 ",   m_pConnect.GetInterfacePtr(),   adOpenDynamic,   adLockOptimistic,   adCmdText);
while(!m_pRecordset-> adoEOF)
{
        m_pRecordset-> PutCollect( "field1 ",   _variant_T(false));
        m_pRecordset-> Update();
        m_pRecordset-> MoveNext();
}
程序总在第10000条左右出错,出错语句是
        m_pRecordset-> Update();
抛出异常

------解决方案--------------------
可能是申请的内存块或缓冲区太小了。
------解决方案--------------------
请到C++版块去问吧,用UPDATE SQL语句试试。
------解决方案--------------------
检查update
------解决方案--------------------
这样试试:
m_pConnect.execute "update tablename set ... where ... "
------解决方案--------------------
直接用UPDATE SQL语句
------解决方案--------------------
循环数据集后,直接用update语句更新。

如:

循环每一条数据,针对每行记录都执行一次update:

update 表名 set 字段名 = 新值 where ...
------解决方案--------------------
http://support.microsoft.com/kb/198633/zh-cn


在 Microsoft Access 2000, 您可以利用的功能, 可用于增加 MaxLocksPerFile 设置针对 MicrosoftJet 数据库引擎 4.0 编辑 Windows 注册表。 对此设置默认值是 9500。 但是, 因为每个连接该服务器的最大记录锁定是 10000 更改该值建议不要如果 Novell Netware 服务器, 之一副本位于。如果两副本是位于运行 Microsoft Windows NT 4.0 或 Microsoft Windows 95 服务器上或以后, 只受可用资源是限制最大值的设置。

警告 : 如果注册表编辑器使用不当, 可能会造成严重问题, 可能需要重新安装操作系统。 Microsoft 无法保证您能解决因注册表编辑器使用不当而导致问题。 需要您自担风险使用注册表编辑器。
1. 退出 MicrosoftAccess。
2. 依次单击 开始 运行 。
3. 在 打开 框中, 键入 regedit 。
4. 找到 HKEY _ LOCAL _ MACHINE 注册表文件夹。
5. 展开 HKEY _ LOCAL _ 直到您找到 SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0 文件夹。
6. 单击 Jet 4.0 文件夹以查看其内容。
7. 选择 MaxLocksPerFile 项 ; 在 编辑 菜单上, 单击 修改 。
8. 在 编辑 DWORD 值 对话框中, 选择 Decimal 并增加 数值数据 框中数值。
9. 单击 确定 以保存 MaxLocksPerFile 设置。
10. 退出注册表编辑器。
11. 启动 MicrosoftAccess 并同步副本。
------解决方案--------------------
循环数据集后,直接用update语句更新。

如:

循环每一条数据,针对每行记录都执行一次update:

update 表名 set 字段名 = 新值 where ...