ACCESS的數據庫引擎MS JET 4.0是目前應用很廣的小型數據庫引擎,它具有使用簡單,費用低廉(基本上是免費),對機器的配置要求低和對操作者的技術要求低等特點。在使用MS JET的時候如果我們的程序能夠自動建立和維護所用的*.MDB文件,那麼我們的小程序將會顯得更專業。下面簡單介紹一下如何動態建立*.MDB文件和壓縮*.MDB文件的操作,以下代碼都是基於ADO數據編程。 1) 動態建立*.MDB文件。
#include <adoint.h>
#include <adoctint.h>
#include <comdef.h>
#include <shwapi.h>
#pragma comment(lib, "comsupp.lib")
#pragma comment(lib, "shlwapi.lib")
CComPtr<ADOCatalog>Catalog;
HRESULT hr = Catalog.CoCreateInstance(L"ADOX.Catalog");
if (FAILED(hr))
{
throw _com_error(hr, NULL);
}
static const TCHAR szConnStr[] =
_T("Provider=Microsoft.Jet.OLEDB.4.0;")
_T("Data Source=C:\\TEST1.MDB;");
CComVariant varConn;
hr = Catalog->Create(CComBSTR(szConnStr), &varConn);
if (FAILED(hr))
{
throw _com_error(hr, NULL);
}
上面使用了ADOX接口和智能指針的方法,如果你使用#import指令來引入ADOX庫那麼就更方便了。
#import "c:\program files\common files\system\ado\msadox.dll" using namespace ADOX;
_CatalogPtr pCatalog; pCatalog.CreateInstance(__uuidof(Catalog));
pCatalog->Create(CComBSTR(szConnStr));
得到了Catalog對象就可以操作它裡面的子對象(Groups, Procedures, Tables, Views, Users)等,例如要檢查某個表是否已經存在 :
TablesPtr pTables = pCatalog->GetTables();
_Table* pTable = NULL;
if (pTables->get_Item(CComVariant(_T("Table Name")), &pTable) == S_OK)
{
// OK 指定的表存在。
}
使用智能指針的方法同理。
CComPtr<ADOTables>Tables = NULL;
Catalog->get_Tables(&Tables);
CComPtr<ADOTable>Table = NULL;
Tables->get_Item(CComVariant(_T("Table Name")), &Table);
2) 壓縮*.MDB文件。
#include <adojet.h>
static const TCHAR szSrc[] =
_T("Provider=Microsoft.Jet.OLEDB.4.0;")
_T("Data Source=C:\\TEST1.MDB;");
//_T("Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password=???");
static const TCHAR szDst[] =
_T("Provider=Microsoft.Jet.OLEDB.4.0;")
_T("Data Source=C:\\TEST2.MDB;");
//_T("Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password=???");
Jet OLEDB:Engine Type=5表示使用MS JET 4x版本的MDB文件,如果沒有給出本屬性則系統自動將壓縮後的MDB文件轉換為當前最新的版本。
CComPtr<IJetEngine>Engine;
// if (SUCCEEDED(Engine.CoCreateInstance(__uuidof(JetEngine))))
if (SUCCEEDED(Engine.CoCreateInstance(L"JRO.JetEngine")))
{
Engine->CompactDatabase(CComBSTR(szSrc), CComBSTR(szDst));
}
MS的文檔指出自MDAC2.6開始便不再包含JET組件,而MDAC2.7是JRO的最後一個版本,而且JRO不能在WIN64上使用。看樣子是M$慫恿我們用SQL SERVER了。