程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 獲取ACCESS2000數據庫中的所有表的名稱

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

編輯:vc教程

原理就是通過枚舉數據庫中的表的類型,用戶建立的表的類型一般是TBALE。所以通過判斷當前數據庫中表的類型,就可以獲取表的名稱了。

初始化部分

在stdafx.h中添加:

#include <icrsint.h>
#include <basetsd.h>
#include <ole2.h>

#import "c:Program FilesCommon FilesSystemADOmsado15.dll"
no_namespace rename("EOF", "EndOfFile") 

在主對話框的頭文件中,映射一個:

 CListBox m_strList;

實現部分說明: 

在構造函數中添加:

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

實現代碼:

//枚舉數據表的名稱處理

 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 %s", pErr->Number, pErr->Description);
   AfxMessageBox(strError);
        }
    }
}

//打印COM的錯誤信息

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 Code 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() )
 {

  m_strList.ResetContent();
  strFileName = dlg.GetPathName();
  lstrcpy(FileName,strFileName);
  OpenSchemaX(FileName);
 } 

釋放部分:

LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 switch(message) {
 case WM_CLOSE:
  CoUninitialize(); 
  break;
 default:
  break;
 }
 return CDialog::WindowProc(message, wParam, lParam);
}

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved