用ADO怎样得到表的个数和每个表的名字?

解决方案 »

  1.   

    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();  
    }
      

  2.   

    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();
      

  3.   

    OpenSchema获得所有的用户表和系统表
      

  4.   

    用OpenSchema 方法
    语法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。
      

  5.   

    m_pRs->IsEOF\pRstSchema->EndOfFile都没有定义呀
      

  6.   

    m_pRs->IsEOF\pRstSchema->EndOfFile这里的访问名字要看你是怎么使用的import语句来改名的。就是rename("eof",...