我正在尝试在我的桌子上的列表框控件中搜索当前选定的项目。
在更新事件后的列表框控件中,我有这段代码
Private Sub lst_MainList_AfterUpdate()
Dim theDB As DAO.Database
Dim theProposalsTable As DAO.Recordset
Set theDB = CurrentDb
Set theProposalsTable = theDB.OpenRecordset("tbl_PROPOSAL", dbOpenDynaset)
theSeeker theProposalsTable, Me.lst_PPpg_MainList.Value
End Sub
然后我的Module1上有一个子代码。我从示例代码@ https://msdn.microsoft.com/en-us/library/office/ff836416.aspx
中得到了这个Sub theSeeker(ByRef rstTemp As Recordset, intSeek As Integer)
Dim theBookmark As Variant
Dim theMessage As String
With rstTemp
' Store current record location.
theBookmark = .Bookmark
.Seek "=", intSeek
' If Seek method fails, notify user and return to the
' last current record.
If .NoMatch Then
theMessage = "Not found! Returning to current record." & vbCr & vbCr & "NoMatch = " & .NoMatch
MsgBox theMessage
.Bookmark = theBookmark
End If
End With
End Sub
我收到运行时错误3251此类对象不支持操作。
当我点击Debug时,会突出显示.Seek "=", intSeek
答案 0 :(得分:3)
这一点来自链接页面......
在索引表类型Recordset对象
中查找记录
... " table-type Recordset" 表示您必须使用dbOpenTable
代替dbOpenDynaset
OpenRecordset()
这一点至关重要。如果您无法使用dbOpenTable
打开表格,则无法使用Seek
。 dbOpenTable
只能与当前数据库中包含的本机Access表一起使用。它不能与任何类型的链接表一起使用。
因此,如果dbOpenTable
与tbl_PROPOSAL
兼容,则此更改将消除第一个错误...
'Set theProposalsTable = theDB.OpenRecordset("tbl_PROPOSAL", dbOpenDynaset)
Set theProposalsTable = theDB.OpenRecordset("tbl_PROPOSAL", dbOpenTable)
如果确实有效,则下一个错误将是#3019,"没有当前索引时操作无效。" 这是因为您必须在调用{之前设置控制索引{1}} ...
Seek
如果需要列出表索引的名称,可以检查其With rstTemp
' Store current record location.
theBookmark = .Bookmark
' Set the index.
.Index = "PrimaryKey" '<- use your index name here
.Seek "=", intSeek
集合。这是一个立即窗口示例,在我的数据库中有一个表...
TableDef.Indexes
答案 1 :(得分:0)
您不能在链接表上使用 Seek 方法,因为您不能将链接表作为表类型 Recordset 对象打开...
但是,如果您使用 OpenDatabase 方法打开后端数据库,则可以使用 Seek 方法。
所以代替:
Set theDB = CurrentDb()
这样做:
Set theDB = OpenDatabase("full path to backend database")
Set theProposalsTable = theDB.OpenRecordset("tbl_PROPOSAL", dbOpenTable)