CSDN博客

img wybm

ADO API 参考( ADO方法)之四

发表于2001/7/23 13:40:00  1122人阅读

Open 方法 (ADO Connection)

打开到数据源的连接。

语法

connection.Open ConnectionString, UserID, Password, Options

参数

ConnectionString   可选,字符串,包含连接信息。参阅 ConnectionString 属性可获得有效设置的详细信息。

UserID   可选,字符串,包含建立连接时所使用用户名。

Password   可选,字符串,包含建立连接时所使用密码。

Options   可选,ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量:

常量 说明
adConnectUnspecified (默认)同步打开连接。
adAsyncConnect 异步打开连接。ConnectComplete 事件可以用于决定连接何时可用。

说明

使用 Connection 对象的 Open 方法可建立到数据源的物理连接。在该方法成功完成后连接是活跃的,可以对它发出命令并且处理结果。

使用可选的 ConnectionString 参数指定连接字符串,它包含由分号分隔的一系列 argument = value 语句。ConnectionString 属性自动继承用于 ConnectionString 参数的值,因此可在打开之前设置 Connection 对象的 ConnectionString 属性,或在 Open 方法调用时使用 ConnectionString 参数设置或覆盖当前连接参数。

如果在 ConnectionString 参数和可选的 UserID Password 参数中传送用户和密码信息,那么 UserIDPassword 参数将覆盖 ConnectionString 中指定的值。

在对打开的 Connection 的操作结束后,可使用 Close 方法释放所有关联的系统资源。关闭对象并非将它从内存中删除;可以更改它的属性设置并在以后再次使用 Open 方法打开它。要将对象完全从内存中删除,可将对象变量设置为 Nothing

远程数据服务用法    当在客户端的 Connection 对象上使用 Open 方法时,在 Connection 对象上打开 Recordset 之前 Open 方法其实并未建立到服务器的连接。

Open 方法 (ADO Recordset)

打开游标。

语法

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

参数

Source   可选,变体型,计算 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久 Recordset 文件名。

ActiveConnection   可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。

CursorType   可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一(参阅 CursorType 属性可获得这些设置的定义)。

常量 说明
AdOpenForwardOnly (默认值)打开仅向前类型游标。
AdOpenKeyset 打开键集类型游标。
AdOpenDynamic 打开动态类型游标。
AdOpenStatic 打开静态类型游标。

LockType   可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一(参见 LockType 属性可获得详细信息)。

常量 说明
AdLockReadOnly (默认值)只读 — 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。

Options   可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一(参见 CommandType 属性可获得该列表中前五个常量的详细说明)。

常量 说明
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset
adAsyncExecute 指示应异步执行 Source
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。

说明

使用 Recordset 对象的 Open 方法可打开代表基本表、查询结果或者以前保存的 Recordset 中记录的游标。

使用可选的 Source 参数指定使用下列内容之一的数据源:Command 对象变量、SQL 语句、存储过程、表名或完整的文件路径名。

