64位系统Access数据库连接无响应解决办法
本帖最后由 chamlien 于 2017-6-4 12:46 编辑论坛上能搜索到的Access数据库连接代码基本上都是下面这样的$Mdb_conncetion.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_path & ";Jet Oledb:Database Password=" & $mdb_pass) 上面这段代码在x64位上是无法进行连接的,需要将脚本编译为32位或加上#PRE_UseX64=N。
那么问题来了,编译为32位运行,Access数据库一般读写4-5次后(原数据3W条左右),就会出现无法响应的情况(测试环境:win7x64,win10x64)。
源代码每次读写都有close释放资源,数据库语法也没有错误,但就是出现无法相应的情况。这种情况表现为,数据库语句确实执行了,就是读写不了数据,脚本还会往下执行。
搜索论坛无果后,就随便搜了一下百度。发现原来是数据库连接版本的问题。解决方法见:http://www.cnblogs.com/bluedoctor/p/3925871.html
于是我将数据库连接代码改为:
$Mdb_conncetion.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $mdb_path & ";Jet Oledb:Database Password=" & $mdb_pass)
经多次测试,发现再也不出现没有响应的情况了。
上方连接代码是将数据库版本指定为Microsoft.ACE.OLEDB.12.0,需要注意的是,改为该版本后,需要将脚本编译为64位或加上#PRE_UseX64=Y。
2017年6月4日12:43:43最新修改:本贴涉及的代码实际上还有些问题,如能解决再来更新。 感谢分享,这问题我曾经也很困惑。 回复 1# chamlien
Microsoft.ACE.OLEDB.12.0 應該也可以使用32位元的才對 回复 3# kk_lee69
刚试了一下,XP86 32位 不能通过 回复 4# chzj589
能給個範例嗎?? 回复 5# kk_lee69
If @OSArch = "x86" Then
$OSbit = "32位 系统"
MsgBox(0, "系统", $OSbit, 1)
$Mdb_conncetion = ObjCreate("ADODB.Connection")
;$Mdb_conncetion.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$Mdb_conncetion.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
EndIf
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $Mdb_conncetion
回复 6# chzj589
原始的文章說
① 下载安装Microsoft Access Database Engine 2010 Redistributable(28MB),共有32bit(下载)和64bit(下载)两个版本,具体要安装哪个要看你的Office程序是32bit的还是64bit的,比如:我的PC是64bit的Win8 Pro,但是我Office的程序是32bit的,所以我应当安装AccessDatabaseEngine.exe(32bit);
② 打开你的.NET应用程序配置文件(应用程序名.config,Web应用程序为 Web.config),设置数据库连接字符串的Provide Microsoft.ACE.OLEDB.12.0,例如标准连接字符串为:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Data.accdb;Persist Security Info=False;"
並沒有提到 需要改為64的 除非 你的OFFICE 是64而我的OFFICE 是 32位元所以 我測試的結果是可以用的反而 我改成64位元編譯後不能使用 回复 7# kk_lee69
我的系统没装Access,有装Office2003 回复 8# chzj589
你的OFFICE 是32位元版本還是64位元版本??
你的AU3要編譯成64位元 才可以執行嗎?? 回复 9# kk_lee69
OFFICE 应该是32位版本 回复 10# chzj589
你的AU3要編譯成64位元 才可以執行嗎??
編譯成32位元 無法執行嗎?? 回复 11# kk_lee69
我用
$Mdb_conncetion = ObjCreate("ADODB.Connection")
$Mdb_conncetion.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
能通过
用
#PRE_UseX64=Y
$Mdb_conncetion = ObjCreate("ADODB.Connection")
$Mdb_conncetion.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
无法执行
编辑提示:
$Mdb_conncetion.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$Mdb_conncetion^ ERROR 回复 12# chzj589
我也 跟你一樣
版主說
需要注意的是,改为该版本后,需要将脚本编译为64位或加上#PRE_UseX64=Y
我測試的結果
#PRE_UseX64=Y
反而不行了 回复 13# kk_lee69
不去纠结,加个判断64位或是32位就行了 回复 13# kk_lee69
忘了提,我默认64位系统装的是64位office了。事实上,系统需要64位、且office也是64位版本才能使用。
页:
[1]
2