明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4218|回复: 7

[源码] ADOLISP在64位系统上读取数据库的解决办法

[复制链接]
发表于 2013-8-25 21:57 | 显示全部楼层 |阅读模式
本帖最后由 yj_hust 于 2013-8-25 21:58 编辑

第一步:确认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]


 楼主| 发表于 2013-8-25 21:59 | 显示全部楼层
搞不懂论坛的插入代码,咋有时可以,有时失效呢。。。
发表于 2013-8-26 12:32 | 显示全部楼层
yj_hust 发表于 2013-8-25 21:59
搞不懂论坛的插入代码,咋有时可以,有时失效呢。。。

看人品,我也没搞明白
发表于 2013-8-26 18:22 | 显示全部楼层
刷新一下就行了。
发表于 2013-8-29 14:21 | 显示全部楼层
最近正好我的程序也在升级到Win7 64位.
64位的程序访问必须使用楼主说的新的Access数据库访问引擎,但是32位的程序仍然可以使用Jet4.0来访问,不过有些客户的电脑就不行。
我看了一下ODBC中的数据库驱动,我电脑上也没有Jet 4.0的驱动,奇怪……
发表于 2018-2-22 17:10 | 显示全部楼层
本帖最后由 BDYCAD 于 2018-2-22 17:12 编辑

楼主我正在学习LISP中访问数据库的,然后遇到一个问题是改不了数据库里面的内容,特发上测试程序给你帮我指导一下,怎么处理的,谢谢!我测试的平台是64位的系统系统W10


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-2-22 21:38 | 显示全部楼层
修改应该不需要UPDATE,直接SET新的值就可以
发表于 2018-2-23 09:57 | 显示全部楼层
本帖最后由 BDYCAD 于 2018-2-23 11:29 编辑

kozmosovia师傅你好, 我试了这样写(如下示例代码),可以把原来的'鞋舌面2'字符改成 '鞋舌面3' 了,谢谢,刚折腾会一点点了。
  1. (progn;改数据库内容
  2.     (setq SQLStatement"UPDATE FP SET NameList='鞋舌面3' WHERE NameList='鞋舌面2'")
  3.     (setq Result (ADOLISP_DoSQL ConnectionObject SQLStatement))
  4.     )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 08:20 , Processed in 0.224081 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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