用C++代码建立和压缩Access数据库文件
作者陈建初
ACCESS的数据库引擎MS JET 4.0是目前应用很广的小型数据库引擎,它具有使用简单,费用低廉(基本上是免费),对机器的配置要求低和对操作者的技术要求低等特点。在使用MS JET的时候假如我们的程序能够自动建立和维护所用的*.MDB文件,那么我们的小程序将会显得更专业。下面简单介绍一下如何动态建立*.MDB文件和压缩*.MDB文件的操作,以下代码都是基于ADO数据编程。
1) 动态建立*.MDB文件。
#include %26lt;adoint.h%26gt;
#include %26lt;adoctint.h%26gt;
#include %26lt;comdef.h%26gt;
#include %26lt;shwapi.h%26gt;
#pragma comment(lib, "comsupp.lib")
#pragma comment(lib, "shlwapi.lib")
CComPtr%26lt;ADOCatalog%26gt;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-%26gt;Create(CComBSTR(szConnStr), %26varConn);
if (FAILED(hr))
{
throw _com_error(hr, NULL);
}
上面使用了ADOX接口和智能指针的方法,假如你使用#import指令来引入ADOX库那么就更方便了。
#import %26quot;c:\program files\common files\system\ado\msadox.dll%26quot; using namespace ADOX;
_CatalogPtr pCatalog; pCatalog.CreateInstance(__uuidof(Catalog));
pCatalog-%26gt;Create(CComBSTR(szConnStr));
得到了Catalog对象就可以操作它里面的子对象(Groups, Procedures, Tables, Views, Users)等,例如要检查某个表是否已经存在
TablesPtr pTables = pCatalog-%26gt;GetTables();
_Table* pTable = NULL;
if (pTables-%26gt;get_Item(CComVariant(_T(%26quot;Table Name%26quot;)), %26amp;pTable) == S_OK)
{
// OK 指定的表存在。
}
使用智能指针的方法同理。
CComPtr%26lt;ADOTables%26gt;Tables = NULL;
Catalog-%26gt;get_Tables(%26amp;Tables);
CComPtr%26lt;ADOTable%26gt;Table = NULL;
Tables-%26gt;get_Item(CComVariant(_T(%26quot;Table Name%26quot;)), %26amp;Table);
2) 压缩*.MDB文件。
#include %26lt;adojet.h%26gt;
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%26lt;IJetEngine%26gt;Engine;
// if (SUCCEEDED(Engine.CoCreateInstance(__uuidof(JetEngine))))
if (SUCCEEDED(Engine.CoCreateInstance(L%26quot;JRO.JetEngine%26quot;)))
{
Engine-%26gt;CompactDatabase(CComBSTR(szSrc), CComBSTR(szDst));
}
MS的文档指出自MDAC2.6开始便不再包含JET组件,而MDAC2.7是JRO的最后一个版本,而且JRO不能在WIN64上使用。看样子是M$怂恿我们用SQL SERVER了。
用C++代码建立和压缩ACCESS数据库文件
2008-03-08 10:35:42 作者
相关文章
- · 使用MIDAS访问远程Access数据库
- · 用程序实现压缩access(*.mdb)数据库的方法
- · 类似Access查找中的记忆功能
- · 在Access中创建表及如何指定字段类型
- · 谈用Access数据库做服务器
- · Delphi操作ACCESS技巧集
- · 使用ADO,多线程访问ACCESS数据库的开发。
- · AccesS密码的打击
- · 在CB中使用ACCESS数据库
- · 用ADO压缩Access2000库
- · 程序中传递密码给数据库文件
- · SQL SERVER与ACCESS,EXCEL的数据转换C++
- · Access数据库规格C++
- · java:使用路径访问Access数据库
- · Generic Data Access Objects 设计模式
- · Sun Java System Access Manager本地绕过验证漏洞
- · 用PHP和ACCESS写聊天室(九)
- · 用PHP和ACCESS写聊天室(十)
- · 用PHP和ACCESS写聊天室(八)
- · 用PHP和ACCESS写聊天室(七)
