【问题标题】:Move to next record in a MSAccess ADO Subform using VBA使用 VBA 移动到 MSAccess ADO 子窗体中的下一条记录
【发布时间】:2019-10-18 06:33:03
【问题描述】:

当我尝试在 MS Access 子表单中使用 DoCmd.GotoRecord 移动到下一条记录时,出现错误 2105。

在.accdb 文件中,有一个MainForm,一个Subform 和一个Module,SQL Server 中有一个简单的表。就是这样。

我认为我已经尽可能简化了问题,如果您想帮助我,您可以按照以下三个简单步骤操作:

在 SQL Server 中:

创建一个表格并填写一些数据(使用 SSMS):

CREATE TABLE ATable (AColumn INT)
INSERT INTO ATable VALUES (6)
INSERT INTO ATable VALUES (126)
INSERT INTO ATable VALUES (210)
INSERT INTO ATable VALUES (11)

在 MS Access 2016 中

创建一个模块并在其中只写一行:

Public SQLDB As Object

创建一个 SubForm,创建一个 OnLoad 事件并在其模块中编写此代码:

Dim rsa As Object

Private Sub Form_Load()
  Set rsa = CreateObject("ADODB.Recordset")
End Sub

Public Sub Fill(ByVal sql As String)
  rsa.Open sql, SQLDB
  Set Me.Recordset = rsa
  DoCmd.GoToRecord , , acNext
End Sub

最后,创建一个 MainForm,在其上放置一个子窗体控件并绑定到 SubForm,创建一个 OnLoad 事件并在其模块中编写此代码(当然,您必须将连接字符串更改为您的环境):

Private Sub Form_Load()
  Set SQLDB = CreateObject("ADODB.Connection")
  SQLDB.Open "Driver={SQL Server Native Client 11.0};Server=YourSQLServer;Database=Yourdatabase;Trusted_Connection=yes;"
  SQLDB.CursorLocation = 3 ' adUseClient
  Me.UO.Form.Fill "ATable"
End Sub

当您打开 MainForm 时,您将在执行DoCmd.GotoRecord,,acNext 行时得到Error 2105 cannot go to specified record

为什么?

如果您将所有代码都放在 Subform 中,它可以正常工作,所以我认为没有理由仅仅因为 SubForm 是“在子窗体控件中”而不能正常工作。

如果您对如何在子表单的记录集中前后移动光标有任何其他想法,我会很高兴听到的。但是表单记录集是 ADO 非常重要。

【问题讨论】:

  • 代码对我有用。但我没有使用 SQLServer 后端。我也从未使用过 Recordset 属性。
  • 是的,如果您使用 .accdb 后端(或 DAO),它可以正常工作。我在迁移到 SQL Server 时遇到了这个问题
  • 我使用记录集是因为我不知道让 SQL Server 执行查询的其他方法(出于性能原因,查询在现实世界中非常复杂),这也是我迁移至全部。
  • 您可以使用在服务器端执行的passthrough 查询。
  • 你检查过两个表单的加载事件的顺序了吗?

标签: vba ms-access


【解决方案1】:

我找到了原因。这是因为 SubForm 控件在 MainForm 上未激活(或“聚焦”)。所以解决办法是在Subform的代码中加一行:

Dim rsa As Object

Private Sub Form_Load()
  Set rsa = CreateObject("ADODB.Recordset")
End Sub

Public Sub Fill(ByVal sql As String)
  rsa.Open sql, SQLDB
  Set Me.Recordset = rsa
  Me.Parent("UO").SetFocus ' <--- New line
  DoCmd.GoToRecord , , acNext
End Sub

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多