Welcome to MICKY's HOMEVB数据库连接recordset open的语法(转)

上一篇 / 下一篇  2012-12-25 17:24:41 / 个人分类:行走在测试的途中

准备工作
========
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=" & DbPw

Conn.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 '返回列数

'***************************        *********************************
游标类型选项

Const adOpenForwardOnly = 0
前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。

Const adOpenKeyset = 1
静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。

Const adOpenDynamic = 2
键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。

Const adOpenStatic = 3                      
动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。

加锁类型选项
Const adLockReadOnly = 1
缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。

Const adLockPessimistic = 2
以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。

Const adLockOptimistic = 3
以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。

Const adLockBatchOptimistic = 4
执行多行批处理更新时使用这种类型

最后,打开一个记录集时,你可以指定一个Options参数。Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。

你可以使用下面的常量作为Options参数:

adCMDTable。被执行的字符串包含一个表的名字。
adCMDText。被执行的字符串包含一个命令文本。
adCMDStoredProc。被执行的字符串包含一个存储过程名。
adCMDUnknown。不指定字符串的内容。(这是缺省值。)

在rs.open后面的参数设定。一般建议:
rs.open sql,conn,0,1 顺序遍历,不需要定位跳转,不需要添加删除更新操作,速度最快
rs.open sql,conn,1,3 遍历,可以进行更新操作,但不能进行定位跳转
rs.open sql,conn,2,3 可以进行所有操作,可以跳转

'************************     ******************************
CursorType:游标类型,定义如下
0(adOpenForwardOnly): 只能在Recordset的记录中向前移动,但速度最快。
         1(adOpenKeyset):可以在Recordset中任意移动,其他用户所做的记录修改可见,但其他用户添加的记录不可见,删除的记录字段值不能被使用。
         2(adOpenDynamic):可以在Recordset中任意移动,其他用户增、删、改的记录都可见,但速度最慢。
        3(adOpenStatic):可以在Recordset中任意移动,其他用户增、删、改的记录都不可见。

LockType:并发控制
0(adLockReadOnly):recordset的记录为只读
1(adLockPessimistic):只要保持Recordset为打开,别人就无法编辑该记录集中的记录.
2(adLockOptimistic):当update recordset中的记录时,将记录加锁
3(adLockBatchOptimistic):以批模式时更新记录时加锁


Options:指定source传递命令的类型
1(adCmdText):SQL语句
2(adCmdTable):数据表的名字
4(adCmdStoredProc):存储过程
8(adCmdUnknown):未知类型


TAG:

 

评分:0

我来说两句

Open Toolbar