更新访问权限 (Jet) 数据库中的 40 多个字段
时间:2013-06-26 23:04 来源:微软 作者:微软 阅读:次
如何: 更新访问权限 (Jet) 数据库中的 40 多个字段
概要
当使用 RDO 或 ADO 访问 (Jet) 数据库中的数据更新时,将出现下面的错误:
由于 Jet 数据库引擎的限制,如果要更新的记录集包含 40 个以上的域,会出现此错误。
使用 Jet 3.51 引擎,如果要更新的记录集包含 50 个以上的字段发生此错误。Jet 4.0 引擎和更高版本中,如果要更新的记录集包含多于 99 字段将发生此错误。
使用 Jet 4.0 引擎和更高版本,您可能会看到错误:
-或者-
本文介绍了该问题方案、 Jet 的限制和几种解决方法。
查询是太复杂
使用 Jet 3.51 引擎,如果要更新的记录集包含 50 个以上的字段发生此错误。Jet 4.0 引擎和更高版本中,如果要更新的记录集包含多于 99 字段将发生此错误。
使用 Jet 4.0 引擎和更高版本,您可能会看到错误:
表达式太复杂
已定义的字段太多
更多信息
执行 update () 或 BatchUpdate() RDO 的 rdoResultset 对象的方法或 ADO 记录集的 update () 或 UpdateBatch() 方法时对象时,ODBC 错误 S1000"是过于复杂查询"(Visual Basic 运行时错误 40002)。使用 Microsoft Jet OLE DB 提供程序的版本 3.51 及更高版本时,发生了错误,相同的说明。
由于 ADO 和 RDO 的默认行为是使用记录集中的每个字段确定要在服务器上进行更新的记录,将发生此问题。也就是说,当试图更新时,更新 SQL 查询被发送到服务器。此查询的一部分是一个 WHERE 子句,用来标识要更新的记录。AND 子句出现在 WHERE 子句中的每个字段用于这一发现。与 40 多个字段中更新记录集涉及 40 多个插手与 WHERE 子句。
Jet 引擎允许仅 40 的 AND 子句,其中 SQL 或 HAVING 子句中。Jet 3.51 增加到 50 的 AND 子句,此限制,并且 Jet 4.0 增加 99 AND 子句的限制。在遇到 SQL 语句时,Access 引擎返回"查询不太复杂的"错误。请参阅本指南的详细信息的参考部分。
有几种方法来避免这种情况:
由于 ADO 和 RDO 的默认行为是使用记录集中的每个字段确定要在服务器上进行更新的记录,将发生此问题。也就是说,当试图更新时,更新 SQL 查询被发送到服务器。此查询的一部分是一个 WHERE 子句,用来标识要更新的记录。AND 子句出现在 WHERE 子句中的每个字段用于这一发现。与 40 多个字段中更新记录集涉及 40 多个插手与 WHERE 子句。
Jet 引擎允许仅 40 的 AND 子句,其中 SQL 或 HAVING 子句中。Jet 3.51 增加到 50 的 AND 子句,此限制,并且 Jet 4.0 增加 99 AND 子句的限制。在遇到 SQL 语句时,Access 引擎返回"查询不太复杂的"错误。请参阅本指南的详细信息的参考部分。
有几种方法来避免这种情况:
- 对于新的应用程序,可使用 Access 数据库时使用 DAO。DAO 专为此目的,并不会发出 SQL 查询来执行更新。请注意 RDO 和尤其是 ADO 旨在有效地运用许多其他类型的数据库,对于应用程序,将与不同的服务器进行交互或的将是升迁将来例如使用 Microsoft SQL Server,都建议使用。
- 在打开的记录集更新的情况 (如 RDO OpenResultset 或 ADO OpenRecordset 方法) 时,选择特定的和 40 个或更少的字段。
-
使用服务器端游标:
-
若要执行此操作在 ADO 中,adUseServer 为在打开记录集之前设置记录集对象的 CursorLocation 位置属性:
... Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseServer rs.Open ... ...
-
在 RDO,在调用 OpenConnection() 方法之前设置 rdoEnvironment 对象的 CursorDriver 属性:
... Dim eng As RDO.rdoEngine Dim cn As RDO.rdoConnection Dim env As RDO.rdoEnvironment Dim rs As RDO.rdoResultset Set eng = New rdoEngine Set env = eng.rdoCreateEnvironment(...) env.CursorDriver = rdUseServer Set cn = env.OpenConnection(...) Set rs = cn.OpenResultset(...) ...
-
若要执行此操作在 ADO 中,adUseServer 为在打开记录集之前设置记录集对象的 CursorLocation 位置属性:
-
确保一个独一无二的密钥用于标识要更新,而不是使用每个字段的默认行为的记录。一个唯一密钥 (尽管不一定是为主键) 必须在为此项工作的技术是基础记录集定义。
-
若要执行此操作在 ADO 中 (这不会在 ADO 2.0 之前的版本中),请记录集对象的"更新条件"属性设置为 adCriteriaKey 上。这起两者的 update () 和 UpdateBatch() 方法:
... Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Properties("Update Criteria").Value = adCriteriaKey rs.Open ... ...
-
Rdo,使用 ClientBatch 游标库,并确保不要将结果集对象的 UpdateCriteria 属性设置为 rdCriteriaAllCols。默认情况下,此属性设置为 rdCriteriaKey,这将导致使用来确定要在服务器上更新的行的主键值:
... Dim eng As RDO.rdoEngine Dim cn As RDO.rdoConnection Dim env As RDO.rdoEnvironment Dim rs As RDO.rdoResultset Set eng = New rdoEngine Set env = eng.rdoCreateEnvironment(...) env.CursorDriver = rdUseClientBatch Set cn = env.OpenConnection(...) Set rs = cn.OpenResultset(...) rs.Edit ... rs.UpdateCriteria = rdCriteriaKey rs.Update ...
-
若要执行此操作在 ADO 中 (这不会在 ADO 2.0 之前的版本中),请记录集对象的"更新条件"属性设置为 adCriteriaKey 上。这起两者的 update () 和 UpdateBatch() 方法:
(责任编辑:admin)
顶一下
(3)
100%
踩一下
(0)
0%
相关内容
- ·用DAO或ADO正确访问Access 2000
- ·Access开发网络共享版技巧(多人同时操
- ·access中ADO与DAO格式的区别和写法【总
- ·access执行操作查询的几种方法对比
- ·Access中CurrentDb().Execute 和DoCmd.
- ·[源创技巧]在ACCESS中使用代码来自动创
- ·更新访问权限 (Jet) 数据库中的 40 多
- ·【实例】ADO代码计算余额法
- ·DAO实现的子窗体记录分页显示
- ·分别使用DAO和ADO连接外部数据库和Sql
- ·怎样判断一个表是否存在于数据库中? (D
- ·处理加了密码的MDB文件
- ·谈ADO访问不同数据库的差别
- ·DAO基础(4)
- ·DAO基础(3)
- ·DAO基础(2)
最新内容
推荐内容