关于:access 数据库的无法更新 目前已被锁定

wenluderen 2020-04-23 11:12:44
最近做了一个案子,不复杂。
在VS2012 环境下,创建一个VB.net窗口程序,读取外部硬件的数据,然后写入Access数据库。

后续就是常规的增删改查操作了

×××
数据库只有一个用户,就是VB,net 创建出来的程序。 这个程序后续简称为A程序。

这个A程序,里面的对数据库的操作 是线性的,正常工作后,只有一个线程操作 Access数据库

在这中情况下,还是出现了access 数据库的无法更新 目前已被锁定。

×××
谷歌一下,发现好多人都遇到这个情况, 还有人总结了原因

1)多个用户并发访问


2)连接Access数据库出现"无法更新,当前被锁定"的问题

我是在使用executeBatch的时候出现这个问题的,且在异常处理中也关闭了Connection和Statement对象.

经检查发现原因在于出现异常时没有回滚.

在catch代码块中加入 con.rollback()即可.

3)(https://www.thinbug.com/q/38385621)
我尝试过的并没有阻止错误的事情:

每次插入后关闭连接。 (除了不解决问题之外,这也导致执行时间的急剧增加。)

检测到错误并尝试恢复时关闭所有连接。

CursorTypes的每个排列。

替换SQL Execute的ADODB RecordSet Update方法(INSERT INTO ...)。

将Access 2003数据库转换为Access 2013并将Jet 4.0切换为Jet Ace 12。

为数据库创建前端。 (数据库通常驻留在没有前端的网络共享上。)

将数据库移至C:。 (我已经读过数据库的长路径会产生错误。)

更改Access中的客户端设置以执行基于行的锁定并将所有锁定更改为无锁定到已编辑的行。

编辑:在恢复之前在错误陷阱中添加延迟。


4)数据库太大,导致的延时

https://blog.csdn.net/qq_22855325/article/details/76087138


5)微软的bug
https://blog.csdn.net/iteye_18932/article/details/82433930

********************
我使用的 访问Access 数据的 程序,是网上的一个 比较常规的
代码如下:
 Sub New() 'VB.net中类的默认构造函数   

'访问数据库需要某个接口或者工具,业内叫引擎。下面说明一下。引擎分两种: ACE引擎 和JET引擎

'JET引擎只能访问off97-----office2003 链接字符串范例:string connStr = " Provider=Microsoft.Jet.OleDb.4.0;data source = 1.mdb";

'ACE引擎不仅可以访问office2007以上数据库版本,而且还可以访问JET引擎能访问的office版本。

'链接字符串范例: ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.accdb";

'ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Test.mdb;Persist Security Info=False"

'原来的数据库链接字符串
' m_Database_connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Test.accdb;Persist Security Info=False"
'FBMES系统的数据库链接字符串
m_Database_connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\FBMES相关重要文件\FBMES.accdb;Persist Security Info=True;Jet OLEDB:Database Password=123456"

End Sub


全套代码如下
(待CSDN审核)


...全文
1607 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenluderen 2020-04-23
  • 打赏
  • 举报
回复
链接: https://pan.baidu.com/s/1D-8Q6Xx4AQehQCCTPVhOYg 提取码: 2ndu 复制这段内容后打开百度网盘手机App,操作更方便哦 还是用百度网盘 这个不需要审核 里面是访问数据库的源代码
智造引领未来 2020-04-23
  • 打赏
  • 举报
回复
访问Access数据方案一: https://blog.csdn.net/WKX18330698534/article/details/51175030 这个方案没有用到ODBC, 他是在VS里面建立一个对Access数据库的连接, 全程不写一行代码 ,就可以将Access数据库里面东西显示VBNET 程序的窗口上。
智造引领未来 2020-04-23
  • 打赏
  • 举报
回复
记录一下: 我通过关键词 AccessDatabaseEngine 得到两个 文件, 一个是后缀标注位64位 ,一个没有标注 因为我们的系统是WIN 10 6位的,我的Office是 2016 64位的,所以我想当然的认为,我该装一下 后缀位64位的 AccessDatabaseEngine文件,显示却是打脸的。 真是情况要装 不带64 后缀的那个,感觉好坑啊 PS:AccessDatabaseEngine各版本下载链接 AccessDatabaseEngine2016 https://www.microsoft.com/en-us/download/details.aspx?id=54920 AccessDatabaseEngine2010 https://www.microsoft.com/en-us/download/details.aspx?id=13255   AccessDatabaseEngine2007 https://www.microsoft.com/en-us/download/details.aspx?id=23734 *************** 原作者:https://blog.csdn.net/myruo/article/details/87932800
智造引领未来 2020-04-23
  • 打赏
  • 举报
回复
Q:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 A1:网上有言论称, 32位的 程序调用 64位的Access 会出现这个问题。 在VS的解决方案的属性里面修改了 ,目标CPU从AnyCpu切换为 X64 ,结果发现还是报错,说明不是这个问题 https://blog.csdn.net/YYZZHC999/article/details/79367114 A2:下载 AccessDatabaseEngine 这个玩意 https://www.microsoft.com/en-us/download/details.aspx?id=54920
wenluderen 2020-04-23
  • 打赏
  • 举报
回复
打算换一个思路,不用网上的那个 库,用VS自带的添加数据的方案

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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