Access 2007 记录集问题

Posted

技术标签:

【中文标题】Access 2007 记录集问题【英文标题】:Access 2007 Recordset problem 【发布时间】:2009-10-13 12:12:39 【问题描述】:

我正在尝试将 Access 2003(运行良好)迁移到 Access 2007。用 VBA 编写的代码会产生一些问题。就像我有一个主要表格和两个子表格一样。在由动态查询设置的主窗体记录源集中,但当我尝试设置子窗体的记录集时基于主窗体数据,然后访问 2007 崩溃并自行关闭。您能否帮助任何人找出为什么会在 2007 年访问中发生这种情况。

Public Sub LoadRecord(strRecId As String)

On Error Resume Next

Dim ctl As Access.Control
Dim strsql As String
Dim strID As String
Dim rs As ADODB.Recordset

    strsql = "SELECT * from vwContractsMainForm WHERE ID = '" & strRecId & "'"

    Call OLEDBConnect 
    Set rs = New ADODB.Recordset
    With rs
        Set .ActiveConnection = cnn
        .Source = strsql
        .CacheSize = 1
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .CursorLocation = adUseServer
        .Open
    End With

    'Set the first sub form's Recordset property to the ADO recordset 
    Set Me.Recordset = rs   '-------- this part creates the problem.
    Me.UniqueTable = "tbl_contracts"
    Set rs = Nothing
    Set cnn = Nothing

【问题讨论】:

将准确的错误信息添加到您的问题中会有所帮助。您的默认对象模型是什么?除非 Me.Recordset 也是 ADODB,否则你会遇到问题。 赫费拉夫。请注意,她说 Access 崩溃。因此没有错误消息。 为什么要将 ADO 记录集分配给表单,而不仅仅是设置表单的 Recordsource 属性?没有任何关于 SQL 语句或您为记录集设置的选项表明对 ADO 记录集有任何需求。你知道它可以以更简单的方式完成吗? 【参考方案1】:

我会被诅咒的。这个月我学到了一些关于 Access 的新东西。我从来没有意识到你可以改变这样的表格的记录集。

我从来没有使用过 On Error Resume Next,因为您可能会在崩溃行之前的行中隐藏错误消息。

愚蠢的问题。 strRecId 是查询中的数字字段还是字符串字段?引号有效吗?

strRecoID 和 cnn 在您的代码中没有变暗。我看到 strID 变暗了,所以这可能是您打算使用的字段。请将 Option Explicit 添加为模块的顶部或第二行。然后进入每个模块并添加这些行。然后进行编译,看看还有多少其他错误发生。

同时进入 VBA 编辑器,然后进入工具 >> 选项 >> 并确保选中需要变量声明框。

也给你和所有潜伏者。请将崩溃信息发送给 Microsoft。虽然他们当然不喜欢获取崩溃信息,但他们确实将崩溃视为 Service Pack 的最高优先级。

【讨论】:

Tony,将 ADO 或 DAO 记录集分配给表单的功能是在 1999 年年中发布的 A2000 中引入的。我认为它几乎没有人们想象的那么有用。在我看来,许多来自其他语言的难民错过了 Access 和绑定表单的基础知识,并认为这是将数据拉入表单的唯一方法(而不是简单地分配表单的记录源)。据我所知,唯一的好处是,如果您真的想要内存中的单个记录集并以一种形式(或两种不同的形式)显示 - 这不是常见的事情。

以上是关于Access 2007 记录集问题的主要内容,如果未能解决你的问题,请参考以下文章

Access Access 2007中的记录集问题

MS Access 2007 - 导入表后,记录集不再可更新

Access 子表单中的字段名称填充了 vba 记录集

使用类模块将可编辑的 ADO 记录集返回到 MS Access 表单

Access数据库跨库查询及记录集区分

将 Access 报表的记录源设置为 ADODB 记录集