相关文章推荐
英勇无比的烈酒  ·  caused by ...·  2 年前    · 

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

ACCESS的数据库引擎MS JET 4.0是目前应用很广的小型数据库引擎,它具有使用简单,费用低廉(基本上是免费),对机器的配置要求低和对操作者的技术要求低等特点。在使用MS JET的时候如果我们的程序能够自动建立和维护所用的*.MDB文件,那么我们的小程序将会显得更专业。下面简单介绍一下如何动态建立*.MDB文件和压缩*.MDB文件的操作,以下代码都是基于ADO数据编程。 1) 动态建 数据库 脱机工作 找到 文件 的目录:参考路径 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA 复制后缀名...
实现上述两个相反的功能需注意以下几点:    1. access 不同于sqlserver,sqlserver可以一次性执行多条语句,比如"select * from a select * from b",同时查询两个表的结果,而 access 则不行,一次执行执行一条语句    2. sqlserver使用sql或odbc连接, access 用oledb连接    3. access 和...
每篇随便都得有个背景吧,这次做一个项目时,突然碰到这个样一个问题,需要将本地sqlserver中的数据导出到 access 后,再传输 access 数据库 ,所以就在想怎样实现这样的操作。后面经过在网上查找了一些资料结合以前的知识,搞了这样一个东西出来; 1 /// <summary> 2 /// 从sqlserver中导出数据到 access
1. Access 数据库 频繁的插入、查询操作之后,会生成大量的垃圾数据,造成该 数据库 mdb 文件 增大,从而影响软件的读取等操作; 2. Access 数据库 软件自带了“ 压缩 /修复”功能,通过这个功能可以删除这些垃圾数据,只保留我们软件产生的有用数据,删掉垃圾数据; 代码 如下: 1.引入DLL 文件 ,目录视具体情况而定 #import "C:\Program Files\Common Fi
本人在做专业课设计时需要将自己动手把 ACCESS 数据库 中数据转换到SQL Server 数据库 中。经过百般挫折也算是完成了,经过这般痛苦感觉,还是记录下来比较好,否则都对不起自己浪费的那好几个小时。废话不错说,切入正题。   在此之前,先跟大家说一下这两种 数据库 ,这样大家就会理解我为什么会转换 数据库 了。 Microsoft Office Access 简介   Microsoft Offic
http://www.360doc.com/content/10/1213/16/2172389_77738101.shtml 要注意的:在查找目标数据源是,不接受accdb格式的空aceess 建立 数据库 ,需要先转化为mdb格式的 access 数据库 ,方法是打开 access 建立 数据库 ,另存为ms2000,不知道2002-2003兼容版是不是也自动存储为mdb格式,至少2000版是兼容的
C++ 中使用 Access 数据库 Access 数据库 在管理中得到了广泛的应用,在长期的使用中已有很多数据资料存储在 Access 数据库 文件 中,用 C++ Builder编程时,往往也需要使用 Access 数据库 ,来实现数据的传递。   在 C++ Builder中使用 Access 数据库 既可以在设计期实现,也可以在运行期通过编程实现。下面就以一个简单的例子,来说明在 C++ Builder中如何使...