挂在特定记录上的 VBA 记录集更新

Posted

技术标签:

【中文标题】挂在特定记录上的 VBA 记录集更新【英文标题】:VBA Recordset Update Hanging On Specfic Record 【发布时间】:2017-08-22 13:58:06 【问题描述】:

所以我有以下...

Sub test4()

Dim db As DAO.Database
Dim Source_rst As DAO.Recordset
Dim Dest_rst As DAO.Recordset

Set db = CurrentDb

Set Source_rst = db.OpenRecordset("SELECT DISTINCTROW [Scorecard Last Ran].[Scorecard ID], Round(([DQS - Scorecard History].[No Passed]/([DQS - Scorecard History].[No Passed]+[DQS - Scorecard History].[No Failed]))*100,1) & '%' AS Score FROM [DQS - Scorecards] INNER JOIN ((SELECT [DQS - Scorecard History].[Scorecard ID], Max([DQS - Scorecard History].[Date/Time Scorecard Ran]) AS [MaxOfDate/Time Scorecard Ran] FROM [DQS - Scorecard History] GROUP BY [DQS - Scorecard History].[Scorecard ID])  AS [Scorecard Last Ran] INNER JOIN [DQS - Scorecard History] ON ([Scorecard Last Ran].[MaxOfDate/Time Scorecard Ran] = [DQS - Scorecard History].[Date/Time Scorecard Ran]) AND ([Scorecard Last Ran].[Scorecard ID] = [DQS - Scorecard History].[Scorecard ID])) ON [DQS - Scorecards].ID = [DQS - Scorecard History].[Scorecard ID];")
Set Dest_rst = db.OpenRecordset("DQS - Scorecards")

If (Source_rst.BOF And Source_rst.EOF) Or (Dest_rst.BOF And Dest_rst.EOF) Then Exit Sub

While (Not Source_rst.EOF)
    Dest_rst.MoveFirst
    While (Not Dest_rst.EOF)
        If Dest_rst![ID] = Source_rst![Scorecard ID] And Dest_rst![ID] <> 3 Then
            Debug.Print Source_rst![Scorecard ID] & " - " & Source_rst![Score]
            Dest_rst.Edit
            Dest_rst![Score] = Source_rst![Score]
            Dest_rst.Update
            DoEvents
        End If
        Dest_rst.MoveNext
    Wend
    Source_rst.MoveNext
Wend

End Sub

相当简单吧?除非我删除 Dest_rst![ID] &lt;&gt; 3 它会挂起,即使我离开它几个小时也是如此。记录 3 没有什么特别之处,进去的数据也是一样的,都是百分比格式的字符串。如果我排除这条记录,效果很好。

我知道 UPDATE 查询会更有效,但它也会挂起。我有什么遗漏吗?!

Dest_rst 是一个非常小的 SharePoint 列表。

【问题讨论】:

SQL Join 不是更简单吗? 是的@Nathan_Sav!那也挂了! :-( 我正在尝试通过尝试不同的选项来调试我自己的问题,但我仍然卡住了。至少这样我知道什么记录是困难的。 如果将sharepoint列表导入静态表是否仍然挂起,可能是sharepoint连接。 在本地表上工作就好了。也适用于 SharePoint 表,除了一条记录(其他 19 条更新正常) 嗯,很明显记录 3 有 一些特别之处......你只是还没有发现它是什么。 【参考方案1】:

原来我的 SharePoint 列表只是个屁。从我的数据库中完全删除列表,重新添加它,一切都很好,恢复了理智!

【讨论】:

以上是关于挂在特定记录上的 VBA 记录集更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 将 MS Access 记录集导出到 Excel 中的多个工作表/选项卡会生成只读文件

MS Access VBA 和 SQL Server - 记录集更新时 ODBC 调用失败

Access 2010 VBA - 打开新记录集 - 打开之前意外保存的值

Access 2016 VBA .FindFirst 在记录集中找不到记录

通过 VBA 设置表单的记录集也是设置其记录源

访问 VBA。检测记录集条目是不是会溢出