sybe
asked on
Is this a bug in ADOX or in SQL Server or in ADODB ??
Win2k, ADO 2.80, SQL Server 2000
This is the ASP code:
<%
Option Explicit
Response.Buffer = False
Dim oConn, sDSN, oCatalog, oKeys, oColumns, element, subelement
' crate ADODB Connection
sDSN = "PROVIDER=SQLOLEDB;DATA SOURCE=127.0.0.1;USER ID=sa;PASSWORD=;DATABASE=t ivoliroost er;"
Set oConn = Server.CreateObject("ADODB .Connectio n")
oConn.Open sDSN
' Create ADOX catalog
Set oCatalog = Server.CreateObject("ADOX. Catalog")
oCatalog.ActiveConnection = oConn
' get the keys of a table which has a primary key (on an identity field) - also some foreign keys are present.
Set oKeys = oCatalog.Tables.Item("perf ormance"). Keys
For each element In oKeys
Response.write "<hr>" & element.Name & " (" & element.Type & ")<br>" & CHR(10)
Set oColumns = element.Columns
For each subelement in oColumns '----- error on this line
Response.write subelement.Name & "<br>" & CHR(10)
Next
Next
%>
========================== ==
Error:
Microsoft VBScript runtime error '800a0cb3'
Unknown runtime error
demobug.asp, line 23
========================== ==
But, this is only an eror if oKeys.element.Type = 1 (primary key). For foreign keys it runs fine.
The same code runs completely without problems on Access.
questions:
- is this a bug in ADO?
- is there some way to avoid the bug (different connectionstring, upgrade - but i have the latest ADO installed)
This is the ASP code:
<%
Option Explicit
Response.Buffer = False
Dim oConn, sDSN, oCatalog, oKeys, oColumns, element, subelement
' crate ADODB Connection
sDSN = "PROVIDER=SQLOLEDB;DATA SOURCE=127.0.0.1;USER ID=sa;PASSWORD=;DATABASE=t
Set oConn = Server.CreateObject("ADODB
oConn.Open sDSN
' Create ADOX catalog
Set oCatalog = Server.CreateObject("ADOX.
oCatalog.ActiveConnection = oConn
' get the keys of a table which has a primary key (on an identity field) - also some foreign keys are present.
Set oKeys = oCatalog.Tables.Item("perf
For each element In oKeys
Response.write "<hr>" & element.Name & " (" & element.Type & ")<br>" & CHR(10)
Set oColumns = element.Columns
For each subelement in oColumns '----- error on this line
Response.write subelement.Name & "<br>" & CHR(10)
Next
Next
%>
==========================
Error:
Microsoft VBScript runtime error '800a0cb3'
Unknown runtime error
demobug.asp, line 23
==========================
But, this is only an eror if oKeys.element.Type = 1 (primary key). For foreign keys it runs fine.
The same code runs completely without problems on Access.
questions:
- is this a bug in ADO?
- is there some way to avoid the bug (different connectionstring, upgrade - but i have the latest ADO installed)
I assume that you have done your round of snooping around.. eh? :o)
Cheers!!
Cheers!!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
hmmm.. didnt go through your entire post above... reasd through the kb article posted above..
>>CAUSE
To retrieve columns used by the primary key, ADOX uses the IDBSchemaRowset::GetRowset method with DBSCHEMA_KEY_COLUMN_USAGE, which is not supported by the SQL Server OLE DB provider (SQLOLEDB) provider and is supported only by the latest version of the Jet OLE DB Provider which is installed with the latest version of the Jet Service Pack. <<
>>STATUS
This behavior is by design. <<
why do microsoft alway piss us off with the above line... behaviour is by design...
Sorry Sybe, I guess SQL doesnt support the method....
Cheers!!
>>CAUSE
To retrieve columns used by the primary key, ADOX uses the IDBSchemaRowset::GetRowset
>>STATUS
This behavior is by design. <<
why do microsoft alway piss us off with the above line... behaviour is by design...
Sorry Sybe, I guess SQL doesnt support the method....
Cheers!!
ASKER
Your link to the ms site hits the nail exactly on the head. Thanks.
ASKER
for anyone's information:
There is another way to get the columns in the Primary Key of a table.
All primary keys in a database are listed in a recordset using:
Set oRS = oConn.OpenSchema(28)
In the resulting recordset also fields for the name of the table and the name of the primary key are listed. Which is exactly what i needed.
There is another way to get the columns in the Primary Key of a table.
All primary keys in a database are listed in a recordset using:
Set oRS = oConn.OpenSchema(28)
In the resulting recordset also fields for the name of the table and the name of the primary key are listed. Which is exactly what i needed.
Thanks for the points and thanks for the info..
Cheers!!
Cheers!!
https://www.experts-exchange.com/questions/11956738/ADOX-for-SQL-Server.html
Cheers!!