找回密码
 加入
搜索
查看: 5550|回复: 16

[原创] 64位系统Access数据库连接无响应解决办法

 火.. [复制链接]
发表于 2017-5-11 12:50:35 | 显示全部楼层 |阅读模式
本帖最后由 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金钱 +61 收起 理由
lpxx + 61

查看全部评分

发表于 2017-5-12 10:07:24 | 显示全部楼层
感谢分享,这问题我曾经也很困惑。
发表于 2017-5-18 13:05:43 | 显示全部楼层
回复 1# chamlien

Microsoft.ACE.OLEDB.12.0 應該也可以使用32位元的才對
发表于 2017-5-18 13:27:17 | 显示全部楼层
回复 3# kk_lee69
刚试了一下,XP86 32位 不能通过 
发表于 2017-5-18 13:30:11 | 显示全部楼层
回复 4# 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
发表于 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位元編譯後  不能使用
发表于 2017-5-18 14:04:10 | 显示全部楼层
回复 7# kk_lee69
我的系统没装Access,有装Office2003
发表于 2017-5-18 17:18:13 | 显示全部楼层
回复 8# chzj589

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

你的AU3要編譯成64位元 才可以執行嗎??
发表于 2017-5-18 18:48:38 | 显示全部楼层
回复 9# kk_lee69

OFFICE 应该是32位版本
发表于 2017-5-18 19:42:51 | 显示全部楼层
回复 10# chzj589

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

編譯成32位元   無法執行嗎??
发表于 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
发表于 2017-5-18 20:43:27 | 显示全部楼层
回复 12# chzj589

我也 跟你一樣

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

我測試的結果
#PRE_UseX64=Y  

反而不行了
发表于 2017-5-19 08:21:42 | 显示全部楼层
回复 13# kk_lee69
不去纠结,加个判断64位或是32位就行了
 楼主| 发表于 2017-5-20 20:00:33 | 显示全部楼层
回复 13# kk_lee69


    忘了提,我默认64位系统装的是64位office了。事实上,系统需要64位、且office也是64位版本才能使用。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 11:18 , Processed in 0.084482 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表