如果 Source 是文件路径名,它可以是完整路径(“c:/dir/file.rst”)、相对路径(“../file.rst”)或 URL(“http://files/file.rst”)。

ActiveConnection 参数对应于 ActiveConnection 属性,并指定在哪个连接中打开 Recordset 对象。如果传送该参数的连接定义,则 ADO 使用指定的参数打开新连接。可以在打开 Recordset 之后更改该属性的值以便将更新发送到其他提供者。或者可以将该属性设置为 Nothing(在 Microsoft Visual Basic 中)以便将 Recordset 与所有提供者断开。

对于直接对应于 Recordset 对象属性的参数(SourceCursorTypeLockType),参数和属性的关系如下:

  • Recordset 对象打开之前属性是读/写。

  • 除非在执行 Open 方法时传送相应的参数,否则将使用属性设置。如果传送参数,则它将覆盖相应的属性设置,并且用参数值更新属性设置。

  • 在打开 Recordset 对象后,这些属性将变为只读。

注意   对于其 Source 属性被设置为有效 Command 对象的 Recordset 对象,即使 Recordset 对象没有打开,ActiveConnection 属性也是只读的。

如果在 Source 参数中传送 Command 对象并且同时传递 ActiveConnection 参数,那么将产生错误。Command 对象的 ActiveConnection 属性必须已经设置为有效的 Connection 对象或者连接字符串。

如果在 Source 参数中传送的不是 Command 对象,那么可以使用 Options 参数优化对 Source 参数的计算。如果没有定义 Options 则性能将会降低,原因是 ADO 必须调用提供者以确定参数是否为 SQL 语句、存储过程或表名。如果已确定所用的 Source 类型,则可以设置 Options 参数以指示 ADO 直接跳到相关的代码。如果 Options 参数不匹配 Source 类型,将产生错误。

如果不存在与 Recordset 关联的连接,Options 参数的默认值将为 adCmdFile。这是持久 Recordset 对象的典型情况。

如果数据源没有返回记录,那么提供者将 BOFEOF 属性同时设置为 True,并且不定义当前记录位置。如果游标类型允许,仍然可以将新数据添加到该空 Recordset 对象。

在打开的 Recordset 对象上完成操作时,可使用 Close 方法释放任何相关的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在以后使用 Open 方法再次将其打开。要将对象从内存中完全删除,可将对象变量设置为 Nothing

在设置 ActiveConnection 属性之前调用不带操作数的 Open,可通过将字段追加到 Recordset Fields 集合创建 Recordset 的实例。

如果已经将 CursorLocation 属性设置为 adUseClient,就可以采用两种途径之一异步检索行。建议使用的方法是将 Options 设置为 adAsyncFetch。或者,可以使用在 Properties 集合中的“异步行集合处理”动态属性,但如果未将 Options 参数设置为 adAsyncFetch,则可能丢失相关的被检索事件。

注意   在 MSRemote 提供者中的背景提取仅能通过 Open 方法的 Options 参数得到支持。

OpenSchema 方法

从提供者获取数据库模式信息。

语法

Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)

返回值

返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。

参数

QueryType   所要运行的模式查询类型,可以为下列任意常量。

Criteria   可选。每个 QueryType 选项的查询限制条件数组,如下所列:

QueryType Criteria
AdSchemaAsserts CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
AdSchemaCatalogs CATALOG_NAME
AdSchemaCharacterSets CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
AdSchemaCheckConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
AdSchemaCollations COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
AdSchemaColumnDomainUsage DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
AdSchemaColumnPrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
adSchemaColumns TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaConstraintColumnUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaConstraintTableUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaForeignKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
adSchemaIndexes TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
adSchemaKeyColumnUsage CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaPrimaryKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
adSchemaProcedureColumns PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
adSchemaProcedureParameters PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_NAME
adSchemaProcedures PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE
adSchemaProviderSpecific 参见说明
adSchemaProviderTypes DATA_TYPE
BEST_MATCH
adSchemaReferentialConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaSchemata CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
adSchemaSQLLanguages <无>
adSchemaStatistics TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaTableConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
adSchemaTablePrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
adSchemaTables TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
adSchemaTranslations TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
adSchemaUsagePrivileges OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
adSchemaViewColumnUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViewTableUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViews TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME

SchemaID   OLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。

说明

OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。

Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。

如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。

提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTablesadSchemaColumnsadSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。

远程数据服务用法   OpenSchema 方法在客户端 Connection 对象上无效。

注意   在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。

Query 方法 (RDS)

使用有效的 SQL 查询字符串返回 Recordset

语法

Set Recordset = DataFactory.Query Connection, Query

参数

Recordset   对象变量,代表 Recordset 对象。

DataFactory   对象变量,代表 RDSServer.DataFactory 对象。

Connection   字符串,包含服务器连接信息。它类似于 Connect 属性。

Query   字符串,包含 SQL 查询。

说明

查询应该使用数据库服务器的特定 SQL 语言。如果执行的查询发生错误,则返回结果状态。Query 方法不对 Query 字符串进行任何语法检查。

Refresh 方法

更新集合中的对象以便反映来自提供者的可用对象和特定于提供者的对象。

语法

collection.Refresh

说明

Refresh 方法根据从中调用的不同集合而完成不同的任务。

参数

使用 Command 对象的 Parameters 集合上的 Refresh 方法可为在 Command 对象中指定的存储过程或者参数化查询检索提供者端参数信息。对于不支持存储过程调用或参数化查询的提供者来说,集合将为空。

在调用 Refresh 方法之前应该将 Command 对象的 ActiveConnection 属性设置为有效 Connection 对象,将 CommandText 属性设置为有效命令,并且将 CommandType 属性设置为 adCmdStoredProc

如果在调用 Refresh 方法之前访问 Parameters 集合,ADO 将自动调用方法并填充集合。

