分享
 
 
 

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

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

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

作者:陈建初

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有