【发布时间】: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