阿杰 发表于 2007-1-26 08:24:36

VB使用ADODB操作数据库的常用方

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

马大哈 发表于 2007-1-26 21:13:56

数据库是我的大弱项之一............得好好补补

feixiang 发表于 2008-9-20 23:24:18

啊杰讲的很详细啊
页: [1]
查看完整版本: VB使用ADODB操作数据库的常用方