This article was previously published under Q201826
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
When you use ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) and try to access properties in the Properties Collection, you may receive the following error message:
Run time error '3265': ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
The following error is returned from ADO 2.5 and later:
Run-time error '3265': Item cannot be found in the collection corresponding to the requested name or ordinal.
The object's ParentCatalog property was not set to a valid Catalog object,
the ADO Connection object associated with the Parent Catalog may be invalid.
Set the object's ParentCatalog property to a valid Catalog object,
make sure the Parent Catalog is associated with a valid ADO Connection Object.
This behavior is by design.
The Properties collection associated with ADOX objects exposes provider-specific properties. However, ADOX objects can not expose this collection if there is not a channel for ADOX to talk to the Provider. This channel is created through the object's ParentCatalog property that points to a Catalog object. The Catalog object's Connection property must be set to a valid, opened ADO Connection object. Once this is in place, ADOX objects can expose any exposed provider-specific properties.
Steps to Reproduce Behavior
Start Visual Basic.
Choose the default project type.
Set a project reference to each of the following:Microsoft ADO Ext. 2.x for DDL and Security andMicrosoft ActiveX Data Objects 2.x Library.
Paste the following code into the default form's Load method:
Dim cnn As ADODB.Connection Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim col As ADOX.Column Dim idx As ADOX.Index Set cnn = CreateObject("ADODB.Connection") With cnn .ConnectionString = "PROVIDER=SQLOLEDB" & _ ";DATA SOURCE=<server name>" & _ ";USER ID=<uid>;PASSWORD=<pwd>" & _ ";INITIAL CATALOG=<catalog name>" .Open End With Set cat = CreateObject("ADOX.Catalog") cat.ActiveConnection = cnn Set tbl = CreateObject("ADOX.Table") tbl.Name = "test" tbl.Columns.Append "iMyID", adInteger tbl.Columns.Append "cTest", adChar, 15 ' Comment the Line below and ' Uncomment the duplicate line two lines below to avoid error. tbl.Columns(0).Properties("Autoincrement").Value = True 'This line is the key. Set tbl.ParentCatalog = cat 'tbl.Columns(0).Properties("Autoincrement").Value = True cat.Tables.Append tbl
The following is from Help under the ParentCatalog Property from the Data Acces Software Development Kit for use with Microsoft Data Access Components:
Some data providers allow provider-specific property values to be written only at creation (when a table or column is appended to its Catalog collection). To access these properties before appending these objects to a Catalog, specify the Catalog in the ParentCatalog property first.