以OpenSchema方式打开所有的表之后,怎样判断是否是"SYSTEM TABLE"?

解决方案 »

  1.   

    http://support.microsoft.com/kb/182831
    里头的去除SYSTEM TABLE的相关代码我没有看懂:
           while (VARIANT_TRUE != Rs1->GetadoEOF())
                 {
                    // Traversing through the Fields collection to get the values.
                    if(!csTemp.IsEmpty())
                      csTemp += " ; ";                varValue = Rs1->Fields->GetItem(_variant_t((long)2))->Value;
                    if(varValue.vt == VT_BSTR)
                      csTemp += varValue.bstrVal;
                    else
                    if(varValue.vt == VT_UI4)
                      csTemp.Format("%s %l",csTemp,varValue.lVal);                Rs1->MoveNext();
                 }
    VT_BSTR是SYSTEM TABLE系统表吗
      

  2.   

    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset;
    m_pConnection.CreateInstance(__uuidof(Connection));
      try                 
     {    
      _bstr_t strConnect = "Provider=SQLOLEDB; Server="服务器名称";Database="数据库名称";uid="SA";pwd=""";
      m_pConnection->Open(strConnect,"","",adModeUnknown);
      }
      catch(_com_error e)
      {
       AfxMessageBox("数据库连接失败!");
       }
       _variant_t vFieldValue;
       CString strFieldValue;
       m_pRecordset=m_pConnection->OpenSchema(adSchemaTables);
    while(VARIANT_FALSE==m_pRecordset->adoEOF)
    {
    strFieldValue=(char*)_bstr_t(m_pRecordset->GetCollect("TABLE_TYPE"));
              if(!strcmp(strFieldValue.GetBuffer(0),"TABLE")||!strcmp(strFieldValue.GetBuffer(0),"table"))
    {
     strFieldValue.ReleaseBuffer();
     strFieldValue=(char*)_bstr_t(m_pRecordset->GetCollect("TABLE_NAME"));
              }strFieldValue得到的就是非系统表.