【问题标题】:me.recordset.requery Fails with error 3251 with Query as a RecordSourceme.recordset.requery 使用 Query 作为 RecordSource 时出现错误 3251 失败
【发布时间】:2021-08-20 18:12:17
【问题描述】:

我发现 @mwolfe02 的 Mike Wolfe's 建议不要头疼或大惊小怪地做 in-place Form requires。凉爽的。看起来很简单,减少了所需的额外编码。除了...它不起作用。

每次,每种形式,无论如何,我都会收到错误 3251:“这种类型的对象不支持操作”。每次。不管Form是怎么绑定的,不管是通过me.recordsource = "something"set me.recordset = somerecordset,还是在Form Properties中静态分配等等。

表单设置为Dynaset,直通(使用时)打开为dbOpenDynaset,等等。

我可以在这些中使用me.recordsetclone(事实上,这就是我现在正在做的获取rowid)。我究竟做错了什么?还是有什么问题?或者这只是在以 SQL Server 为源的情况下无法在实践中使用?

作为参考,我使用 O365 Office 64 位版本 16 和 SQL Server 作为后端,但有些表在本地加载为临时表。

[编辑] 在设置表单的记录源时,我是这样做的:

' (in the form open)
me.recordsource = SendSQLReturnData (SQLString) ' This works great, and I know the SQL functions. 
(later in an OnPress from button:
me.recordset.requery ' <= Does not work.

' (SendSQLReturnData)
Public Function SendSQLReturnData(ByRef SQLString As String, _
Optional ByRef ReturnTable As String = PassthroughQuery, _ 
Optional DeleteExist As Boolean = False, _
Optional NoChange As Boolean = False) As String
'Sets up a passthrough query, hands back the name of the string via query. 

    Dim qdf As DAO.QueryDef
    Dim rstReport As DAO.Recordset
    Dim dB As DAO.Database

    Set dB = CurrentDb

    If DoesQryExist(ReturnTable) = False Then
    'this handles the case where the table wasn't set up already either by accident or didn't need to be previously.
        Set qdf = dB.CreateQueryDef(ReturnTable)
    Else 'Assume the only other case for "Does it exist" is true, so don't bother checking
        If NoChange = False Then
            Set qdf = dB.QueryDefs(ReturnTable)
        Else
            GoTo Exit_Here
        End If
    End If

    With qdf
        .Connect = dB.TableDefs(BackEndKeyTbl).Connect
        .SQL = SQLString
        .ReturnsRecords = True
        .OpenRecordset , dbOpenDynaset
    End With
Exit_Here:
    SendSQLReturnData = ReturnTable
    qdf.Close ' Turning these on/off doesn't change result.
    Set qdf = Nothing
    Set dB = Nothing
 
End Function

【问题讨论】:

  • 发布您的确切代码,而不仅仅是引用示例链接。我测试了Recordset.Requery 并为我工作。
  • 在 Access2010 32 位中使用链接的 SQLServerExpress 表进行测试。
  • 当你说确切的代码时,你是什么意思?代码me.recordset.requery 不适用于表单(对我而言)。
  • 更多疑难解答:如果我使用 Passthrough 表,requery 方法可以正常工作。如果我使用直通查询或尝试通过记录集(快照或动态集)传递查询结果,也会发生同样的情况。传递查询是否存在使其不可重新查询的问题?
  • 构建第一个直通查询。 Confirmed Requery 有效,但 Recordset.Requery 无效。将不得不使用长版本代码来保持记录位置。

标签: sql-server vba ms-access


【解决方案1】:

当表单或报表记录源是直通查询时,这将不起作用。

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多