獲取ACCESS2000數據庫中所有表的名稱_Access數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      void OpenSchemaX(TCHAR *TableName)
      {
      HRESULT hr = S_OK;

      ::CoInitialize(NULL); //初始化Com

      IADORecordBinding *picRs = NULL;

      _RecordsetPtr pRstSchema("ADODB.Recordset");
      _ConnectionPtr pConnection("ADODB.Connection" );

      pConnection->ConnectionString = TableName;
      pConnection->Provider = "Microsoft.Jet.OLEDB.4.0";

      try
      {
      pConnection->Open(pConnection->ConnectionString, "", "", adModeUnknown);
      pRstSchema->QueryInterface(
      __uuidof(IADORecordBinding), (LPVOID*)&picRs);

      pRstSchema = pConnection->OpenSchema(adSchemaTables);//枚舉表的名稱處理

      while(!(pRstSchema->EndOfFile))
      {
      CString strTableType;

      _bstr_t table_name = pRstSchema->Fields->
      GetItem("TABLE_NAME")->Value;//獲取表的名稱

      _bstr_t table_type = pRstSchema->Fields->
      GetItem("TABLE_TYPE")->Value;//獲取表的類型

      strTableType.Format("%s",(LPCSTR) table_type);

      if(!lstrcmp(strTableType,_T("TABLE")))
      {
      m_strList.AddString((LPCSTR) table_name);//添加表的名稱
      }

      pRstSchema->MoveNext();
      }
      // Clean up objects before exit.

      pRstSchema->Close();
      pConnection->Close();
      }

      catch (_com_error &e)
      {
      // Notify the user of errors if any.
      // Pass a connection pointer accessed from the Connection.
      PrintProviderError(pConnection);
      PrintComError(e);
      }
      CoUninitialize();
      }

      void PrintProviderError(_ConnectionPtr pConnection)
      {
      ErrorPtr pErr = NULL;

      if( (pConnection->Errors->Count) > 0)
      {
      long nCount = pConnection->Errors->Count;
      // Collection ranges from 0 to nCount -1.
      for(long i = 0;i < nCount;i )
      {
      pErr = pConnection->Errors->GetItem(i);
      CString strError;
      strError.Format("Error number: %x\t%s", pErr->Number, pErr->Description);
      AfxMessageBox(strError);
      }
      }
      }

      void PrintComError(_com_error &e)
      {
      _bstr_t bstrSource(e.Source());
      _bstr_t bstrDescription(e.Description());

      // Print COM errors.
      CString strError;
      strError.Format("Error number: Description = %s\tCode meaning = %s",(LPCSTR) bstrDescription, e.ErrorMessage());
      AfxMessageBox(strError);
      }

      調用方法:

      CString strFileName;
      TCHAR FileName[MAX_PATH];
      TCHAR bigBuff[2048] = _T(""); // maximum common dialog buffer size
      TCHAR szFilter[] = _T("Text Files (*.mdb)|*.mdb|All Files (*.*)|*.*
      ");
      CFileDialog dlg(TRUE, NULL, NULL,
      OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, szFilter);

      // Modify OPENFILENAME members directly to point to bigBuff
      dlg.m_ofn.lpstrFile = bigBuff;
      dlg.m_ofn.nMaxFile = sizeof(bigBuff);

      if(IDOK == dlg.DoModal() )
      {
      strFileName = dlg.GetPathName();
      lstrcpy(FileName,strFileName);
      OpenSchemaX(FileName);
      }(出處:風閃網路學院)

      來源:模板無憂//所屬分類:Access數據庫教程/更新時間:2008-08-22
      相關Access數據庫教程