数据库连接问题
Automation 错误。 未发现数据源名称并且未指定默认驱动程序Description 未发现数据源名称并且未指定默认驱动程序请教各位大神,lisp怎么连接数据库?如何配置
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: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)
) 有vbnet连接数据库的源码吗? http://bbs.xdcad.net/thread-727283-1-1.html
页:
[1]