You cannot set Index property of ADO recordset that is based on a Microsoft Jet database (290060)
The information in this article applies to:
This article was previously published under Q290060 Advanced: Requires expert coding, interoperability, and multiuser skills.
This article applies only to a Microsoft Access database (.mdb).
For a Microsoft Access 2000 version of this article, see 249683.
SYMPTOMS
When you try to set the Index property of an ActiveX Data Objects (ADO) recordset that is based on a table in a Microsoft Jet database, you may receive the following error message:
Run-time error '3251':
Current provider does not support the necessary interface for Index functionality.
CAUSE
You are trying to set the Index property of a linked table within the database.
RESOLUTION
Open a separate ADO connection to the back-end database, and then open the table directly instead of using the linked table. To see an example of how to do this, follow these steps. NOTE: The sample code in this article uses Microsoft ActiveX Data Objects. For this code to run properly, you must reference the Microsoft ActiveX Data Objects 2.x Library (where 2.x is 2.1 or later.) To do so, click References on the Tools menu in the Visual Basic Editor, and make sure that the Microsoft ActiveX Data Objects 2.x Library check box is selected. - Follow steps 1 through 7 in the "Steps to Reproduce Behavior section" later in this article.
- Modify the procedure created in steps 1 through 7 in the "Steps to Reproduce Behavior section" later in this article as follows:
Sub LinkTableSeek()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "C:\Program Files\Microsoft " _
& "Office\Office10\Samples\Northwind.mdb"
.Open
End With
Set rs = New ADODB.Recordset
With rs
.ActiveConnection = cn
.Source = "Customers"
.CursorLocation = adUseServer
.CursorType = adOpenKeyset
.Open Options:=adCmdTableDirect
.Index = "PrimaryKey"
.Seek "WOLZA"
If (Not .EOF And Not .BOF) Then
MsgBox rs.Fields("CompanyName").Value
Else
MsgBox "Record not found"
End If
.Close
End With
Set rs = Nothing
Set cn = Nothing
End Sub
- Follow steps 9 and 10 in the "Steps to Reproduce Behavior" section later in this article.
Note that you receive a message with the text "Wolski Zajazd," which is the company name of the CustomerID that the code was seeking.
STATUS
This behavior is by design.
REFERENCES
For additional information about using the Seek method in an ADO recordset based on a table in a Microsoft Jet database, click the following article number to view the article in the Microsoft Knowledge Base:
287638
How to use the Seek method with ActiveX Data Objects (ADO) against a Jet recordset
Modification Type: | Major | Last Reviewed: | 8/10/2004 |
---|
Keywords: | kbProgramming KbVBA kbDatabase kbdta kberrmsg kbprb KB290060 |
---|
|