PRB: Error 3265 When You Access Properties Collection

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Symptoms

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.

Cause

The object's ParentCatalog property was not set to a valid Catalog object,

-or-

the ADO Connection object associated with the Parent Catalog may be invalid.

Resolution

Set the object's ParentCatalog property to a valid Catalog object,

-or-

make sure the Parent Catalog is associated with a valid ADO Connection Object.

Status

This behavior is by design.

More Information

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

  1. Start Visual Basic.
  2. Choose the default project type.
  3. Set a project reference to each of the following:Microsoft ADO Ext. 2.x for DDL and Security and
    Microsoft ActiveX Data Objects 2.x Library.

  4. 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

References

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.
Propriétés

ID d'article : 201826 - Dernière mise à jour : 23 août 2001 - Révision : 1

Commentaires