﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-心随吾动</title><link>http://www.blogjava.net/winar2008/</link><description>你的认可，我的期望!</description><language>zh-cn</language><lastBuildDate>Tue, 16 Jun 2026 06:14:29 GMT</lastBuildDate><pubDate>Tue, 16 Jun 2026 06:14:29 GMT</pubDate><ttl>60</ttl><item><title>VB使用ADODB操作数据库的常用方法</title><link>http://www.blogjava.net/winar2008/archive/2007/08/26/139572.html</link><dc:creator>winar</dc:creator><author>winar</author><pubDate>Sun, 26 Aug 2007 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/winar2008/archive/2007/08/26/139572.html</guid><wfw:comment>http://www.blogjava.net/winar2008/comments/139572.html</wfw:comment><comments>http://www.blogjava.net/winar2008/archive/2007/08/26/139572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/winar2008/comments/commentRss/139572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/winar2008/services/trackbacks/139572.html</trackback:ping><description><![CDATA[<p>ADO常用方法<br>下面是我所<a href="http://action.vogate.com/click/click.php?ads_id=305&amp;site_id=6235007045040942&amp;click=1&amp;url=http%3A//campaign.nokia.com.cn/e50/cn/index.html&amp;v=0&amp;k=%u638C%u63E1&amp;s=http%3A//www.mxtech.cn/article/dev/VB-ShiYong-ADODB-CaoZuoShuJuKuDeChangYongFangFa.htm&amp;rn=212539">掌握</a>的使用ADO对数据库操作的一些常用方法，主要是提供给初学者作为参考，有不对的地方请指正。如有补充不胜荣幸<br>准备工作<br>========<br>Dim conn As New&nbsp;&nbsp;ADODB.Connection&nbsp;&nbsp;'创建一个 Connection 实例，在这里使用New等于将Dim和Set合并为一段<a href="http://action.vogate.com/click/click.php?ads_id=3821&amp;site_id=6235007045040942&amp;click=1&amp;url=http%3A//www.lolo.com.cn/&amp;v=0&amp;k=%u4EE3%u7801&amp;s=http%3A//www.mxtech.cn/article/dev/VB-ShiYong-ADODB-CaoZuoShuJuKuDeChangYongFangFa.htm&amp;rn=734636">代码</a>执行<br>Dim rs As ADODB.Recordset&nbsp;&nbsp;&nbsp;&nbsp;'创建一个 Recordset 实例，不使用New 是因为，经常需要重复使用Set，因此没必要在这里使用<br>Dim CnStr As String, Sql As String&nbsp;&nbsp;'创建两个字符串变量分别存放两个集合的SQL语句代码段<br>1、装载数据库(不属于Recordset集合)<br>=============<br>Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$<br>'以上5个字符串变量分别<a href="http://action.vogate.com/click/click.php?ads_id=3845&amp;site_id=6235007045040942&amp;click=1&amp;url=http%3A//www.pepsi.com.cn/&amp;v=0&amp;k=%u8868%u793A&amp;s=http%3A//www.mxtech.cn/article/dev/VB-ShiYong-ADODB-CaoZuoShuJuKuDeChangYongFangFa.htm&amp;rn=205256">表示</a>文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员<a href="http://action.vogate.com/click/click.php?ads_id=382&amp;site_id=6235007045040942&amp;click=1&amp;url=http%3A//www.trio-design.com/testing/meadjohnson_new&amp;v=0&amp;k=%u5BC6%u7801&amp;s=http%3A//www.mxtech.cn/article/dev/VB-ShiYong-ADODB-CaoZuoShuJuKuDeChangYongFangFa.htm&amp;rn=559285">密码</a><br>FileName = App.Path &amp; "\'数据库名'"<br>DbIp = "数据库地址"<br>DbName = "数据库名"<br>DbUser = "数据操作员用户名"<br>DbPw = "操作员密码"<br>'以上变量根据数据库类型的不同而不同，有可能只需要1至两个变量<br>'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<br>'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"<br>'其中:<br>'PASSWORD:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密码<br>'User ID:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户号<br>'Data Source:&nbsp;&nbsp;&nbsp;数据库名<br>'Persist Security Info:<br>'Provider:<br>'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; <br>";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"<br>'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; <br>DbIP<br>'也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" &amp; DbIp &amp; ";DATABASE=" &amp; DbName &amp; ";UID=" &amp; DbUser &amp; ";pwd=" &amp; DbPw<br>Conn.Open cnstr '使用 Connection 集合的 Open 方法 与数据库建立连接<br>2、Recordset集合的常用方法<br>==========================<br>'1)打开一个表<br>'------------<br>Sql = "select * from 表名" 'SQL查询语句<br>Set rs = New ADODB.Recordset '新建一个实例<br>rs.Open Sql, conn '使用 Open 方法打开数据库中的一个表<br>'注意，这种打开方式只能使用 rs.MoveNext （即，向后移动行坐标）而不能像其他方向，并且不能修改数据内容<br>'<br>'rs.Open Sql, conn，1 '虽然只加了个“1”，但这种方法可以向任何方向移动行坐标。<br>'<br>'以下参数代表了这个可选值的含义<br>'0 = adOpenForwardOnly （默认值）打开仅向前类型游标。 <br>'1 = adOpenKeyset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开键集类型游标。 <br>'2 = adOpenDynamic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开动态类型游标。 <br>'3 = adOpenStatic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打开静态类型游标。<br>'<br>'虽然使用以上方法可以可以实现行坐标（游标）的任意移动，但是仍然<a href="http://action.vogate.com/click/click.php?ads_id=688&amp;site_id=6235007045040942&amp;click=1&amp;url=http%3A//www-900.ibm.com/lenovoinfo/cn/promotion/t60/index.shtml&amp;v=0&amp;k=%u65E0%u6CD5&amp;s=http%3A//www.mxtech.cn/article/dev/VB-ShiYong-ADODB-CaoZuoShuJuKuDeChangYongFangFa.htm&amp;rn=65300">无法</a>写入数据。因此需要进一步的对Open 方法进行完善<br>'rs.Open Sql, conn, 1, 3&nbsp;&nbsp;'后面的3是确定读写权限的<br>'以下参数代表了这个可选值的含义<br>'1 = adLockReadOnly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（默认值）只读 — 不能改变数据。 <br>'2 = adLockPessimistic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保守式锁定（逐个） — 在编辑时立即锁定数据源的记录。 <br>'3 = adLockOptimistic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开放式锁定（逐个） — 只在调用 Update 方法时才锁定记录。 <br>'4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式（与立即更新模式相对）。<br>'<br>'2)读写数据<br>'----------<br>'增加一行记录并对新记录的内容进行修改并保存可以如下写法<br>rs.AddNew '增加一行记录<br>rs("...")="..."&nbsp;&nbsp;&nbsp;&nbsp;'数据读写操作<br>...<br>rs.UpDate '保存写入资料，如果使用只读权限，则不能使用这个方法<br>rs.Close&nbsp;&nbsp;'这个方法用来关闭你所代开的表，如果不使用这个方法也可以，但是数据库仍然认为你在对标进行锁定，可造成数据库负担过重<br>2、对数据进行筛选和排序<br>=======================<br>Sql = "select * from 表名" 'SQL查询语句<br>'以上为打开一个表的所有内容<br>Sql = "select top 50 * from 表名" 'SQL查询语句<br>'以上为只打开前50行的记录<br>Sql = "select top 50 列名1,列名2,列名5 from 表名" 'SQL查询语句<br>'以上为只打开前50行的记录，并且只打开第1、2、5列数据<br>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;&nbsp;零个或多个字符 <br>'#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任何单一数字（0 — 9） <br>'[charlist]&nbsp;&nbsp;&nbsp;&nbsp;任何在字符表中的单一字符 <br>'[!charlist]&nbsp;&nbsp;&nbsp;任何不在字符表中的单一字符 <br>'注：根据数据库的不同?、_和*、%的应用有所差别，比如SQL只使用% 和 _ 分别代表多个字符和单一字符<br>Sql = "select * from 表名 where 列名1='" &amp; 字段 &amp; "' ORDER BY 字段1 ASC" '对查询结果进行升序排列<br>Sql = "select * from 表名 where 列名1='" &amp; 字段 &amp; "' ORDER BY 字段1 DESC"&nbsp;&nbsp;'对查询结果进行降序排列<br>Sql = "select * from 表名 where 列名1='" &amp; 字段 &amp; "' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC"&nbsp;&nbsp;'对查询结果进行多维降序排列（速度奇慢，不推荐使用）<br>3、Recordset集合的常用属性方法<br>==============================<br>rs.BOF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'是否游标在最上边<br>rs.EOF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'是否游标在最下边<br>rs.RecordCount&nbsp;&nbsp;&nbsp;&nbsp;'记录集的行数（如果使用像前类型的游标，可能返回不准确）<br>rs.AddNew&nbsp;&nbsp;&nbsp;&nbsp;'新建一行记录<br>rs.Update&nbsp;&nbsp;&nbsp;&nbsp;'保存当前行被修改的记录<br>rs.Delete&nbsp;&nbsp;&nbsp;&nbsp;'删除当前行<br>rs.Close&nbsp;&nbsp;&nbsp;&nbsp;'关闭记录集<br>4、Fields集合的一些属性的解释<br>=============================<br>'以下为简写，正常情况需要rs.Fileds.。。。但是Fields属于Recordset的一个默认集合，因此可以省略<br>rs()&nbsp;&nbsp;'括号内可以是列名也可以是列的序号例如：rs("姓名")、rs(3) 都是是可以的<br>rs(3).Name&nbsp;&nbsp;'返回列名<br>rs(3).Type&nbsp;&nbsp;'返回列的类型<br>rs(3).Value '返回当前行的值<br>rs.Fields.Count '返回列数</p><img src ="http://www.blogjava.net/winar2008/aggbug/139572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/winar2008/" target="_blank">winar</a> 2007-08-26 19:49 <a href="http://www.blogjava.net/winar2008/archive/2007/08/26/139572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>