ADOX动态创建access数据库

这段代码展示了如何使用ADOX动态创建Access数据库。通过获取当前模块的路径,构造数据库文件路径,并设置连接字符串,然后利用COM接口创建Catalog对象来建立数据库。创建成功后会弹出提示框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #include "stdafx.h"

void CreateData()
{
 
 /*
 CString szPath;
 CString szFile;
 ::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH),MAX_PATH);
 int nPos;
    nPos = szPath.ReverseFind('//');
 szPath = szPath.Left(nPos);
 szFile = szPath + _T("//bookdata.accdb");
 CString szConnection;
 szConnection.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0!DataSource=%s!PersistSecurityInfo=False!!"),szFile);
 int nLen;
 nLen = szConnection.GetLength();
 for(int i =0;i<nLen;i++)
 {
  if (szConnection.GetAt(i) == '!')
   szConnection.SetAt(i,'/0');
 }
 CoInitialize(NULL);
 HRESULT hr = S_OK;
    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)szConnection); //这里的路径可以自己随意创建 ,我简单的填写了一下c://test.mdb
   AfxMessageBox(_T("创建数据库成功"));
        }
    } 
    catch(_com_error &e)
    {
  AfxMessageBox(_T("失败"));
    }
*/

 

 

 

 

 


 //CoInitialize(NULL);  
   
 ADOX::_CatalogPtr m_pCatalog = NULL;  
  //CString   strConnection,strTable;  
  //TCHAR   chFilePath[MAX_PATH];  

  /*
   
  GetModuleFileName(NULL,chFilePath,MAX_PATH);  
  (_tcsrchr(chFilePath, '//'))[1]   =   0;  
  lstrcat(chFilePath,_T("Test.mdb"));  
   
  strTable = chFilePath;  
   
  strConnection =_T("Provider=Microsoft.JET.OLEDB.4.0;Data source=")+strTable+_T(";Jet OLEDB:Engine Type=5;"); 

  */

CString strConnection,strPath,strFile;

GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
strPath.ReleaseBuffer();
int nPos;
nPos = strPath.ReverseFind('//');
strPath = strPath.Left(nPos);
//strFile = strPath+ _T("//bookdata.mdb");
strFile = strPath+_T("//bookdata.accdb");

//strConnection = _T("Provider=Microsoft.JET.OLEDB.4.0;Data source=")+strFile+_T(";Jet OLEDB:Engine Type=5;");
//strConnection.Format(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source=%s;Jet OLEDB:Engine Type=5;"),strFile);
strConnection.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Jet OLEDB:Database Password=bingtiang;"),strFile);
   
 // if(!PathFileExists(chFilePath))  
 // {  
  try  
  {  
   m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));  
  m_pCatalog->Create(_bstr_t(strConnection));  
  }  
  catch(...)  
  {  
  m_pCatalog->Release();  
  m_pCatalog   =   NULL;  
  AfxMessageBox(_T("失败"));
  }
  AfxMessageBox(_T("成功"));
  //m_pCatalog->Release();   //这个语句不注释掉,会有内存读取错误,估计是重复释放同一个内存的问题
    
  // m_pCatalog->Release();  
  // m_pCatalog   =   NULL;  
//  }  
   
 // CoUninitialize();

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值