分享

VB使用ADODB操做数据库

 悟静 2009-07-13
下面是我所掌握的使用ADO对数据库操做的一些常用方法,主要是提供给初学者做为参考,有不对的地方请指正。如有补充不胜荣幸

准备工做
========


来源:www.va1314.com/bc
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 = \"ROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=\" & FileName & \";Jet OLEDBatabase Password=\" & DbPw

\'2)连接Oracle数据库:
\'-------------------
CnStr = \"ROVIDER=MSDAORA.1assword=\" & DbPw & \";User ID=\" & DbUser & \";Data Source=\" & FileName & \"ersist Security Info=True\"

\'其中:
\'PASSWORD:      密码
\'User ID:       用户号
\'Data Source:   数据库名
\'Persist Security Info:
\'Provider:

\'3)连接VF的DBF库:
\'----------------
CnStr = \"ROVIDER=MSDASQL.1ersist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=\" & DbUser & \";SourceDB=\" & FileName &

\";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;\"

\'4)连接SQL的数据库
\'------------------
CnStr = \"ROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=\" & DbUser & \";pwd=\" & DbPw & \";DRIVER=SQL Server;DATABASE=\" & DbName & \";WSID=GQSOFT;SERVER=\" &

DbIP

\'也能够使用这段简易代码 CnStr = \"rovider=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 \'保存写入资料,如果使用只读权限,则不能使用这个方法[Page]
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 \'前往列数

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多