VB数据库连接recordsetopen的语法2009-04-1313:51ADO常用方法下面是我所掌握的使用ADO对数据库操作的一些常用方法,主要是提供给初学者作为参考,有不对的地方请指正。如有补充不胜荣幸准备工作========DimconnAsNewADODB.Connection'创建一个Connection实例,在这里使用New等于将Dim和Set合并为一段代码执行DimrsAsADODB.Recordset'创建一个Recordset实例,不使用New是因为,经常需要重复使用Set,因此没必要在这里使用DimCnStrAsString,SqlAsString'创建两个字符串变量分别存放两个集合的SQL语句代码段1、装载数据库(不属于Recordset集合)=============DimFileNamw$,DbIp$,DbName$,DbUser$,DbPw$'以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码FileName=App.Path&\'数据库名'DbIp=数据库地址DbName=数据库名DbUser=数据操作员用户名DbPw=操作员密码'以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量'1)连接Access数据库:'-------------------CnStr=PROVIDER=microsoft.jet.oledb.3.51;persistsecurityinfo=false;datasource=&FileName&;JetOLEDB:DatabasePassword=&DbPw'2)连接Oracle数据库:'-------------------CnStr=PROVIDER=MSDAORA.1;Password=&DbPw&;UserID=&DbUser&;DataSource=&FileName&;PersistSecurityInfo=True'其中:'PASSWORD:密码'UserID:用户号'DataSource:数据库名'PersistSecurityInfo:'Provider:'3)连接VF的DBF库:'----------------CnStr=PROVIDER=MSDASQL.1;PersistSecurityInfo=False;Driver={MicrosoftVisualFoxProDriver};UID=&DbUser&;SourceDB=&FileName&;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;'4)连接SQL的数据库'------------------CnStr=PROVIDER=MSDataShape;DataPROVIDER=MSDASQL;uid=&DbUser&;pwd=&DbPw&;DRIVER=SQLServer;DATABASE=&DbName&;WSID=GQSOFT;SERVER=&DbIP'也可以使用这段简易代码CnStr=Provider=SQLOLEDB;DataSource=&DbIp&;DATABASE=&DbName&;UID=&DbUser&;pwd=&DbPwConn.Opencnstr'使用Connection集合的Open方法与数据库建立连接2、Recordset集合的常用方法=========================='1)打开一个表'------------Sql=select*from表名'SQL查询语句Setrs=NewADODB.Recordset'新建一个实例rs.OpenSql,conn'使用Open方法打开数据库中的一个表'注意,这种打开方式只能使用rs.MoveNext(即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容''rs.OpenSql,conn,1'虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。''以下参数代表了这个可选值的含义'0=adOpenForwardOnly(默认值)打开仅向前类型游标。'1=adOpenKeyset打开键集类型游标。'2=adOpenDynamic打开动态类型游标。'3=adOpenStatic打开静态类型游标。''虽然使用以上方法可以可以实现行坐标(游标)的任意移动,但是仍然无法写入数据。因此需要进一步的对Open方法进行完善'rs.OpenSql,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=selecttop50*from表名'SQL查询语句'以上为只打开前50行的记录Sql=selecttop50列名1,列名2,列名5from表名'SQL查询语句'以上为只打开前50行的记录,并且只打开第1、2、5列数据Sql=select*from表名where列名1='&字段&''SQL查询语句'以上为一个简单的筛选,表示打开的内容必须符合[列名1='&字段&']的内容'需要注意的是,数据库列的类型必须匹配,比如字符串类型需要以单引号括起'而数字类型则不能用单引号括起'另外SQL语句还支持通配符,例如列名1like'%&字段&%'表示包含[字段]'在表达式中的匹配'?_(下划线)任何单一字符'*or%零个或多个字符'#任何单一数字(0—9)'[charlist]任何在字符表中的单一字符'[!charlist]任何不在字符表中的单一字符'注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用%和_分别代表多个字符和单一字符Sql=select*from表名where列名1='&字段&'ORDERBY字段1ASC'对查询结果进行升序排列Sql=select*from表名where列名1='&字段&'ORDERBY字段1DESC'对查询结果进行降序排列Sql=select*from表名where列名1='&字段&'ORDERBY字段1DESC,ORDERBY字段2DESC'对查询结果进行多维降序排列(速度奇慢,不推荐使用)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'返回列数'************************************************************游标类型选项ConstadOpenForwardOnly=0前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。ConstadOpenKeyset=1静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。ConstadOpenDynamic=2键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。ConstadOpenStatic=3动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。加锁类型选项ConstadLockReadOnly=1缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。ConstadLockPessimistic=2以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。ConstadLockOptimistic=3以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。ConstadLockBatchOptimistic=4执行多行批处理更新时使用这种类型最后,打开一个记录集时,你可以指定一个Options参数。Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。你可以使用下面的常量作为Options参数:adCMDTable。被执行的字符串包含一个表的名字。adCMDText。被执行的字符串包含一个命令文本。adCMDStoredProc。被执行的字符串包含一个存储过程名。adCMDUnknown。不指定字符串的内容。(这是缺省值。)在rs.open后面的参数设定。一般建议:rs.opensql,conn,0,1顺序遍历,不需要定位跳转,不需要添加删除更新操作,速度最快rs.opensql,conn,1,3遍历,可以进行更新操作,但不能进行定位跳转rs.opensql,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):当updaterecordset中的记录时,将记录加锁3(adLockBatchOptimistic):以批模式时更新记录时加锁Options:指定source传递命令的类型1