注意   如果使用 Refresh 方法从提供者获取参数信息而它返回一个或多个变长数据类型 Parameter 对象,则 ADO 可能根据其大小的最大可能值为参数分配内存,这在执行期间将会导致错误。在调用 Execute 方法之前应显式设置这些参数的 Size 属性以防止错误发生。

Fields

Fields 集合上使用 Refresh 方法没有可见的效果。要从基本数据库结构中对更改进行检索,必须使用 Requery 方法;如果 Recordset 对象不支持书签,则使用 MoveFirst 方法。

Properties

在某些对象的 Properties 集合上使用 Refresh 方法可使用提供者提供的动态属性填写集合,这些属性只将功能性信息提供给 ADO 支持的内置属性之外的提供者。

Refresh 方法 (RDS)

对在 Connect 属性中指定的 ODBC 数据源 进行再查询并更新查询结果。

语法

DataControl.Refresh

参数

DataControl   对象变量,代表 RDS.DataControl 对象。

说明

在使用 Refresh 方法之前必须设置 ConnectServerSQL 属性。与 RDS.DataControl 对象关联的表中的所有数据绑定控件反映新的记录集,所有先前存在的 Recordset 对象将被释放,并且放弃所有未保存的更改。Refresh 方法可使首记录自动成为当前记录。

在处理数据时最好定期调用 Refresh 方法。如果检索数据并将其在客户机上放置一段时间,数据很有可能会过期,这时所做的所有更改都将失效,原因是其他人可能在您之前更改了记录并先于您将更改提交。

Requery 方法

通过重新执行对象所基于的查询,更新 Recordset 对象中的数据。

语法

recordset.Requery Options

参数

Options   可选。指示影响该操作选项的位屏蔽。如果该参数设置为 adAsyncExecute,则该操作将异步执行并在它结束时产生 RecordsetChangeComplete 事件。

说明

通过重新发出原始命令并再次检索数据,可使用 Requery 方法刷新来自数据源的 Recordset 对象的全部内容。调用该方法等于相继调用 CloseOpen 方法。如果正在编辑当前记录或者添加新记录将产生错误。

Recordset 对象打开期间,定义游标性质(CursorTypeLockTypeMaxRecords 等)的属性为只读,因此 Requery 方法只能刷新当前游标。要更改某个游标属性并查看结果,必须使用 Close 方法使属性再次成为读/写。然后可以更改属性设置并且调用 Open 方法重新打开游标。

Reset 方法 (RDS)

根据指定的排序和筛选属性对客户端 Recordset 执行排序或筛选操作。

语法

DataControl.Reset(value)

参数

DataControl   对象变量,代表 RDS.DataControl 对象。

value   可选,布尔型值,如果希望在当前的“已筛选”行集合上执行筛选操作,则它是值为 True (默认值);False 表示在原始行集合上执行筛选操作,并删除所有以前的筛选操作选项。

说明

SortColumnSortDirectionFilterValueFilterCriterionFilterColumn 属性提供客户端缓存上的排序和筛选功能。排序功能根据某列的值将记录排序。当全部 Recordset 保留在缓存中时,筛选功能根据查找标准显示记录子集。Reset 方法将执行查找标准并用可更新的 Recordset 替换当前 Recordset

如果还存在没有提交的对原始数据所做的更改,那么 Reset 方法将失效。首先使用 SubmitChanges 方法将所有改动保存在读/写 Recordset 中,然后使用 Reset 方法排序或筛选记录。

如果希望对行集合执行多项筛选,可使用 Reset 方法中可选的 Boolean 参数。下例将说明这一过程:

ADC.SQL = "Select au_lname from authors"
ADC.Refresh      '获得新的行集合。

ADC.FilterColumn = "au_lname"
ADC.FilterCriterion = "<"
ADC.FilterValue = "'M'"
ADC.Reset         '记录集现在包含所有姓氏首字母小于“M”的记录。

ADC.FilterCriterion = ">"
ADC.FilterValue = "'F'"
'不必传送 True 值,因为它是对当前的
'“已筛选”记录集的默认筛选条件。
ADC.Reset(TRUE)      '记录集现在包含所有姓氏首字母
                     '小于“M”且大于“F”的记录。

ADC.FilterCriterion = ">"
ADC.FilterValue = "'T'"
'对原始记录集进行筛选,放弃以前的筛选选项。
ADC.Reset(FALSE)   '记录集现在包含所有姓氏首字母
                  '大于 "T" 的记录。
 
0 0

相关博文

我的热门文章

img
取 消
img