程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 用C++代碼建立和壓縮ACCESS數據庫文件

用C++代碼建立和壓縮ACCESS數據庫文件

編輯:關於VC++

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了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved