VB使⽤ADODB操作数据库的常⽤⽅法
ADO常⽤⽅法
下⾯是我所掌握的使⽤ADO对数据库操作的⼀些常⽤⽅法,主要是提供给初学者作为参考,有不对的地⽅请指正。如有补充不胜荣幸准备⼯作========
Dim conn As New ADODB.Connection '创建⼀个 Connection 实例,在这⾥使⽤New等于将Dim和Set合并为⼀段代码执⾏Dim rs As ADODB.Recordset '创建⼀个 Recordset 实例,不使⽤New 是因为,经常需要重复使⽤Set,因此没必要在这⾥使⽤Dim CnStr As String, Sql As String '创建两个字符串变量分别存放两个集合的SQL语句代码段
1、装载数据库(不属于Recordset集合)=============
Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$
'以上5个字符串变量分别表⽰⽂件路径和⽂件名、数据库地址、数据库名、数据操作员⽤户名、操作员密码FileName = App.Path & \"\\'数据库名'\"DbIp = \"数据库地址\"DbName = \"数据库名\"
DbUser = \"数据操作员⽤户名\"DbPw = \"操作员密码\"
'以上变量根据数据库类型的不同⽽不同,有可能只需要1⾄两个变量
'1)连接Access数据库:'-------------------CnStr = \"PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=\" & FileName & \";Jet OLEDB:Database Password=\" & DbPw'2)连接Oracle数据库:'-------------------CnStr = \"PROVIDER=MSDAORA.1;Password=\" & DbPw & \";User ID=\" & DbUser & \";Data Source=\" & FileName & \";Persist Security Info=True\"'其中:
'PASSWORD: 密码'User ID: ⽤户号
'Data Source: 数据库名'Persist Security Info:'Provider:
'3)连接VF的DBF库:'----------------CnStr = \"PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=\" & DbUser & \";SourceDB=\" & FileName & \";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;\"
'4)连接SQL的数据库'------------------CnStr = \"PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=\" & DbUser & \";pwd=\" & DbPw & \";DRIVER=SQL Server;DATABASE=\" & DbName & \";WSID=GQSOFT;SERVER=DbIP
'也可以使⽤这段简易代码 CnStr = \"Provider=SQLOLEDB;Data Source=\" & DbIp & \";DATABASE=\" & DbName & \";UID=\" & DbUser & \";pwd=\" & DbPwConn.Open cnstr '使⽤ Connection 集合的 Open ⽅法 与数据库建⽴连接2、Recordset集合的常⽤⽅法=========================='1)打开⼀个表'------------Sql = \"select * from 表名\" 'SQL查询语句
Set rs = New ADODB.Recordset '新建⼀个实例
rs.Open Sql, conn '使⽤ Open ⽅法打开数据库中的⼀个表
'注意,这种打开⽅式只能使⽤ rs.MoveNext (即,向后移动⾏坐标)⽽不能像其他⽅向,并且不能修改数据内容'
'rs.Open Sql, conn,1 '虽然只加了个“1”,但这种⽅法可以向任何⽅向移动⾏坐标。'
'以下参数代表了这个可选值的含义
'0 = adOpenForwardOnly (默认值)打开仅向前类型游标。 '1 = adOpenKeyset 打开键集类型游标。 '2 = adOpenDynamic 打开动态类型游标。 '3 = adOpenStatic 打开静态类型游标。'
'虽然使⽤以上⽅法可以可以实现⾏坐标(游标)的任意移动,但是仍然⽆法写⼊数据。因此需要进⼀步的对Open ⽅法进⾏完善'rs.Open Sql, conn, 1, 3 '后⾯的3是确定读写权限的
'以下参数代表了这个可选值的含义
'1 = adLockReadOnly (默认值)只读 — 不能改变数据。
'2 = adLockPessimistic 保守式锁定(逐个) — 在编辑时⽴即锁定数据源的记录。 '3 = adLockOptimistic 开放式锁定(逐个) — 只在调⽤ Update ⽅法时才锁定记录。 '4 = adLockBatchOptimistic 开放式批更新 — ⽤于批更新模式(与⽴即更新模式相对)。'
'2)读写数据'----------'增加⼀⾏记录并对新记录的内容进⾏修改并保存可以如下写法rs.AddNew '增加⼀⾏记录rs(\"...\")=\"...\" '数据读写操作
...
rs.UpDate '保存写⼊资料,如果使⽤只读权限,则不能使⽤这个⽅法
rs.Close '这个⽅法⽤来关闭你所代开的表,如果不使⽤这个⽅法也可以,但是数据库仍然认为你在对标进⾏锁定,可造成数据库负担过重2、对数据进⾏筛选和排序=======================
Sql = \"select * from 表名\" 'SQL查询语句'以上为打开⼀个表的所有内容
Sql = \"select top 50 * from 表名\" 'SQL查询语句'以上为只打开前50⾏的记录
Sql = \"select top 50 列名1,列名2,列名5 from 表名\" 'SQL查询语句'以上为只打开前50⾏的记录,并且只打开第1、2、5列数据
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"'\" 'SQL查询语句
'以上为⼀个简单的筛选,表⽰打开的内容必须符合[列名1='\" & 字段 & \"'\"]的内容'需要注意的是,数据库列的类型必须匹配,⽐如字符串类型需要以单引号括起'⽽数字类型则不能⽤单引号括起
'另外SQL语句还⽀持通配符,例如 列名1 like '%\" & 字段 & \"%'\" 表⽰包含[字段]'在表达式中的匹配
'? _(下划线) 任何单⼀字符 '* or % 零个或多个字符
'# 任何单⼀数字(0 — 9)
'[charlist] 任何在字符表中的单⼀字符 '[!charlist] 任何不在字符表中的单⼀字符
'注:根据数据库的不同?、_和*、%的应⽤有所差别,⽐如SQL只使⽤% 和 _ 分别代表多个字符和单⼀字符
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 ASC\" '对查询结果进⾏升序排列Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 DESC\" '对查询结果进⾏降序排列
Sql = \"select * from 表名 where 列名1='\" & 字段 & \"' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC\" '对查询结果进⾏降序排列(速度奇慢,不推荐使⽤)3、Recordset集合的常⽤属性⽅法==============================rs.BOF '是否游标在最上边rs.EOF '是否游标在最下边
rs.RecordCount '记录集的⾏数(如果使⽤像前类型的游标,可能返回不准确)rs.AddNew '新建⼀⾏记录
rs.Update '保存当前⾏被修改的记录rs.Delete '删除当前⾏rs.Close '关闭记录集
4、Fields集合的⼀些属性的解释
=============================
'以下为简写,正常情况需要rs.Fileds.。。。但是Fields属于Recordset的⼀个默认集合,因此可以省略rs() '括号内可以是列名也可以是列的序号例如:rs(\"姓名\")、rs(3) 都是是可以的rs(3).Name '返回列名rs(3).Type '返回列的类型rs(3).Value '返回当前⾏的值rs.Fields.Count '返回列数