日期:2010-10-23  浏览次数:20889 次

语法
set connection=server.createobject(“adodb.connection“)
Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)

返回值
返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。

参数
QueryType 所要运行的模式查询类型,可以为下列任意常量。
Criteria 可选。每个 QueryType 选项的查询限制条件数组,

参数枚举(QueryType )
'---- SchemaEnum Values ----
Const adSchemaProviderSpecific = -1
Const adSchemaAsserts = 0
Const adSchemaCatalogs = 1
Const adSchemaCharacterSets = 2
Const adSchemaCollations = 3
Const adSchemaColumns = 4
Const adSchemaCheckConstraints = 5
Const adSchemaConstraintColumnUsage = 6
Const adSchemaConstraintTableUsage = 7
Const adSchemaKeyColumnUsage = 8
Const adSchemaReferentialContraints = 9
Const adSchemaTableConstraints = 10
Const adSchemaColumnsDomainUsage = 11
Const adSchemaIndexes = 12
Const adSchemaColumnPrivileges = 13
Const adSchemaTablePrivileges = 14
Const adSchemaUsagePrivileges = 15
Const adSchemaProcedures = 16
Const adSchemaSchemata = 17
Const adSchemaSQLLanguages = 18
Const adSchemaStatistics = 19
Const adSchemaTables = 20
Const adSchemaTranslations = 21
Const adSchemaProviderTypes = 22
Const adSchemaViews = 23
Const adSchemaViewColumnUsage = 24
Const adSchemaViewTableUsage = 25
Const adSchemaProcedureParameters = 26
Const adSchemaForeignKeys = 27
Const adSchemaPrimaryKeys = 28
Const adSchemaProcedureColumns = 29


利用openschema可以获得所有表的主键,当然这只是它的很多功能中的一个。
connstr = "Provider=MSDAORA.1;User ID=liujincai;password=ljc1001;Data Source=hp1"
set mm=server.CreateObject("adodb.connection")
mm.Open connstr
Const adSchemaPrimaryKeys = 28
set rs=mm.OpenSchema(adSchemaPrimaryKeys)
Response.Write "<table>"
Response.Write "<TR>"

for i=0 to rs.fields.count-1
Response.Write "<td>" & rs(i).name & "</td>"
next
Response.Write "</tr> "
do while not rs.eof
Response.Write "<tr>"
for i=0 to rs.fields.count-1
Response.Write "<td>" & rs(i) & "</td>"
next
Response.Write "</tr> "
rs.movenext
loop
Response.write “</table>“

'下面的语句获得表'TB_HOUSE_MAIN'的主键所在的字段
rs.Filter="TABLE_NAME='TB_HOUSE_MAIN'"
if not(rs.eof and rs.bof) then Response.Write rs("COLUMN_NAME")


获得任意一个存储过程的参数列表,这个对于想做完全松耦合系统的哥们一定有用的。这个程序获得名字为'PRO_HOUSE_ADD_INFO'的存储过程的参数列表
connstr = "Provider=MSDAORA.1;User ID=liujincai;password=ljc1001;Data Source=hp1"
set mm=server.CreateObject("adodb.connection")
mm.Open connstr
Const adSchemaProcedureParameters = 26
set rs=mm.OpenSchema(adSchemaProcedureParameters) rs.Filter="PROCEDURE_NAME='PRO_HOUSE_ADD_INFO'" Response.Write "<TABLE cellSpacing=0 border=1>"
Response.Write "<TBODY><TR bgColor=#dddddd>"
for i=2 to rs.fields.count-1
Response.Write "<TD>" & rs(i).name & "</TD>"
next
Response.Write "</TR>"
do while not rs.eof
Response.Write "<TR bgColor=#e0d0c0>"
for i=2 to rs.fields.count-1
Response.Write "<TD>" & rs(i) & "</TD>"
next
Response.Write "</tr>"
rs.movenext
loop
Response.Write "</table>"


经过几个小时的实践探索,终于结束了对Adodb.connection的openschema方法的研究。现在总结一下:
1,Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)
里边一共有三个参数,但是一般就用第一个,后两个得确切功能,我也没有搞懂,这里也不做说明,有兴趣的自己查资料。

2,这个的实现就是通过连接对象的openschema方法返回一个记录集。这样就可以遍历记录集来显示或者搜集感性趣的信息。

3,利用它你还可以获得关于表,视图,列,索引,外键等信息。

4,现在不能肯定的是,是否有些方式的模式查询受用户权限的限制。也就是如果没有足够的权限,是不能做某些类别的模式查询的(有待验证)

5,这里有一些关于OpenSchema的资料连接,供查阅:
http://www.lyu.edu.cn/home/yss/ado/mdmthopenschema.htm
http://code365.com/html/asp/20040227/index/2004227113621.htm