网上只找到VB代码,折腾了不少时间,把代码翻译为VC代码。主要参考这三篇文章:123

   参数说明:

   fileFrom: 外部数据库文件

   tableFrom: 外部数据库表

   fileTo: 主数据库文件

   tableTo: 主数据库文件中链接表的名字

//创建ACCESS数据库链接表
BOOL CACCADO::CreateLinkedTable(CString fileFrom, CString tableFrom, CString fileTo, CString tableTo)
{
    ADOX::_CatalogPtr pCatalog = NULL;
    try
    {
        pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
        CString connStr;
        connStr = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + fileTo + _T(";");
        pCatalog->PutActiveConnection(_bstr_t(connStr));
        ADOX::_TablePtr pTable = NULL;
        pTable.CreateInstance(_T("ADOX.Table"));
        pTable->ParentCatalog = pCatalog;
        pTable->Name = _bstr_t(tableTo);
                                       
        ADOX::PropertiesPtr pProperties = pTable->GetProperties();
        ADOX::PropertyPtr pProperty = NULL;
        pProperty = pProperties->GetItem(_T("Jet OLEDB:Create Link"));
        pProperty->Value = TRUE;
        pProperty = pProperties->GetItem(_T("Jet OLEDB:Link Datasource"));
        pProperty->Value = _bstr_t(fileFrom);
        pProperty = pProperties->GetItem(_T("Jet OLEDB:Remote Table Name"));
        pProperty->Value = _bstr_t(tableFrom);
                                       
        pCatalog->Tables->Append(_variant_t((IDispatch*)pTable));
        pCatalog->Tables->Refresh();  //刷新
    }
    catch(_com_error &e)
    {
        CString errmsg = _T("创建链接表出错:") + CString((LPCSTR)e.Description());
        AfxMessageBox(errmsg);
        return FALSE;
    }
    return TRUE;
}


相关阅读:

1、ADO数据库编程 - 总结

2、ADO判断ACCESS字段值是否为NULL

3、利用ADOX修改ACCESS表字段名(VC/MFC)

4、ADO获取表的所有字段名


*** walker ***