明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3439|回复: 6

在VLISP中使用数据库(二)简单的语法介绍

  [复制链接]
发表于 2007-1-16 09:49:00 | 显示全部楼层 |阅读模式

VLISP连接使用数据库并没有那么可怕。

虽然ADO对象模型中包含了好几个对象,但对于数据库的普通操作,我们只需要用到Connection、Recordset、Record、Fields这四个对象,而且以前三个对象为多,而Fields如果不是为了得到字段名的话,也不需要去看。

从结构上来说,Connection为根对象,然后Recordset为子级对象,而Record和Fields为孙级对象。他们之间就是一种上下关系。

Connection代表整个数据库连接,Recordset代表记录集,也就是我们经常说的查询到的数据库表内容,Record代表单个记录,Fields代表查询到的记录集的所有字段。

说明一下,记录是数据表中的一行内容,而字段是数据库中的一列内容。这样大家会比较直观。

就拿上一节的程序来解释一下。

首先我们需要进行初始化,也就是引用ADO控件并让它连接到我们指定的数据库中,在这个步骤中,就是为Connection设置好连接,因为下来的所有工作都是基于它来进行的:

  (setq dbfile (findfile "mc-sample.mdb")) ;设置数据库名称及路径
  (Setq conn(vlax-create-object "ADODB.Connection")) ;引用ADO控件
  (setq connstring (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" dbfile)) ;设置数据库连接字符串
  (vlax-invoke-method conn "open" connstring "" "" -1) ;打开数据库连接

所以,如果需要进行数据库的操作,以上四行代码是必不可少的。

网上有些相关的VLISP连接数据库的程序写得太复杂了,我觉得并不需要为数据库连接专门进行注册,因为注册了,最后使用的也就那么几个对象和函数,注册后的代码更加难懂,所以搞得大家都怕了,呵呵。

数据库连接完成后,我们就需要对数据库进行操作了,这种操作包括了数据库查询,数据库更新、添加记录、删除记录等。

上一节我使用的是Execute方法。

其实数据库的操作常用的不外乎两种方法,一种是直接使用Execute方法,另外一种是使用RecordSet.Open方法。对于简单的操作,我们可使用Execute方法,而复杂一些的我们可以用RecordSet.Open方法。这一节我只介绍Execute方法,以后会给大家介绍另外的那个方法。

  (setq sql "select [id],[x],[y],[z],[r] from [circle] order by [id]") ;设置查询SQL
  (setq rs (vlax-invoke-method conn "Execute" sql "" -1)) ;执行数据库查询

在这段程序中,使用的就是Connection.Execute方法,它是否返回结果要看它执行的SQL。所返回的结果就是Recordset对象。也就是说它返回的结果我们可以用处理Recordset的方法来处理。

在Execute方法中,只有参数sql是指定的SQL外,其它的两个参数都不需要修改。

对于这个方法,并不需要进行多的介绍,而需要介绍的就是SQL的使用方法了。因为通过不同的SQL,我们才可以对数据库进行查询、修改、新增、删除等操作。

一.数据库查询:

select [字段1],[字段2],[字段3]... from [数据库名] where 字段1=条件1 and 字段2=条件2 order by 字段1

说明:
1.需要返回使用的字段需要显示在Select 和from之间,并用“,”隔开,如果需要返回所有的字段,则可使用“*”代替。用Select Top XX 可设置返回的XX行记录数,象select top 10 则只返回10行,如果不设置,则返回查询到的全部记录。
2.where后面设置的是查询条件,条件可以用and or或()来组合。如where x>5 and y>2指的就是同时需要满足那两个条件。再复杂一些的条件就有in(),like等。如x in (1,2,3)指的就是X必须在括号内的三个值中的任意一个,如username like %mc% 则表示username中必须含有mc字符。
3.order by设置的是数据的排列方式,排列可按字段进行正排或倒排,不同字段间可使用“,”分隔。如果是倒排则在字段后面加一个 desc来设置倒排。
4.为了防止数据表名或字段名与SQL的保留关键字相同,可使用[]把字段名和表名括起来。

例子:select top 10 from [linetable] where [length]>50 order by [length]
select * [length],[startpntx],[startpnty],[startpntz],[angle] from [linetable] where [angle] in (0,30,60,90) order by [angle]

消化一下会很简单的。

二.数据库更新:

Update [数据表名] Set 字段1=值1, 字段2=值2, ... Where 条件

说明:这就是按照Where 中的条件更新指定的数据表内容,符合条件的记录都会被更新。
如果字段为字符型,则需要将值的前后加上单引号,如'值1','值2','值3',而且需要将值中的单个单引号替换为两个单引号,以防止插入记录时出错。

例子:Update linetable set angle=45 where angle=30

象这个例子就会把数据表linetable中的角度为30的值全部更改为值45

三.数据库添加记录:

Insert into [数据表名] (字段1,字段2,字段3,...) values (值1,值2,值3,...)

说明:如果字段为字符型,则需要将值的前后加上单引号,如'值1','值2','值3',而且需要将值中的单个单引号替换为两个单引号,以防止插入记录时出错。

四.删除记录:

Delete from [数据表名] where 条件

说明,Where后面的条件与查询的条件语法相同。这样符合条件的数据记录将会被删除。

评分

参与人数 1威望 +1 明经币 +2 金钱 +5 贡献 +5 激情 +5 收起 理由
龙龙仔 + 1 + 2 + 5 + 5 + 5 【好评】好文章 再來再來一些重口味的,如

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-10-14 15:32:15 | 显示全部楼层
重头学起,慢慢来
回复 支持 1 反对 0

使用道具 举报

发表于 2007-1-16 12:40:00 | 显示全部楼层

看來又要重看ACCESS VBA!VLISP建立資料庫?各資料庫的關聯要如何寫?兩料料庫的比較等.......

发表于 2007-1-16 14:15:00 | 显示全部楼层

数据库的联接已经成为工作中的一部分,

希望MCCAD有时间可以开课讲解一下

发表于 2007-1-16 14:49:00 | 显示全部楼层
受益匪浅
发表于 2007-1-16 21:46:00 | 显示全部楼层

顶!

希望斑竹循序渐进的把所有的LISP操作ACCESS数据库串烧起来!

发表于 2013-5-28 15:23:12 | 显示全部楼层
mccad数据库连接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 16:29 , Processed in 0.168141 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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