首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ ADO 存取 Access 2000:列舉所有使用者資料表名稱

     編輯:VC 教學

核心原理

利用 ADO OpenSchema 方法搭配 adSchemaTables 列舉資料庫結構描述,篩選 TABLE_TYPE = "TABLE" 即可取得所有使用者建立的資料表名稱(排除系統表、檢視表等)。

專案設定

1. stdafx.h 引入 ADO 型別庫

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

#import "C:\\Program Files\\Common Files\\System\\ADO\\msado15.dll" \
    no_namespace rename("EOF", "EndOfFile")

2. 對話框標頭檔宣告列表方塊變數

class CMyDialog : public CDialog
{
    // ...
    CListBox m_strList;  // 顯示資料表名稱
};

3. 建構函數初始化 COM

CMyDialog::CMyDialog()
{
    ::CoInitialize(NULL);  // 初始化 COM 程式庫
}

列舉資料表完整函數

void OpenSchemaX(TCHAR* TableName)  // TableName 為 .mdb 完整路徑
{
    HRESULT hr = S_OK;
    ::CoInitialize(NULL);

    IADORecordBinding* picRs = NULL;
    _RecordsetPtr pRstSchema("ADODB.Recordset");
    _ConnectionPtr pConnection("ADODB.Connection");

    try
    {
        // 設定連線字串
        pConnection->ConnectionString = TableName;
        pConnection->Provider = "Microsoft.Jet.OLEDB.4.0";
        pConnection->Open(pConnection->ConnectionString, "", "", adModeUnknown);

        // 取得 RecordBinding 介面(可選,用於強型別繫結)
        pRstSchema->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs);

        // 關鍵:開啟資料表結構描述
        pRstSchema = pConnection->OpenSchema(adSchemaTables);

        while (!(pRstSchema->EndOfFile))
        {
            _bstr_t table_name = pRstSchema->Fields->GetItem("TABLE_NAME")->Value;
            _bstr_t table_type = pRstSchema->Fields->GetItem("TABLE_TYPE")->Value;

            CString strTableType((LPCSTR)table_type);
            if (strTableType == _T("TABLE"))  // 僅保留使用者資料表
            {
                m_strList.AddString((LPCSTR)table_name);
            }
            pRstSchema->MoveNext();
        }

        pRstSchema->Close();
        pConnection->Close();
    }
    catch (_com_error& e)
    {
        // 錯誤處理:印出 Provider 錯誤與 COM 錯誤
        PrintProviderError(pConnection);
        PrintComError(e);
    }

    ::CoUninitialize();
}

關鍵點解析

  • adSchemaTables:列舉資料表、檢視、系統表等結構描述。
  • TABLE_TYPE 欄位值:"TABLE"(使用者表)、"VIEW"、"SYSTEM TABLE"、"ALIAS" 等。
  • _bstr_t:智慧型 BSTR 包裝類別,自動管理記憶體並支援轉換為 CString。
  • CoInitialize/CoUninitialize:每個執行緒呼叫 COM 前必須初始化,結束時釋放。
  • 錯誤處理使用 _com_error 捕捉 ADO/COM 例外。

擴充應用

  • 列舉欄位:OpenSchema(adSchemaColumns, ...) 並篩選 TABLE_NAME。
  • 列舉索引/主鍵/外鍵:adSchemaIndexes、adSchemaPrimaryKeys、adSchemaForeignKeys。
  • 支援 SQL Server:將 Provider 改為 SQLOLEDB,連線字串調整為 Data Source=...;Initial Catalog=...;UID=...;PWD=...。

此技術適用於資料庫工具、動態建構查詢介面、匯出/匯入精靈等需自動發現資料表結構的場合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved