您好,欢迎访问一九零五行业门户网

ado操作access

有一个1.mdb的数据库,有一个zy的表,如何用ado操作。 先封转一个类,如下: .h class cdatasource {public:void freedata();void initdata();cdatasource();virtual ~cdatasource();_recordsetptr m_precordset;_connectionptr m_pconn;}; .cpp cdatasource
有一个1.mdb的数据库,有一个zy的表,如何用ado操作。
先封转一个类,如下:
.h
class cdatasource {public: void freedata(); void initdata(); cdatasource(); virtual ~cdatasource(); _recordsetptr m_precordset; _connectionptr m_pconn;};
.cpp
cdatasource::cdatasource(){}cdatasource::~cdatasource(){freedata();}void cdatasource::initdata(){ ::coinitialize(null); m_pconn.createinstance(adodb.connection); //初始化记录集对象 m_precordset.createinstance(adodb.recordset); try { m_pconn->open(provider=microsoft.jet.oledb.4.0;data source=c:1.mdb, , , admodeunknown); // m_pconn->connectionstring=provider=sqloledb.1;uid=sa;pwd=;database=ff; // m_pconn->open(, , , admodeunknown); m_precordset->open( select * from zy, _variant_t((idispatch *) m_pconn, true),adopenstatic, adlockreadonly, adcmdtext); } catch(_com_error &e) { ::afxmessagebox(e.errormessage()); }}void cdatasource::freedata(){ if (m_pconn) { m_pconn->close(); m_precordset.release(); m_pconn.release(); couninitialize(); }}
在主对话框里创建一个对象cdatasource m_ds;,在对话框起来的时候m_ds.initdata();
添加:
 m_ds.m_pconn->execute((_bstr_t)“查询语句”,null,adcmdtext);
   m_ds.m_precordset->requery(adcmdunknown);
删除:
 m_ds.m_pconn->execute((_bstr_t)“删除语句”,null,adcmdtext);
  m_ds.m_precordset->requery(adcmdunknown);
修改:
 m_ds.m_pconn->execute((_bstr_t)“修改语句”,null,adcmdtext);
 m_ds.m_precordset->requery(adcmdunknown);
遍历:
有个链表clistctrl m_list;
 while (!m_ds.m_precordset->endoffile)
 {
 m_list.insertitem(i,sdf);
  m_list.setitemtext(i,0,(lpctstr)(_bstr_t)m_ds.m_precordset->getcollect(id));
    m_list.setitemtext(i,1,(lpctstr)(_bstr_t)m_ds.m_precordset->getcollect(name));
  m_list.setitemtext(i++,2,(lpctstr)(_bstr_t)m_ds.m_precordset->getcollect(hobby));
  m_ds.m_precordset->movenext();
 }
 m_ds.m_precordset->movefirst();
问题:
win7上编译的ado程序无法在低版本系统上运行,创建ado时提示错误:0x80004002
如下语句:
hr1 = m_pconnection.createinstance(__uuidof(connection));
解决办法:
下载msado60_backcompat.tlb,地址见:http://download.csdn.net/detail/evsqiezi/8244221,相关代码导入修改为:
#import msado60_backcompat.tlb no_namespace rename(eof,endoffile)
其它类似信息

推荐信息