VisualLISP中使用ADO接口与MS-Access相连

VisualLISP中使用ADO接口与MS-Access相连

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信