chamlien 发表于 2017-5-11 12:50:35

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最新修改:本贴涉及的代码实际上还有些问题,如能解决再来更新。

lpxx 发表于 2017-5-12 10:07:24

感谢分享,这问题我曾经也很困惑。

kk_lee69 发表于 2017-5-18 13:05:43

回复 1# chamlien

Microsoft.ACE.OLEDB.12.0 應該也可以使用32位元的才對

chzj589 发表于 2017-5-18 13:27:17

回复 3# kk_lee69
刚试了一下,XP86 32位 不能通过 

kk_lee69 发表于 2017-5-18 13:30:11

回复 4# chzj589

能給個範例嗎??

chzj589 发表于 2017-5-18 13:32:51

回复 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

kk_lee69 发表于 2017-5-18 13:54:29

回复 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位元編譯後不能使用

chzj589 发表于 2017-5-18 14:04:10

回复 7# kk_lee69
我的系统没装Access,有装Office2003

kk_lee69 发表于 2017-5-18 17:18:13

回复 8# chzj589

你的OFFICE 是32位元版本還是64位元版本??

你的AU3要編譯成64位元 才可以執行嗎??

chzj589 发表于 2017-5-18 18:48:38

回复 9# kk_lee69

OFFICE 应该是32位版本

kk_lee69 发表于 2017-5-18 19:42:51

回复 10# chzj589

你的AU3要編譯成64位元 才可以執行嗎??

編譯成32位元   無法執行嗎??

chzj589 发表于 2017-5-18 20:02:50

回复 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

kk_lee69 发表于 2017-5-18 20:43:27

回复 12# chzj589

我也 跟你一樣

版主說
需要注意的是,改为该版本后,需要将脚本编译为64位或加上#PRE_UseX64=Y

我測試的結果
#PRE_UseX64=Y

反而不行了

chzj589 发表于 2017-5-19 08:21:42

回复 13# kk_lee69
不去纠结,加个判断64位或是32位就行了

chamlien 发表于 2017-5-20 20:00:33

回复 13# kk_lee69


    忘了提,我默认64位系统装的是64位office了。事实上,系统需要64位、且office也是64位版本才能使用。
页: [1] 2
查看完整版本: 64位系统Access数据库连接无响应解决办法