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

用VC++操作ACESS数据库(创建数据库、建立新表、连接、增删查改)

首先在 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());    
      }
}
其它类似信息

推荐信息