网上只找到VB代码,折腾了不少时间,把代码翻译为VC代码。主要参考这三篇文章:1,2,3。
参数说明:
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; }
相关阅读:
*** walker ***