ODBC动态创建access数据库

 #include "stdafx.h"
#include <string>
using namespace std;

/*
bool CreateData(void)
{

 CString szPath;
 ::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    szPath.ReleaseBuffer();
 int nPos;
 nPos = szPath.ReverseFind('//');
    szPath = szPath.Left(nPos);
 CString szFile = szPath + "//bookdata.mdb";

 

 CString szAtr;
 szAtr.Format(_T("DSN = bookdata!DBQ = %s!DEFAULTDIR = %s!!"),szFile,szPath);


 HANDLE hFind;
 WIN32_FIND_DATA wfd;
 hFind = ::FindFirstFile(szFile,&wfd);
 if(hFind == INVALID_HANDLE_VALUE)
 {
  int nlen;
  nlen = szAtr.GetLength();
  
  
  for(int i = 0;i<nlen;i++)
  {
   if(szAtr.GetAt(i) == '!')
    szAtr.SetAt (i,'/0') ;
  }

  bool fCreated;
  fCreated = SQLConfigDataSource(NULL,
                              ODBC_ADD_DSN,
            _T("Microsoft Access Driver(*mdb)/0"),
           (LPCWSTR)szAtr);
 ::FindClose (&hFind);
  return fCreated;
 }
return false;

}
*/


void CreateData()
{
 /*
 bool fCreated;
 fCreated = ::SQLConfigDataSourceW(NULL,
                                ODBC_ADD_DSN,
           _T("Microsoft Access Driver(*mdb)"),
           _T("Driver=Microsoft Access Driver (*.mdb)/0Dbq=c://dbname.mdb/0Uid=Admin/0Pwd=pass/0/0"));
           return fCreated;
 
 string MainProgramPath=::GetModuleFileName(NULL,MainProgramPath.GetSetBufferLength(MAXPATH+1),MAXPATH);
 MainProgramPath.ReleaseBuffer();
  string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
  string MdbDirPathStr=MainProgramPath+"MDB//";
  string MdbFileNameStr="DVB-S.mdb";

  CString szPath;
 ::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    szPath.ReleaseBuffer();
 int nPos;
 string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
 nPos = szPath.ReverseFind('//');
    szPath = szPath.Left(nPos);
 CString szFile = szPath + "//bookdata.mdb";

 

    char ODBC_DSN[256];
    sprintf(ODBC_DSN,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ",ODBC_DSN_NameStr.c_str(),szFile,szPath);

    int thelen=strlen(ODBC_DSN);
    for(int i=0; i <thelen; i++)
    {
        if(ODBC_DSN[i] == '!')
            ODBC_DSN[i] = '/0';
    }
 bool fCreated;
 fCreated = SQLConfigDataSource(NULL,ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"),(LPCWSTR)ODBC_DSN) ; //用户库
    //if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)/0",(LPCSTR)ODBC_DSN))  //系统库

    if (FALSE == fCreated)
        AfxMessageBox(_T("SQLConfigDataSource Failed")); 
 return fCreated;
}

*/

    //HWND* m_hWnd1;
   // m_hWnd1 =AfxGetMainWnd();
 //BOOL fCreated;
 //if(fCreated =
  //SQLConfigDataSource( AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver(*.mdb)"),  
        //                  _T("DSN=Access Data Source/0")  
        //                  _T("DBQ=C://MyDocuments//dq.mdb/0")  
       //                   _T("Description=ODBC数据源/0")  
       //                   _T("DataDirectory=C://MyDocuments/0" ) 
       //                   _T("/0"))) 

 

 

 

 

    /*
    SQLConfigDataSource(AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver (*.mdb)"),
                   _T( "COMPACT_DB=C://Sample.mdb C://CompatedSample.mdb General/0")
                   _T( "PWD=WSG/0DataDirectory=C://0MaxScanRows=20/0/0")))
                  AfxMessageBox(_T("创建成功!"));  
     else  
                  AfxMessageBox(_T("取消创建或创建失败!"));
    DWORD ierror;
 DWORD errcode;
 char szError[256] ;
 WORD cerror;
 WORD perror;
SQLInstallerError(ierror,&errcode,(LPWSTR)szError,cerror,&perror);

 if(errcode==ODBC_ERROR_INVALID_HWND)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_HWND"));
}
else if(errcode==ODBC_ERROR_GENERAL_ERR)
{
AfxMessageBox(_T("ODBC_ERROR_GENERAL_ERR"));
}
else if(errcode==ODBC_ERROR_INVALID_REQUEST_TYPE)
{AfxMessageBox(_T("ODBC_ERROR_INVALID_REQUEST_TYPE"));
}
else if(errcode==ODBC_ERROR_INVALID_NAME)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_NAME"));
}
else if(errcode==ODBC_ERROR_REQUEST_FAILED)
{
AfxMessageBox(_T("ODBC_ERROR_REQUEST_FAILED"));


}
 

*/

    CString szPath;
    GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    szPath.ReleaseBuffer ();
    int nPos;
    nPos = szPath.ReverseFind ('//');
    szPath = szPath.Left (nPos);
    CString szFile = szPath + "//bookdata.mdb";
    CString szAtr;
    szAtr.Format(_T("DSN=bookdata!DBQ=%s!DEFAULTDIR=%s!!"),szFile,szPath);
int nlen;
nlen = szAtr.GetLength();
for(int i = 0;i <nlen;i++)
{
if(szAtr.GetAt(i) == '!')
szAtr.SetAt (i,'/0') ;
}
if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"), (LPCWSTR)szAtr))
AfxMessageBox(_T("数据源配置失败,确认数据库bookdata.mdb是否在当前路径下!"));
AfxMessageBox(_T("创建数据库成功"));

//return  fCreated;
}

 

 

 

前面的失败只是因为连接字符串里的空格

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值