Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9549396
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 22:02:40

用C 代码建立和压缩ACCESS数据库文件

作者:

  ACCESS的数据库引擎MS JET 4.0是目前应用很广的小型数据库引擎,它具有使用简单,费用低廉(基本上是免费),对机器的配置要求低和对操作者的技术要求低等特点。在使用MS JET的时候如果我们的程序能够自动建立和维护所用的*.MDB文件,那么我们的小程序将会显得更专业。下面简单介绍一下如何动态建立*.MDB文件和压缩*.MDB文件的操作,以下代码都是基于ADO数据编程。

1) 动态建立*.MDB文件。

#include 

#include 

#include 

#include 

#pragma comment(lib, "comsupp.lib")

#pragma comment(lib, "shlwapi.lib")



CComPtrCatalog;

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 指定的表存在。 

} 
使用智能指针的方法同理。
CComPtrTables = NULL; 

Catalog->get_Tables(&Tables); 

CComPtrTable = NULL; 

Tables->get_Item(CComVariant(_T("Table Name")), &Table); 

2) 压缩*.MDB文件。

#include 



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文件转换为当前最新的版本。
CComPtrEngine;

// 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了。
阅读(428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~