手头的项目,需要枚举数据库中的表然后让用户来选择,我是使用ADOX
1.获取表count
2.strTableName = (LPCTSTR)m_pCatalog->Tables->GetIte(nTableIndex)->GetName();获取表名字
可是这样做一个问题就是,枚举出来一大堆系统的表,如sql-server的系统信息表,请问各位高手怎么只枚举用户的表
急!

解决方案 »

  1.   

    pRstSchema = pConnection->OpenSchema(adSchemaTables);
                _bstr_t table_name = pRstSchema->Fields->
                    GetItem("TABLE_NAME")->Value;//获取表的名称
      

  2.   

    taianmonkey() ,这位老大,我就是用这种方法枚举的,可是总有系统表在结果集中... ...
      

  3.   

    m_strTType=(char *)(_bstr_t)m_aRs->GetCollect(_T("TABLE_TYPE")); 
    if(m_strTType.CompareNoCase(_T("TABLE"))==0)
    {  
                                             ............
                                            ......
                                            }你可以如上只取用户表,而过漓系统表等!
      

  4.   

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