教你用ADO+VC在程序中完成创建和修改ACCESS数据库



http://blog.csdn.net/LBPeking/article/details/2229220


教你用ADO+VC在程序中完成创建和修改ACCESS数据库

    最近MSDN上多了好多问关于数据库方面开发的,这里为了回答一些朋友的问题,特别整理了一个大家容易忽视的很好的技术,相信你读完你也许会恍然大悟,关键的是能对你有帮助才是我的劳动的动力来源。。。
//======================================
用ADO方式新建一个Access数据库文件(*.mdb)

//导入对应Dll
#import   "c:/Program   Files/Common   Files/system/ado/msadox.dll"  

::CoInitialize(NULL);  
ADOX::_CatalogPtr   pCatalog(__uuidof(ADOX::Catalog));  
_bstr_t   str="Provider=Microsoft.Jet.OLEDB.4.0;data   source=C:/xxx.mdb";  

try  
{  
    pCatalog->Create(str);   //创建数据库  
}  
catch(_com_error   &e)  
{  
    //错误处理  
    ::MessageBox(NULL,_T("数据库创建失败。"), _T("提示"),MB_OK | MB_ICONINFORMATION);
}
CoUninitialize();

/*
插个小广告:
    很简单吧?学习的过程中要善于发现!善于创新!善于挑战我们的开发环境,挖掘它的潜能!更是挖掘我们的潜能!~~~
    没有你做不到的,就怕你想不到!
    继续往下看。。。
*/

//=======================================================

//ADO实现Access数据库表的遍历和字段的遍历(VC版)


  CoInitialize(NULL);
 _ConnectionPtr pconn(__uuidof(Connection));
 _RecordsetPtr prs(__uuidof(Recordset));
    pconn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://VC//Lesson20//db.mdb;Persist Security Info=False";
 pconn->Open("","","",adConnectUnspecified);
    prs=pconn->OpenSchema(adSchemaTables);
 while (!prs->adoEoF)
 {
  if (!strcmp((_bstr_t)prs->Fields->GetItem("TABLE_TYPE")->Value,"TABLE"))
  {
   m_tablelist.AddString((_bstr_t)prs->Fields->GetItem("TABLE_NAME")->Value);
      prs->MoveNext();
  }
  else
   prs->MoveNext();
 }
 prs->Close();
 pconn->Close();
    prs.Release();
 pconn.Release();
   CoUninitialize();

//遍历字段的代码:

CString str;
 m_tablelist.GetText(m_tablelist.GetCurSel(),str);//通过表列表框得到表的名称
 if (m_columnlist.GetCount()>0)
 {
  m_columnlist.ResetContent();
 }
 CoInitialize(NULL);
 _ConnectionPtr pconn(__uuidof(Connection));
 _RecordsetPtr prs(__uuidof(Recordset));
    pconn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://VC//Lesson20//db.mdb;Persist Security Info=False";
 pconn->Open("","","",adConnectUnspecified);
   prs=pconn->OpenSchema(adSchemaColumns);
 while (!prs->adoEoF)
 {
  if (!strcmp((_bstr_t)prs->Fields->GetItem("TABLE_NAME")->Value,(_bstr_t)(LPCTSTR)str))
  {
   int index=m_columnlist.GetCount();
  // m_columnlist.AddString((_bstr_t)prs->Fields->GetItem("COLUMN_NAME")->Value);
            m_columnlist.InsertString(index,(_bstr_t)prs->Fields->GetItem("COLUMN_NAME")->Value);
   prs->MoveNext();
  }
  else
   prs->MoveNext();
 }
 prs->Close();
 pconn->Close();
    prs.Release();
 pconn.Release();
   CoUninitialize();

//呵呵!记住了吗?自己还要多思考!多动手编写代码才能真正提高自己的。

//===================================
//通过程序增加指定的数据库字段
void CUpdateDBDlg::OnUpdateDB()
{
 // TODO: 在此添加控件通知处理程序代码
 ::CoInitialize(NULL);

 CString strConnection;
 CString strMsg;
 CString strTemp1, strTemp2,strAddField1,strAddField2;

 _variant_t RecordsAffected;
 _ConnectionPtr pConnection;
 _RecordsetPtr pRecordset;

 strTemp1 = _T("新字段1");
 strTemp2 = _T("新字段2");

 m_strSelectDB = _T("C://xxx.mdb");
 strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False;"),m_strSelectDB);
 HRESULT hr = pConnection.CreateInstance( __uuidof(Connection) );
 if ( FAILED(hr) )
 {
  ::MessageBox(NULL,_T("您系统中的数据库驱动有问题。"), _T("提示"),MB_OK | MB_ICONINFORMATION);
 }
 pRecordset.CreateInstance( __uuidof(Recordset));
 try
 {
  pConnection->ConnectionTimeout = 18;
  pConnection->ConnectionString =_bstr_t(strConnection);
  pConnection->Open( _bstr_t(L""), _bstr_t(L""), _bstr_t(L""), -1 );

  //需要增加的字段及数据类型
  strAddField1 = TEXT("ALTER TABLE Covers ADD COLUMN ") + strTemp1 + TEXT(" int");
  pConnection->Execute(_bstr_t(strAddField),&RecordsAffected,adCmdText);

  //需要增加的字段及数据类型
  strAddField2 = TEXT("ALTER TABLE Covers ADD COLUMN ") + strTemp2 + TEXT(" datetime");
  pConnection->Execute(_bstr_t(strAddField),&RecordsAffected,adCmdText);

  ::MessageBox(NULL,_T("数据库更新成功。"), _T("提示"),MB_OK | MB_ICONINFORMATION);
 }
 catch( _com_error& e)
 {
  _bstr_t bstrError = e.Description();
  strMsg=(LPCTSTR)bstrError;
  ::MessageBox(NULL,strMsg, _T("提示"),MB_OK | MB_ICONINFORMATION);
  return;
 }
 pConnection->Close();
 pConnection.Release();

 CoUninitialize();
}
//
    估计通过这个简单的例子你可以使用程序来新建数据库(包括字段),或是增加需要的字段都可以运用自如了。在这里我只是简单的抛砖引玉而已,你可以做出更加强大的而脱离在数据库哪里建数据库的模式的强大软件,当然这里的技术是ADO居于ACCESS数据库的创新,由于本人经验不足,还有些没有考虑得当的地方还请各位读者多多指教,也可以留言反馈你的高见,一块探讨,共同进步!谢谢!
    更多交流QQ:343878725
    MSN:lbpeking@hotmail.com
/
    http://user.qzone.qq.com/343878725

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值