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