OpenSchema 函数

此函数返回包含数据库的信息 RecordSet 对象,如数据库包含哪些表等。

connection.OpenSchema(QueryType [,Criteria] [,SchemaID])
参数 意义
QueryType  查询类型
Criteria 查询限制条件数组,如 Array("DATA","TABLE"),不限定项设为空值
SchemaID 提供者纲要查询的 GUID,一般不使用

QueryType 和 Criteria 常量

QueryType 值 Criteria 数值内容 说明

Public Const AdSchemaAsserts = 0

CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
 

Public Const AdSchemaCatalogs = 1

CATALOG_NAME '数据库名 返回数据库名

Public Const AdSchemaCharacterSets = 2

CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
 

Public Const AdSchemaCollations = 3

COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
 

Public Const AdSchemaColumns = 4

TABLE_CATALOG '数据库
TABLE_SCHEMA  '所有者
TABLE_NAME    '表
COLUMN_NAME   '列
返回列名

Public Const AdSchemaCheckConstraints = 5

CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
 

Public Const AdSchemaColumnDomainUsage = 

DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
 

Public Const AdSchemaConstraintColumnUsage = 6

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
 

Public Const AdSchemaConstraintTableUsage = 7

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
 

Public Const AdSchemaKeyColumnUsage = 8

CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
 

Public Const AdSchemaReferentialConstraints = 9

CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
 

Public Const AdSchemaTableConstraints = 10

CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
 

Public Const AdSchemaIndexes = 12

TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
 

Public Const AdSchemaColumnPrivileges = 13

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
 

Public Const AdSchemaTablePrivileges = 14

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
 

Public Const AdSchemaUsagePrivileges = 15

OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
 

Public Const AdSchemaProcedures = 16

PROCEDURE_CATALOG '数据库
PROCEDURE_SCHEMA  '所有者
PROCEDURE_NAME  '存储过程
PROCEDURE_TYPE  '过程类型
返回存储过程名

Public Const AdSchemaSchemata = 17

CATALOG_NAME
SCHEMA_NAME  '所有者
SCHEMA_OWNER
返回数据库所有者

Public Const AdSchemaSQLLanguages = 18

<无>  

Public Const AdSchemaStatistics = 19

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
 

Public Const AdSchemaTables = 20

TABLE_CATALOG  '数据库
TABLE_SCHEMA   '所有者
TABLE_NAME     '表名
TABLE_TYPE     '表类型
返回表

Public Const AdSchemaTranslations = 21

TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
 

Public Const AdSchemaProviderTypes = 22

DATA_TYPE   '类型名
BEST_MATCH
返回数据类型

Public Const AdSchemaViews = 23

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
 

Public Const AdSchemaViewColumnUsage = 24

VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
 

Public Const AdSchemaViewTableUsage = 25

VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
 

Public Const AdSchemaProcedureParameters = 26

PROCEDURE_CATALOG '数据库
PROCEDURE_SCHEMA  '所有者
PROCEDURE_NAME    '过程名;n
PARAMTER_NAME     '参数名
返回存储过程参数

Public Const AdSchemaForeignKeys = 27

PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
 

Public Const AdSchemaPrimaryKeys = 28

PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
 

Public Const AdSchemaProcedureColumns = 29

PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
 

Public Const AdSchemaProviderSpecific = -1

参见说明  

adSchemaTables 返回所有表(值=20)

在 EXCEL 中,各工作表被认为是 SYSTEM TABLE,定义区域则为 TABLE。

字段名 意义 内容示例
TABLE_CATALOG 数据来源 "c:\database\db1"
TABLE_NAME 表名 "table1"、"查询1","Sheet1$"
TABLE_TYPE 表类型 "SYSTEM TABLE"、"TABLE"、"VIEW"

adSchemaColumns 返回所有列(值=4)

字段名 意义 内容示例
TABLE_CATALOG 数据库名 tempdb
TABLE_SCHEMA 所有者 "dbo"
TABLE_NAME 表名  
COLUMN_NAME 字段名 重名加序号,回车换"_"
ORDINAL_POSTION 字段位置  
COLUMN_DEFAULT 字段默认值 0,('')
IS_NULLABLE 允许空值 True
DATA_TYPE 数据类型 3(整数)
CHARACTER_MAXIMUM_LENGTH 宽度 255
NUMERIC_PRECISION 数字精度 10,5
DATETIME_PRECISION 日期时间精度 9

adSchemaProviderTypes 返回所有数据类型(值=22)

字段名 意义 内容示例
NAME 类型名称 int,char
DATA_TYPE 类型号 3,129
COLUMN_SIZE 类型最大尺寸 10,8000
LITERAL_PREFIX 类型左边界 无,"'"
LITERAL_SUFFIX 类型右边界 无,"'"
LOCAL_TYPE_NAME 本地类型名 同 NAME

adSchemaProcedures(值=16)

字段名 意义 内容示例
PROCEDURE_CATALOG  数据库 asteras
PROCEDURE_SCHEMA 所有者 dbo
PROCEDURE_NAME 存储过程;序号 ast;1
PROCEDURE_TYPE 过程类型  

调用方法示例:

VisualBasic

set rec=cn.openschema(AdSchemaTables,array(null,null,null,"table")) ' 返回所有表

set rec=cn.openschema( AdSchemaTables,array("ast",null,null,"table")) ' 返回 AST 库所有表

set rec=cn.openschema(AdSchemaTables,array(null,null,null,"view"))  ' 返回所有视图

set rec=cn.openschema(AdSchemaTables)  ' 返回所有存储过程

Delphi

rs := TADODataSet.Create(Self);

adocn.OpenSchema(siTables,VarArrayOf([Unassigned,Unassigned,Unassigned,Unassigned]),EmptyParam,rs);

检测某张表的信息,表不存在时返回空记录

function HasTable(cn:tadoconnection;tablename:string):Boolean;
var
  rs : TADODataSet;
begin
  rs := TADODataSet.Create(Self);
  cn.OpenSchema(siTables,VarArrayOf([Unassigned,Unassigned,tablename,'TABLE']),EmptyParam,rs);
  result := not rs.Eof;
  rs.Close;
  rs.Free;
end;
 
function HasTable(cn:_Connection;tablename:string):Boolean;
var
  rs : _Recordset;
begin
  rs := cn.OpenSchema(AdSchemaTables ,VarArrayOf([Unassigned,Unassigned,tablename,'TABLE']),EmptyParam);
  result := not rs.Eof;
  rs.Close;
end;

检测某张表的字段信息,字段不存在时返回空记录

rs := TADODataSet.Create(Self);
cn.OpenSchema(siColumns,VarArrayOf([Unassigned,Unassigned,'tablename','columnname']),EmptyParam,rs);