首先在 stdafx.h 中包含如下头文件 #import c:\program files\common files\system\ado\msadox.dll // 创建数据库必用 #importc:\program files\common files\system\ado\msado15.dll named_guids rename(eof,adoeof), rename(bof,adobof) msado
首先在stdafx.h中包含如下头文件
#import c:\program files\common files\system\ado\msadox.dll // 创建数据库必用
#importc:\program files\common files\system\ado\msado15.dll named_guids rename(eof,adoeof), rename(bof,adobof)
msadox.dll msado15.dll根据自己电脑上的位置进行加载,备注:两个#import位置不能调换,调换链接出错
1. 创建数据库
// 创建数据库
void ctestdlg::oncreateadomdb()
{
hresult hr = s_ok; cstring filename=c:\\test.mdb;
//set activeconnection of catalog to this string
cstring strcnn(_t(provider=microsoft.jet.oledb.4.0;data source=+filename));
try
{
adox::_catalogptr m_pcatalog = null;
hr = m_pcatalog.createinstance(__uuidof (adox::catalog));
if(failed(hr))
{
_com_issue_error(hr);
}
else
{
m_pcatalog->create(_bstr_t(strcnn));
//create mdb
}
afxmessagebox(_t(ok));
}
catch(_com_error &e)
{
// notify the user of errors if any.
afxmessagebox(_t(error));
}
}
2、 打开数据库
bool ctestapp::initinstance()
{
afxenablecontrolcontainer();
coinitialize(null);
.......
return true;
}
3. 创建新表
void ctestdlg::onmaincreate()
{
try
{
_connectionptr pconn;pconn.createinstance(__uuidof(connection));
_recordsetptr prs; prs.createinstance(__uuidof(recordset));
_commandptr cmd; cmd.createinstance( __uuidof( command ) );
try
{
cstring dd; cstring file=c:\\nxyh.mdb;
//cstring dd; cstring file=nxyh.mdb;
dd.format(provider=microsoft.jet.oledb.4.0;data source=%s,file);
pconn->open((_bstr_t)dd,,,admodeunknown); // 打开本地access库demo.mdb
}
catch(_com_error e)
{
afxmessagebox(数据库连接失败,确认数据库nxyh.mdb是否在当前路径下!);
}
// 如果本表不存在时,可以创建本表,存在时无法创建.
try
{
_variant_t recordsaffected; cstring command1,command2,myfilename=yours;
command1.format(create table %s(id integer,username text(5),old integer,birthday
datetime),myfilename);
pconn->execute(_bstr_t(command1),&recordsaffected,adcmdtext);
command2.format(insert into %s(id,username,old,birthday) values
(1,'washton',26,'1970/1/1'),myfilename);
pconn->execute(_bstr_t(command2),&recordsaffected,adcmdtext);
afxmessagebox(created.);
}
catch(...)
{
afxmessagebox(table have already created.);
}
}
catch(...)
{
}
}
4. 删除记录
void ctestdlg::onmaindel()
{
try
{
_connectionptr pconn;
_recordsetptr prs;
pconn.createinstance(__uuidof(connection));
prs.createinstance(__uuidof(recordset));
try
{
cstring dd; cstring file=c:\\nxyh.mdb;
dd.format(provider=microsoft.jet.oledb.4.0;data source=%s,file);
pconn->open((_bstr_t)dd,,,admodeunknown); // 打开本地access库demo.mdb
}
catch(_com_error e)
{
afxmessagebox(数据库连接失败,确认数据库nxyh.mdb是否在当前路径下!);
}
try
{
prs->open(select * from coordinate, // 查询demotable表中所有字段
pconn.getinterfaceptr(), // 获取库接库的idispatch指针
adopendynamic,
adlockoptimistic,
adcmdtext );
}
catch(_com_error *e)
{
afxmessagebox(e->errormessage());
}
_variant_t var;
while (!prs->adoeof)
{
prs->movefirst();
prs->delete(adaffectcurrent); //删除当前记录
prs->movenext();
}
messagebox(delete--over); prs->update();
prs->close(); pconn->close(); prs=null; pconn=null;
}
catch (_com_error &e )
{
printf(error:\n);
printf(code = %08lx\n, e.error());
printf(meaning = %s\n, e.errormessage());
printf(source = %s\n, (lpcstr) e.source());
}
}
5. 增加记录
void ctestdlg::onmainadd()
{
try
{
_connectionptr pconn;
_recordsetptr prs;
pconn.createinstance(__uuidof(connection));
prs.createinstance(__uuidof(recordset));
try
{
// 打开本地access库demo.mdb
pconn->open(provider=microsoft.jet.oledb.4.0;data source=nxyh.mdb,,,admodeunknown);
}
catch(_com_error e)
{
afxmessagebox(数据库连接失败,确认数据库nxyh.mdb是否在当前路径下!);
}
try
{
prs->open(select * from coordinate, // 查询demotable表中所有字段
pconn.getinterfaceptr(), // 获取库接库的idispatch指针
adopendynamic,
adlockoptimistic,
adcmdtext );
}
catch(_com_error *e)
{
afxmessagebox(e->errormessage());
}
// 增加新元素
xx=123.345; yy=222.434; hh=1445;
for(int i=0;i {
m_name.format(d%d,i+1);
prs->addnew();
//prs->putcollect(id,_variant_t((long)(i+10)));
prs->putcollect(name, _variant_t(m_name));
prs->putcollect(x,_variant_t((double)(xx)));
prs->putcollect(y,_variant_t((double)(yy)));
prs->putcollect(h,_variant_t((double)(hh)));
}
prs->update(); messagebox(add--over);
prs->close(); pconn->close(); prs=null; pconn=null;
}
catch (_com_error &e )
{
printf(error:\n);
printf(code = %08lx\n, e.error());
printf(meaning = %s\n, e.errormessage());
printf(source = %s\n, (lpcstr) e.source());
}
}
6. 修改记录
void ctestdlg::onmainchange()
{
try
{
_connectionptr pconn;
_recordsetptr prs;
pconn.createinstance(__uuidof(connection));
prs.createinstance(__uuidof(recordset));
try
{
// 打开本地access库demo.mdb
pconn->open(provider=microsoft.jet.oledb.4.0;data source=nxyh.mdb,,,admodeunknown);
}
catch(_com_error e)
{
afxmessagebox(数据库连接失败,确认数据库nxyh.mdb是否在当前路径下!);
}
try
{
prs->open(select * from coordinate, // 查询demotable表中所有字段
pconn.getinterfaceptr(), // 获取库接库的idispatch指针
adopendynamic,
adlockoptimistic,
adcmdtext );
}
catch(_com_error *e)
{
afxmessagebox(e->errormessage());
}
// 修改数据
_variant_t var;
while (!prs->adoeof)
{
//var = prs->getcollect(name);
//if(var.vt != vt_null) m_name = (lpcstr)_bstr_t(var);
//messagebox(m_name); //m_name=m_name.left(2)+*;
//m_name+=main;
var = prs->getcollect(x);
if(var.vt != vt_null) m_x = (lpcstr)_bstr_t(var);
double xx=100.789; //xx+=atof(m_x);
prs->putcollect(x,_variant_t((double)(xx)));
//prs->putcollect(name, _variant_t(m_name));
prs->movenext();
}
messagebox(change--over);
prs->update();
prs->close(); pconn->close(); prs=null; pconn=null;
}
catch (_com_error &e )
{
printf(error:\n);
printf(code = %08lx\n, e.error());
printf(meaning = %s\n, e.errormessage());
printf(source = %s\n, (lpcstr) e.source());
}
}