Connection.Execute 方法 (DAO)

适用于:Access 2013、Office 2013

运行一个操作查询或执行指定对象上的 SQL 语句。

语法

表达式 。执行 (查询选项)

表达式 一个表示 Connection 对象的变量。

参数

名称

必需/可选

数据类型

说明

Query

必需

字符串

一个 String,为 SQL 语句,或者 QueryDef 对象的 Name 属性值。

选项

可选

Variant

一个常量或常量组合,按 Settings 中的指定确定查询的数据完整性特征。

说明

可以为选项使用以下 RecordsetOptionEnum 常量。

常量

说明

dbDenyWrite

拒绝其他用户的写入权限(仅适用于 Microsoft Access 工作区)。

dbInconsistent

(默认值)执行不一致的更新(仅适用于 Microsoft Access 工作区)。

dbConsistent

执行一致的更新(仅适用于 Microsoft Access 工作区)。

dbSQLPassThrough

执行 SQL 传递查询。 设置此选项会将 SQL 语句传递给 ODBC 数据库以进行处理(仅适用于 Microsoft Access 工作区)。

dbFailOnError

发生错误时回滚更新(仅适用于 Microsoft Access 工作区)。

dbSeeChanges

如果其他用户更改您正编辑的数据,则生成运行时错误(仅适用于 Microsoft Access 工作区)。

dbRunAsync

异步执行查询(仅适用于 ODBCDirect Connection 和 QueryDef 对象)。

dbExecDirect

在不首先调用 SQLPrepare ODBC API 函数(仅 ODBCDirect Connection 和 QueryDef 对象)的情况下,执行该语句。

注意

Microsoft Access 2013 中不支持 ODBCDirect 工作区。 如果要在不使用 Microsoft Access 数据库引擎的情况下访问外部数据源,请使用 ADO。

注意

[!注释] 常量 dbConsistentdbInconsistent 是互斥的。 可以在 OpenRecordset 的给定实例中使用其中的某一个,但不能同时使用此两者。 同时使用 dbConsistentdbInconsistent 会导致出错。

Execute 方法仅对操作查询有效。 如果将 Execute 与其他类型的查询一起使用,则会发生错误。 由于操作查询不返回任何记录, 因此 Execute 不会返回 Recordset。 (如果未返回 Recordset ,则在 ODBCDirect 工作区中执行 SQL 传递查询不会返回错误。)

使用 ConnectionDatabaseQueryDef 对象的 RecordsAffected 属性确定受最近的 Execute 方法影响的记录数。 例如, RecordsAffected 包含执行某个动作查询时删除、更新或插入的记录数。 如果使用 Execute 方法运行查询,会将 QueryDef 对象的 RecordsAffected 属性设置为受影响的记录数。

在 Microsoft Access 工作区中,如果提供了一个在语法上正确的 SQL 语句,并且您具有相应的权限,则 Execute 方法不会失败 - 即使一行都不能修改或删除,也是如此。 因此,在使用 Execute 方法运行更新或删除查询时,请始终使用 dbFailOnError 选项。 如果锁定了任何受影响的记录,因而无法对其进行更新或删除,此选项将生成运行时错误,同时回滚所有成功的更改。

在早期版本的 Microsoft Jet 数据库引擎中,SQL 语句自动嵌入到隐式事务中。 如果使用 dbFailOnError 执行的语句的一部分失败,则整个语句都会回滚。 为了改善性能,从版本 3.5 开始,删除了这些隐式事务。 如果要更新早期的 DAO 代码,请务必考虑对 Execute 语句使用显式事务。

为了在 Microsoft Access 工作区中,特别是在多用户环境中获取最佳性能,请将 Execute 方法嵌套在事务中。 对当前的 Workspace 对象使用 BeginTrans 方法,然后使用 Execute 方法,再对 Workspace 使用 CommitTrans 方法完成事务。 这样可以保存磁盘上的更改,并且释放任何在运行查询时放置的锁定。