2023年7月4日发(作者:)
Visual LISP中使用ADO接口与MS-Access相连
48?内江职业技术学院
NEUlANGZHIYEJ1SHUXUEYUANXUEBA0
NO.3Vo1.3
(2009)
VisualLISP中使用ADO接口与MS--Access相连
徐和林,谢泽学
(内江职业技术学院,四川内江641100)
摘要:本文介绍了在VisualLISP中使用ADO接口与MS—Access相连的基本方法.通过与数据库的连
接,根据用户的选择自动查询和读取所需数据进行工程设计与绘图.利用该方法提高AutoCAD软件进行工程设
计与绘图的效率,有一定的推广使用价值.
关键词:数据库;MS—Access;AutoCAD二次开发;VisualLISP
VisualLISP作为一种AutoCAD二次开发
语言,是一种强有力的开发工具.由于在Auto—
CAD绘图中常用到大量的数据,通过使用ADO
(ActiveXDataObjects)接口与MS—Access相
连不但可以简化程序,而且能方便用户对数据的
调用,用户不必查询大量的工具书浪费时间.
VisualLISP支持COM(ComponentObjectMod-
e1),意思是可以以VBA中的方式建立对象用以
访问它们的方法和属性,所有的AD0功能可以
从VisualLISP访问.
一 ,总体设计思想
使用ADO接口与MS—Access相连实际上
是通过激活COM库,在VisualLISP中通过
ADO功能使用COM函数来达到与MS—Access
数据库的连接,从而实现数据的读取.以便在实
际使用中符合国家标准数据,同时也提高绘图效
率.总体思路如图1所示:
二,ADo接口与MS—Access相连
AutoLISP没有直接使用ADO访问MS—
Access的功能,在AutoLISP使用ADO任何功
能之前,必须首先调用(vl—load—com)函数.此
函数功能是:将VisualLISP扩展功能加载到
AutoLISP中.在使用AD0访问MS—Access
数据库时,首先要通过类型库初始化ADO接口;
再创建ADO对象;然后通过用户给定的要求去
从MS—Access数据库中查询所需数据;最后释
放内存.
(一)通过类型库初始化ADo接口
(defunDbInitADO(/ADO—DLLPath)
l初始化口I
I创建并返回^m对零1
0
}畏据用户爱求-给蠢询变量赋蕾
S-Access数据库
的连接字符串
茌蝴库中壹锎所需的
数据并表示在ist中
'关静l^D0对象并释放内存
图1总体设计思想 (if(nulladom—Append)
(progn
(setqADo—
DLLPath
(strcat(getenv"sys—
temdrive")
"ProgramFilesCom—
monFilesSystemkAdo"))
;;如果查找到类型库…
(if(findfile(strcatAD0一DLL—
Path""));;将其输入
(vlax—Import—Type—Library
:tlb—filename(strcatAD0一
收稿日期:2009—02—26
作者简介:徐和林(1985一),男,四川I巴中人,内江职业技术学院教师.
2009年9月徐和林,谢泽学;VisualUsP中使用ADO接口与MS—Access相连?49?
DLLPath"")
:methods—prefix"adom
:properties--prefix"adop--"
:constants--prefix"adok一"
)
;;找不到时,则通知操作者
(alert(strcat"不能找到以下文件
n"AD0l-DLLPath""))
))))
如果初始不成功.则提示使用者不能找到以
下文件n"ADO_DLLPath"
(二)建并返回ADOConnection对象
(setqDBConnection(vlax—create—object"
tion")) (三)创建并返回ADORecordSet对象
(setqRSObject(vlax—create—object"
set"))
(四)根据用户的选择,写查询变量赋值.
以查询尺寸公差标注时所需的上下偏差为
例:
(cond
((一klx1)(setqsjlbt"selecta9,al0,
al1,a12,a13fromkongac"))
((=klx2)(setqsjlbt"selectb8,b9,
bl0,bl1,b12,b13fromkongac"))
((:klx54)(setqsjlbt"selectza6,za7,
za8,za9,zalO,zallfromzhouvzc"))
((=klx55)(setqsjlbt"selectzb7,zb8,
zb9,zbl0,zbl1fromzhouvzc"))
((=klx56)(setqsjlbt"selectzc7,zc8,
zc9,zcl0,zcl1fromzhouvzc"))
);cond
(vlax—invoke—methodDBConnection"
open"(DbConnect—MSAccessl"C:/bysj/gcbz.
mdb","admin"""adok—adConnectUnspeci—
fled);vlax—invoke—method调用指定的Ac—
tiveX方法
(VIax—invoke--methodRSObject"open"
sjlbtDBConnectionnilniladok—adcmdtext)
(五)生成MS—Access或MS—SQLServer
数据库的连接字符串
(DbConnect—MSAccessl"D:bysj
") DbConnect—MSAccessl函数为自定义函数,
其具体内容如下:
;;;****************
;;;使用ODBC(不需要DSN)连接MS—
Access数据库
;;;示例:(DbConnect—MSAccessl"d:/
dbfiles/")
;;;****************
(defunDbConnect—MSAccessl(dbFile)
(strcat
"Provider=MSDASQL;"
"Driver—MicrosoftAccessDriver
(*.mdb));"
"DBQ一"dbFile
)
)
(六)在数据库中查询所需的数据,并将数据
读取出来
调用方式:(searchrsobject)
Search函数也是自定义函数.内容如下:
(defunSearch(RSObject/FieldsObject
FieldCountFieldListReturnValue)
(defungetlst(var)
(setqlstnil)
(setqn(1engthvar)iO)
(while(<in)
(setq1st(append1st(1ist(vlax—va—
riant—value(nthivar)))))
(setqi(1+i))
) 1st
)
(setqFieldsObject(DbRsFields
RSObject);;将字段作为对象
FieldCount(DbRsFieldCountField—
sObject);;取得列的数量
FieldList(DbGetFieldsFieldsOb—
jectFieldCount);;取得列表中所有列的名
称
ReturnValue(1ist(reverseField—
List)));setq
50内江职业技术学院第3卷第3期
(setq1st(vlax—safearray一>list
(vlax—variant—value(dbrsgetrowsrsob—
iect)))).
(setq1st(mapcargetlstlst))
(setq1st(mapcar(1ambda(varlvar2)
(append(1istvar1)(1istvar2)))(carreturnval—
ue)lst))
(printlst)
)
(七)关闭ADoRecordSet对象并将内存释
放出来
(DbCloseRecordsetrsobject)
(defunDbCloseRecordset(rsObject)
(vlax—Invoke—MethodrsObject
"Close")
(MxReleasers0bject)
);defun (八)关闭ADOConnection对象并将内存
释放出来
(DbCloseConnectiondbconnection)
(defunDbCloseConnection(dbConnObject)
(vlax—Invoke—MethoddbCon—
nObject"Close")
(MxReleasedbConn0bject)
)
三,结论
在企业使用AutoCAD的过程中,二次开发
的使用是取得实效的关键环节.而在二次开发中
数据库功能的使用是二次开发及其程序提高效率
的重要手段.MS—ACCESS在数据处理方面是
其它软件不可比拟的,它提供用户多种的数据类
型和不同的查询方式.而且在数据的加密方面很
完善.这样不但提高了绘图效率,而且让数据的
调用更为准确和直观,提高绘图质量.
参考文献:
E13符纯华.计算机辅助设计EM].四JIl:西南交通大学
出版社,2006.
E23[美]ScottMcFarlane罗阿理,卢迪等译.AUTOCAD
数据库连接EM].北京:机械工业出版社,2001.
[3]汪琪美.Autolisp实用程序EM].北京:人民邮电出
版社,1998.
E43郭剑锋,陈彬,王宁.用Visuallisp开发AUTO—
CAD2000应用程序[M].北京:人民邮电出版社,
2000.
[5]黄涛.Access2003速成培训教程.北京:中国电力出
版社,2004. E6]李学志.VisualLISP程序设计(AutoCAD2006)
EM].北京:清华大学出版社,2006.
[73明经通道:.
ADOinterfacesusingvisualLispwithMs.-Access.?Linked
XUHe—lin,XlEze—xue
(Neijiangvocational&technicalcollege,Sichuan,Neijiang,641100)
Abstract:ThispaperintroducesthebasicmethodwhichusedADOconnectswithMS-AccessbyVisualLISP?
Thr0ughthedatabaseconnection,NeedsthedataaccordingtOuser'schoiceautomaticinquiryandthereadtOcarryonthe
engineeringdesignandthecartography,usedthismethodtOenhancetheAUTOCADsoftwaretOcarryontheengineering
designandthecartographyefficiency,hadcertainpromotionandtheusevalue.
Keywords:Database;MS-Access;Re-developmentoftheAutoCAD;VisualLISP
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688435207a137409.html
评论列表(0条)