在VLISP中使用数据库(二)简单的语法介绍
<p>VLISP连接使用数据库并没有那么可怕。</p><p>虽然ADO对象模型中包含了好几个对象,但对于数据库的普通操作,我们只需要用到Connection、Recordset、Record、Fields这四个对象,而且以前三个对象为多,而Fields如果不是为了得到字段名的话,也不需要去看。</p><p>从结构上来说,Connection为根对象,然后Recordset为子级对象,而Record和Fields为孙级对象。他们之间就是一种上下关系。</p><p>Connection代表整个数据库连接,Recordset代表记录集,也就是我们经常说的查询到的数据库表内容,Record代表单个记录,Fields代表查询到的记录集的所有字段。</p><p>说明一下,记录是数据表中的一行内容,而字段是数据库中的一列内容。这样大家会比较直观。</p><p>就拿上一节的程序来解释一下。</p><p>首先我们需要进行初始化,也就是引用ADO控件并让它连接到我们指定的数据库中,在这个步骤中,就是为Connection设置好连接,因为下来的所有工作都是基于它来进行的:</p><p> (setq dbfile (findfile "mc-sample.mdb")) ;设置数据库名称及路径<br/> (Setq conn(vlax-create-object "ADODB.Connection")) ;引用ADO控件<br/> (setq connstring (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" dbfile)) ;设置数据库连接字符串<br/> (vlax-invoke-method conn "open" connstring "" "" -1) ;打开数据库连接</p><p>所以,如果需要进行数据库的操作,以上四行代码是必不可少的。</p><p>网上有些相关的VLISP连接数据库的程序写得太复杂了,我觉得并不需要为数据库连接专门进行注册,因为注册了,最后使用的也就那么几个对象和函数,注册后的代码更加难懂,所以搞得大家都怕了,呵呵。</p><p>数据库连接完成后,我们就需要对数据库进行操作了,这种操作包括了数据库查询,数据库更新、添加记录、删除记录等。</p><p>上一节我使用的是Execute方法。</p><p>其实数据库的操作常用的不外乎两种方法,一种是直接使用Execute方法,另外一种是使用RecordSet.Open方法。对于简单的操作,我们可使用Execute方法,而复杂一些的我们可以用RecordSet.Open方法。这一节我只介绍Execute方法,以后会给大家介绍另外的那个方法。</p><p> (setq sql "select ,,,, from order by ") ;设置查询SQL<br/> (setq rs (vlax-invoke-method conn "Execute" sql "" -1)) ;执行数据库查询</p><p>在这段程序中,使用的就是Connection.Execute方法,它是否返回结果要看它执行的SQL。所返回的结果就是Recordset对象。也就是说它返回的结果我们可以用处理Recordset的方法来处理。</p><p>在Execute方法中,只有参数sql是指定的SQL外,其它的两个参数都不需要修改。</p><p>对于这个方法,并不需要进行多的介绍,而需要介绍的就是SQL的使用方法了。因为通过不同的SQL,我们才可以对数据库进行查询、修改、新增、删除等操作。</p><p>一.数据库查询:</p><p>select [字段1],[字段2],[字段3]... from [数据库名] where 字段1=条件1 and 字段2=条件2 order by 字段1</p><p>说明:<br/>1.需要返回使用的字段需要显示在Select 和from之间,并用“,”隔开,如果需要返回所有的字段,则可使用“*”代替。用Select Top XX 可设置返回的XX行记录数,象select top 10 则只返回10行,如果不设置,则返回查询到的全部记录。<br/>2.where后面设置的是查询条件,条件可以用and or或()来组合。如where x>5 and y>2指的就是同时需要满足那两个条件。再复杂一些的条件就有in(),like等。如x in (1,2,3)指的就是X必须在括号内的三个值中的任意一个,如username like %mc% 则表示username中必须含有mc字符。<br/>3.order by设置的是数据的排列方式,排列可按字段进行正排或倒排,不同字段间可使用“,”分隔。如果是倒排则在字段后面加一个 desc来设置倒排。<br/>4.为了防止数据表名或字段名与SQL的保留关键字相同,可使用[]把字段名和表名括起来。</p><p>例子:select top 10 from where >50 order by <br/>select * ,,,, from where in (0,30,60,90) order by </p><p>消化一下会很简单的。</p><p>二.数据库更新:</p><p>Update [数据表名] Set 字段1=值1, 字段2=值2, ... Where 条件</p><p>说明:这就是按照Where 中的条件更新指定的数据表内容,符合条件的记录都会被更新。<br/>如果字段为字符型,则需要将值的前后加上单引号,如'值1','值2','值3',而且需要将值中的单个单引号替换为两个单引号,以防止插入记录时出错。</p><p>例子:Update linetable set angle=45 where angle=30</p><p>象这个例子就会把数据表linetable中的角度为30的值全部更改为值45</p><p>三.数据库添加记录:</p><p>Insert into [数据表名] (字段1,字段2,字段3,...) values (值1,值2,值3,...)</p><p>说明:如果字段为字符型,则需要将值的前后加上单引号,如'值1','值2','值3',而且需要将值中的单个单引号替换为两个单引号,以防止插入记录时出错。</p><p>四.删除记录:</p><p>Delete from [数据表名] where 条件</p><p>说明,Where后面的条件与查询的条件语法相同。这样符合条件的数据记录将会被删除。</p> 重头学起,慢慢来 <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">看來又要重看<font face="Times New Roman">ACCESS VBA</font>了<font face="Times New Roman">!VLISP建立資料庫?各資料庫的關聯要如何寫?兩料料庫的比較等.......</font></p> <p>数据库的联接已经成为工作中的一部分,</p><p>希望MCCAD有时间可以开课讲解一下</p> 受益匪浅 <p>顶!</p><p>希望斑竹循序渐进的把所有的LISP操作ACCESS数据库串烧起来!</p><p></p> mccad数据库连接
页:
[1]