ForYang 发表于 2021-4-13 10:11

数据库连接问题

Automation 错误。 未发现数据源名称并且未指定默认驱动程序Description       未发现数据源名称并且未指定默认驱动程序

请教各位大神,lisp怎么连接数据库?如何配置

ForYang 发表于 2021-4-13 11:22

  64位机器上ODBC的操作方法与32位机器是不一样的,如果直接从控制面板上-管理员工具-ODBC进去的话会发现User DSN以及System DSN里面都为空,ADD的时候连ODBC Driver都找不到,正确的方法应该是从C:\WINDOWS\SysWOW64进入后,找到odbcad32.exe,打开之后就能看到已有的System DSN及已安装的ODBC Driver.(为什么要命名为odbcad32我实在是不太理解).

      接下来要说说System DSN的移除,一般情况下是能正常移除的,可昨天机器突然抽风,我需要用的那个DSN无论如何都连不上,竟然还删不掉,于是只好从注册表里删了。按理说注册表的位置应该是:

      HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources

      然而如果你直接从run里属于regedit是看不见这个目录的,原因还是因为是64位机,运行C:\WINDOWS\SysWOW64里的regedit.exe就可以找到 并删除了(这次不是regedit32了).

     不是太懂Windows这样设计和命名的原因是什么,不过问题解决了就行了
————————————————
版权声明:本文为CSDN博主「wander754085」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wander754085/article/details/8128547/

ForYang 发表于 2021-4-13 14:15

本帖最后由 ForYang 于 2021-4-13 14:17 编辑

;;;函数名: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)
)

Linxian1028 发表于 2022-9-24 10:40

有vbnet连接数据库的源码吗?

dcl1214 发表于 2022-11-2 00:23

http://bbs.xdcad.net/thread-727283-1-1.html
页: [1]
查看完整版本: 数据库连接问题