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

VC++ 動態建立 Access MDB 資料庫與資料表實作詳解

     編輯:VC 教學

技術棧

VC6.0 + Windows XP + Access 2000 (Jet 4.0),使用 `#import` 引入 ADO/ADOX 型別庫,透過智慧指標操作 COM 物件。

關鍵代碼片段

1. 引入型別庫


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

2. 建立 MDB 檔案


BOOL CreateMdb(LPCTSTR path)
{
    ::CoInitialize(NULL);
    HRESULT hr = S_OK;
    try {
        ADOX::_CatalogPtr cat; cat.CreateInstance(__uuidof(ADOX::Catalog));
        CString conn; conn.Format(_T("Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;"), path);
        cat->Create(_bstr_t(conn)); // 核心建庫語句
    } catch (_com_error& e) {
        AfxMessageBox(e.ErrorMessage()); ::CoUninitialize(); return FALSE;
    }
    ::CoUninitialize(); return TRUE;
}

3. 建立資料表


BOOL CreateTable(_ConnectionPtr& conn, LPCTSTR sql)
{
    _variant_t ra;
    try {
        conn->Execute(_bstr_t(sql), &ra, adCmdText);
    } catch (_com_error& e) {
        AfxMessageBox(e.ErrorMessage()); return FALSE;
    }
    return TRUE;
}

// 呼叫範例
CString sql = _T("CREATE TABLE AxisSave (ID INTEGER, X_Axis REAL, Y_Axis REAL, TestResult INTEGER)");
CreateTable(conn, sql);

完整流程封裝


BOOL CMyDlg::CreateDatabase()
{
    CString mdbPath = _T("C:\\Data\\Test.mdb");
    if (PathFileExists(mdbPath)) return TRUE; // 已存在

    CoInitialize(NULL);
    ADOX::_CatalogPtr cat; cat.CreateInstance(__uuidof(ADOX::Catalog));
    CString connStr; connStr.Format(_T("Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;"), mdbPath);
    cat->Create(_bstr_t(connStr));

    _ConnectionPtr conn; conn.CreateInstance(__uuidof(Connection));
    conn->Open(_bstr_t(connStr), "", "", adConnectUnspecified);

    CString sql = _T("CREATE TABLE Log (ID COUNTER PRIMARY KEY, Msg MEMO, LogTime DATETIME DEFAULT NOW())");
    conn->Execute(_bstr_t(sql), NULL, adExecuteNoRecords);

    conn->Close(); CoUninitialize();
    return TRUE;
}

注意事項

  • 欄位名稱勿使用保留字(如 Index、Order),否則 SQL 執行失敗。
  • Jet 4.0 支援 Unicode,字串欄位建議用 `TEXT(n)` 或 `MEMO`。
  • 建庫後立即可用 `_ConnectionPtr`、`_CommandPtr`、`_RecordsetPtr` 進行增刪改查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved