ADO怎样得到表名 用ADO怎样得到表的个数和每个表的名字? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CdbToolsDlg::GetDatabaseSchema(_ConnectionPtr pConnection, _bstr_t* bstrTableNames, int* nTableCount, _bstr_t bstrFilter) { ASSERT(pConnection->State==adStateOpen); _RecordsetPtr pRstSchema = NULL; SAFEARRAY FAR* psa = NULL; SAFEARRAYBOUND rgsabound; _variant_t var; _variant_t Array; rgsabound.lLbound = 0; rgsabound.cElements = 4; psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound); var.vt = VT_EMPTY; long ix; ix = 0; SafeArrayPutElement(psa, &ix, &var); ix= 1; SafeArrayPutElement(psa, &ix, &var); ix = 2; SafeArrayPutElement(psa, &ix, &var); var.vt = VT_BSTR; //表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM TABLE" "VIEW""GLOBAL TEMPORARY""LOCAL TEMPORARY""SYSTEM VIEW" var.bstrVal = bstrFilter;//这里bstrFilter="TABLE"就可以了 ix = 3; SafeArrayPutElement(psa, &ix, &var); var.vt=VT_EMPTY; Array.vt = VT_ARRAY |VT_VARIANT; Array.parray = psa; try { pRstSchema = pConnection->OpenSchema(adSchemaTables,&Array); *nTableCount=0; while(!(pRstSchema->EndOfFile)) { if(bstrTableNames!=NULL) { _bstr_t table_name = pRstSchema->Fields-> GetItem("TABLE_NAME")->Value; *(bstrTableNames++)=table_name; } *nTableCount+=1; pRstSchema->MoveNext(); } } catch (_com_error e) { PrintComError(e); } if(pRstSchema) if (pRstSchema->State == adStateOpen) pRstSchema->Close(); } Q ADO如何取得数据库中表的表名A_variant_t vFieldValue;CString strFieldValue;m_pRs=m_pConnection->OpenSchema(adSchemaTables);while(VARIANT_FALSE==m_pRs->IsEOF){ strFieldValue=(char*)_bstr_t(m_pRs->GetCollect("TABLE_TYPE")); if(!strcmp(strFieldValue.GetBuffer(0),"TABLE")||!strcmp(strFieldValue.GetBuffer(0),"table")) { strFieldValue.ReleaseBuffer(); strFieldValue=(char*)_bstr_t(m_pRs->GetCollect("TABLE_NAME")); m_ctlList.AddString(strFieldValue); ///把所有的表名加到控件 } m_pRs->MoveNext();}m_pRs->Close(); OpenSchema获得所有的用户表和系统表 用OpenSchema 方法语法Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)返回值返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。参数QueryType所要运行的模式查询类型,可以为下列任意常量。Criteria可选。每个 QueryType 选项的查询限制条件数组,如下所列:小写为QueryType 值 大写为Criteria 值 AdSchemaAsserts CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAME AdSchemaCatalogs CATALOG_NAME AdSchemaCharacterSets CHARACTER_SET_CATALOGCHARACTER_SET_SCHEMACHARACTER_SET_NAME AdSchemaCheckConstraints CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAME AdSchemaCollations COLLATION_CATALOGCOLLATION_SCHEMACOLLATION_NAME AdSchemaColumnDomainUsage DOMAIN_CATALOGDOMAIN_SCHEMADOMAIN_NAMECOLUMN_NAME AdSchemaColumnPrivileges TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAMEGRANTORGRANTEE adSchemaColumns TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME adSchemaConstraintColumnUsage TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME adSchemaConstraintTableUsage TABLE_CATALOGTABLE_SCHEMATABLE_NAME adSchemaForeignKeys PK_TABLE_CATALOGPK_TABLE_SCHEMAPK_TABLE_NAMEFK_TABLE_CATALOGFK_TABLE_SCHEMAFK_TABLE_NAME adSchemaIndexes TABLE_CATALOGTABLE_SCHEMAINDEX_NAMETYPETABLE_NAME adSchemaKeyColumnUsage CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME adSchemaPrimaryKeys PK_TABLE_CATALOGPK_TABLE_SCHEMAPK_TABLE_NAME adSchemaProcedureColumns PROCEDURE_CATALOGPROCEDURE_SCHEMAPROCEDURE_NAMECOLUMN_NAME adSchemaProcedureParameters PROCEDURE_CATALOGPROCEDURE_SCHEMAPROCEDURE_NAMEPARAMTER_NAME adSchemaProcedures PROCEDURE_CATALOGPROCEDURE_SCHEMAPROCEDURE_NAMEPROCEDURE_TYPE adSchemaProviderSpecific 参见说明 adSchemaProviderTypes DATA_TYPEBEST_MATCH adSchemaReferentialConstraints CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAME adSchemaSchemata CATALOG_NAMESCHEMA_NAMESCHEMA_OWNER adSchemaSQLLanguages <无> adSchemaStatistics TABLE_CATALOGTABLE_SCHEMATABLE_NAME adSchemaTableConstraints CONSTRAINT_CATALOGCONSTRAINT_SCHEMACONSTRAINT_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMECONSTRAINT_TYPE adSchemaTablePrivileges TABLE_CATALOGTABLE_SCHEMATABLE_NAMEGRANTORGRANTEE adSchemaTables TABLE_CATALOGTABLE_SCHEMATABLE_NAMETABLE_TYPE adSchemaTranslations TRANSLATION_CATALOGTRANSLATION_SCHEMATRANSLATION_NAME adSchemaUsagePrivileges OBJECT_CATALOGOBJECT_SCHEMAOBJECT_NAMEOBJECT_TYPEGRANTORGRANTEE adSchemaViewColumnUsage VIEW_CATALOGVIEW_SCHEMAVIEW_NAME adSchemaViewTableUsage VIEW_CATALOGVIEW_SCHEMAVIEW_NAME adSchemaViews TABLE_CATALOGTABLE_SCHEMATABLE_NAME SchemaIDOLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。说明OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。远程数据服务用法OpenSchema 方法在客户端 Connection 对象上无效。注意在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。 m_pRs->IsEOF\pRstSchema->EndOfFile都没有定义呀 m_pRs->IsEOF\pRstSchema->EndOfFile这里的访问名字要看你是怎么使用的import语句来改名的。就是rename("eof",... 类似atoi、atol的函数有多少? 单文档SID中CMainFrame析构里面使用KillTimer导致内存泄露,不知原因 最近想做个项目,大伙给个建议 vc的编译过程不太理解?哪位大虾帮帮忙 求如何从HBITMAP中取出里面的位图数据 如何用 HTTP Post 文件给Web site 急急急急 本地化(.exe)组件的_tWinMain 谁能告诉我关于pci 8255在vc++里怎么调用啊,谢谢 请问哪位高手能给我说说矢量图是什么?! 怎样判断某个文件是否设置了共享属性? 一个菜鸟的问题:如何自己做一个系统的封面. 请教大家关于线程调度的翻译
{
ASSERT(pConnection->State==adStateOpen);
_RecordsetPtr pRstSchema = NULL;
SAFEARRAY FAR* psa = NULL;
SAFEARRAYBOUND rgsabound;
_variant_t var;
_variant_t Array;
rgsabound.lLbound = 0;
rgsabound.cElements = 4;
psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);
var.vt = VT_EMPTY;
long ix;
ix = 0;
SafeArrayPutElement(psa, &ix, &var);
ix= 1;
SafeArrayPutElement(psa, &ix, &var);
ix = 2;
SafeArrayPutElement(psa, &ix, &var);
var.vt = VT_BSTR;
//表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM TABLE"
"VIEW""GLOBAL TEMPORARY""LOCAL TEMPORARY""SYSTEM VIEW"
var.bstrVal = bstrFilter;//这里bstrFilter="TABLE"就可以了
ix = 3;
SafeArrayPutElement(psa, &ix, &var);
var.vt=VT_EMPTY;
Array.vt = VT_ARRAY |VT_VARIANT;
Array.parray = psa;
try
{
pRstSchema = pConnection->OpenSchema(adSchemaTables,&Array);
*nTableCount=0;
while(!(pRstSchema->EndOfFile))
{
if(bstrTableNames!=NULL)
{
_bstr_t table_name = pRstSchema->Fields->
GetItem("TABLE_NAME")->Value;
*(bstrTableNames++)=table_name;
}
*nTableCount+=1;
pRstSchema->MoveNext();
}
}
catch (_com_error e) {
PrintComError(e);
}
if(pRstSchema)
if (pRstSchema->State == adStateOpen)
pRstSchema->Close();
}
A
_variant_t vFieldValue;
CString strFieldValue;
m_pRs=m_pConnection->OpenSchema(adSchemaTables);
while(VARIANT_FALSE==m_pRs->IsEOF)
{
strFieldValue=(char*)_bstr_t(m_pRs->GetCollect("TABLE_TYPE"));
if(!strcmp(strFieldValue.GetBuffer(0),"TABLE")||!strcmp(strFieldValue.GetBuffer(0),"table"))
{
strFieldValue.ReleaseBuffer();
strFieldValue=(char*)_bstr_t(m_pRs->GetCollect("TABLE_NAME"));
m_ctlList.AddString(strFieldValue); ///把所有的表名加到控件
}
m_pRs->MoveNext();
}
m_pRs->Close();
语法Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)返回值返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。参数QueryType所要运行的模式查询类型,可以为下列任意常量。Criteria可选。每个 QueryType 选项的查询限制条件数组,如下所列:小写为QueryType 值
大写为Criteria 值 AdSchemaAsserts
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME AdSchemaCatalogs
CATALOG_NAME AdSchemaCharacterSets
CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME AdSchemaCheckConstraints
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME AdSchemaCollations
COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME AdSchemaColumnDomainUsage
DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME AdSchemaColumnPrivileges
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE adSchemaColumns
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME adSchemaConstraintColumnUsage
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME adSchemaConstraintTableUsage
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME adSchemaForeignKeys
PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME adSchemaIndexes
TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME adSchemaKeyColumnUsage
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME adSchemaPrimaryKeys
PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME adSchemaProcedureColumns
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME adSchemaProcedureParameters
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_NAME adSchemaProcedures
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE adSchemaProviderSpecific
参见说明 adSchemaProviderTypes
DATA_TYPE
BEST_MATCH adSchemaReferentialConstraints
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME adSchemaSchemata
CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER adSchemaSQLLanguages
<无> adSchemaStatistics
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME adSchemaTableConstraints
CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE adSchemaTablePrivileges
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE adSchemaTables
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE adSchemaTranslations
TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME adSchemaUsagePrivileges
OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE adSchemaViewColumnUsage
VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME adSchemaViewTableUsage
VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME adSchemaViews
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
SchemaIDOLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。说明OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。远程数据服务用法OpenSchema 方法在客户端 Connection 对象上无效。注意在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。