第一步:确认64位系统上安装了64位的access驱动。安装office2010的64位版本或者去微软平台下载Access 2010的64位驱动(AccessDatabaseEngine_X64.exe)。这个驱动可以从下面的地址下载:(由于不能发链接,大家去百度找吧)
有些电脑上可能先装了32位的office,这样安装这个64位驱动时会提示报错,要求先卸载32位office后再安装。这样有两个做法,一种是先卸载office,安装64位驱动,再重装32位的office;另外一个做法,修改64位的驱动包,跳过检测了直接安装,更改方法:
先用7zip把AccessDatabaseEngine_X64.exe接压缩,里面会有一个AceRedist.msi安装文件,然后用Orca(下载地址:(由于不能发链接,大家去百度找吧))打开这个MSI,找到LaunchCondition里面的BLOCKINSTALLATION,删掉,保存。现在在运行AceRedist.msi,成功。
第二步:修改connectstring语句
具体代码我放在下面,这样更好理解些。具体修改的就是connectstring语句的组成。考虑到在64位系统下可以安装32位CAD和64位CAD,故结合平台判断语句一起控制。
[pcode=lisp,true]
;;;函数名:MECAD_ADOLib_ConnectString1
;;;输入变量:dbFile(打开数据库的路径名)
;;;输出值:ConnectString
;;;注释:使用ODBC(不需要DSN)连接MS-Access数据库,
;;; 示例: (MECAD_ADOLib_ConnectString1 "d:/dbfiles/products.mdb")
;;;设计者:
;;;设计日期:2013年8月
;;;修改者:
;;;修改日期:
(defun MECAD_ADOLib_ConnectString1 (dbFile / ConnectString proc_arch)
(if (and
(setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
(< 1 (strlen proc_arch))
(eq "64" (substr proc_arch (1- (strlen proc_arch))))
)
(progn
(setq ConnectString
(STRCAT
"Provider=MSDASQL;"
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
"DBQ="
dbFile
)
) ;对于64位系统的数据库引擎连接
)
(progn
(setq ConnectString
(strcat
"Provider=MSDASQL;"
"Driver={Microsoft Access Driver (*.mdb)};"
"DBQ="
dbFile
)
) ;对于32位系统的数据库引擎连接
)
) ;end if
ConnectString
)
;;;end if
;;;函数名:MECAD_ADOLib_ConnectString2
;;;输入变量:dbFile(打开数据库的路径名)
;;;输出值:ConnectString
;;;注释:使用JET4.0连接MS-Access数据库,64位系统上,JET引擎已不支持,需改用ACE引擎
;;; 示例: (MECAD_ADOLib_ConnectString2 "d:/dbfiles/products.mdb")
;;;设计者:
;;;设计日期:2013年8月
;;;修改者:
;;;修改日期:
(defun MECAD_ADOLib_ConnectString2 (dbFile / ConnectString proc_arch)
(if (and
(setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
(< 1 (strlen proc_arch))
(eq "64" (substr proc_arch (1- (strlen proc_arch))))
)
(progn
(setq ConnectString
(strcat "Provider=Microsoft.ACE.OLEDB.12.0;"
"Data Source="
dbFile
";Persist Security Info=False"
)
) ;对于64位系统的数据库引擎连接
)
(progn
(setq ConnectString
(strcat "Provider=Microsoft.JET.OLEDB.4.0;"
"Data Source="
dbFile
";Persist Security Info=False"
)
) ;对于32位系统的数据库引擎连接
)
) ;end if
ConnectString
)
;;;end if
;;;;测试函数的代码如下
(defun c:adotest (/ dbfile *ConnectionObject* result SQLStatement)
(setq dbfile (getfiled "" "C:\\" "mdb" 4))
(if dbfile
(progn
;;打开MDB数据库
(setq *ConnectionObject* (ADOLISP_ConnectToDB (MECAD_ADOLib_ConnectString1 dbfile) "" ""))
;(setq *ConnectionObject* (ADOLISP_ConnectToDB (MECAD_ADOLib_ConnectString2 dbfile) "" ""))
(if *ConnectionObject*
(progn
;;数据库查询
(setq result (ADOLISP_GetTablesAndViews *ConnectionObject*))
;;显示查询结果
(print result)
;;关闭数据库
(ADOLISP_DisconnectFromDB *ConnectionObject*)
)
)
)
)
(princ)
)
[/pcode]
有些电脑上可能先装了32位的office,这样安装这个64位驱动时会提示报错,要求先卸载32位office后再安装。这样有两个做法,一种是先卸载office,安装64位驱动,再重装32位的office;另外一个做法,修改64位的驱动包,跳过检测了直接安装,更改方法:
先用7zip把AccessDatabaseEngine_X64.exe接压缩,里面会有一个AceRedist.msi安装文件,然后用Orca(下载地址:(由于不能发链接,大家去百度找吧))打开这个MSI,找到LaunchCondition里面的BLOCKINSTALLATION,删掉,保存。现在在运行AceRedist.msi,成功。
第二步:修改connectstring语句
具体代码我放在下面,这样更好理解些。具体修改的就是connectstring语句的组成。考虑到在64位系统下可以安装32位CAD和64位CAD,故结合平台判断语句一起控制。
[pcode=lisp,true]
;;;函数名:MECAD_ADOLib_ConnectString1
;;;输入变量:dbFile(打开数据库的路径名)
;;;输出值:ConnectString
;;;注释:使用ODBC(不需要DSN)连接MS-Access数据库,
;;; 示例: (MECAD_ADOLib_ConnectString1 "d:/dbfiles/products.mdb")
;;;设计者:
;;;设计日期:2013年8月
;;;修改者:
;;;修改日期:
(defun MECAD_ADOLib_ConnectString1 (dbFile / ConnectString proc_arch)
(if (and
(setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
(< 1 (strlen proc_arch))
(eq "64" (substr proc_arch (1- (strlen proc_arch))))
)
(progn
(setq ConnectString
(STRCAT
"Provider=MSDASQL;"
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
"DBQ="
dbFile
)
) ;对于64位系统的数据库引擎连接
)
(progn
(setq ConnectString
(strcat
"Provider=MSDASQL;"
"Driver={Microsoft Access Driver (*.mdb)};"
"DBQ="
dbFile
)
) ;对于32位系统的数据库引擎连接
)
) ;end if
ConnectString
)
;;;end if
;;;函数名:MECAD_ADOLib_ConnectString2
;;;输入变量:dbFile(打开数据库的路径名)
;;;输出值:ConnectString
;;;注释:使用JET4.0连接MS-Access数据库,64位系统上,JET引擎已不支持,需改用ACE引擎
;;; 示例: (MECAD_ADOLib_ConnectString2 "d:/dbfiles/products.mdb")
;;;设计者:
;;;设计日期:2013年8月
;;;修改者:
;;;修改日期:
(defun MECAD_ADOLib_ConnectString2 (dbFile / ConnectString proc_arch)
(if (and
(setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
(< 1 (strlen proc_arch))
(eq "64" (substr proc_arch (1- (strlen proc_arch))))
)
(progn
(setq ConnectString
(strcat "Provider=Microsoft.ACE.OLEDB.12.0;"
"Data Source="
dbFile
";Persist Security Info=False"
)
) ;对于64位系统的数据库引擎连接
)
(progn
(setq ConnectString
(strcat "Provider=Microsoft.JET.OLEDB.4.0;"
"Data Source="
dbFile
";Persist Security Info=False"
)
) ;对于32位系统的数据库引擎连接
)
) ;end if
ConnectString
)
;;;end if
;;;;测试函数的代码如下
(defun c:adotest (/ dbfile *ConnectionObject* result SQLStatement)
(setq dbfile (getfiled "" "C:\\" "mdb" 4))
(if dbfile
(progn
;;打开MDB数据库
(setq *ConnectionObject* (ADOLISP_ConnectToDB (MECAD_ADOLib_ConnectString1 dbfile) "" ""))
;(setq *ConnectionObject* (ADOLISP_ConnectToDB (MECAD_ADOLib_ConnectString2 dbfile) "" ""))
(if *ConnectionObject*
(progn
;;数据库查询
(setq result (ADOLISP_GetTablesAndViews *ConnectionObject*))
;;显示查询结果
(print result)
;;关闭数据库
(ADOLISP_DisconnectFromDB *ConnectionObject*)
)
)
)
)
(princ)
)
[/pcode]