bokee.net

电子/电气工程师博客

正文 更多文章

用VC++6.0编程配置ODBC数据源

                 用VC++6.0编程配置ODBC数据源
                               王佰营  徐丽红
                      wbymcs51.blog.bokee.net
   在VC++6.0数据库编程中,手工通过操作面板à管理工具à数据源ODBC来配置数据源,
非常不方便;为此,编了一小程序Reg_ODBC,使用两种方法方便实现数据源配置;也可将此代码放如程序
中实现自动数据源配置;该小程序的界面如下:

   主要代码如下:
//使用SQLConfigDataSource函数配置数据源按钮
void CReg_ODBCDlg::OnButLink()
{
 // TODO: Add your control notification handler code here
        char szFilter[]=TEXT("ALL Files(*.*)|*.*|mdb Files(*.mdb)|*.mdb||");//ODBC_ADD_DSN   增加一个新的用户数据源;
       CFileDialog fileopenbox(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);

       fileopenbox.m_ofn.lpstrTitle=TEXT("选择源文件");

       if(fileopenbox.DoModal()!=IDOK)

              return;

 

    CString szPath,sPath;

       szPath=fileopenbox.GetPathName();

 

 

    CString szFile=szPath;

       int nPos;

       nPos = szPath.ReverseFind(’\\’);

       szPath = szPath.Left (nPos);

       szFile = szFile.Right(szFile.GetLength()-szPath.GetLength()-1);

       szFile = szFile.Left(szFile.Find(’.’));

 

       char szAtr[256];

       sprintf(szAtr,"DSN=%s\n\0DBQ=%s\n\0DEFAULTDIR=%s\0", szFile,"MY_ACCESS_DB",szPath);

       BOOL  bRegOk;

    bRegOk = SQLConfigDataSource(  NULL,

                                   ODBC_ADD_DSN,

                                   "Microsoft Access Driver (*.mdb)\0",

                                   (LPCSTR)szAtr);    

       if(bRegOk) AfxMessageBox("配置ODBC数据源成功!");

       else AfxMessageBox("配置ODBC数据源失败!");  

 //ODBC_CONFIG_DSN  修改一个已经存在的用户数据源;
 //ODBC_REMOVE_DSN  删除一个已经存在的用户数据源;
 //ODBC_ADD_SYS_DSN  增加一个新的的系统数据源;
 //ODBC_CONFIG_SYS_DSN 修改一个已经存在的系统数据源;
 //ODBC_REMOVE_SYS_DSN 删除一个已经存在的系统数据源; 

}


//通过修改注册表配置数据源按钮
void CReg_ODBCDlg::OnButChhk()
{
 // TODO: Add your control notification handler code here
 char szFilter[]=TEXT("ALL Files(*.*)|*.*|mdb Files(*.mdb)|*.mdb|");
 CFileDialog fileopenbox(TRUE,
NULL,
NULL,
OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,szFilter);
 fileopenbox.m_ofn.lpstrTitle=TEXT("选择源文件");
 if(fileopenbox.DoModal()!=IDOK)
  return;
    CString szPath,sPath,ss="",s="STUDENTS";
 szPath=fileopenbox.GetPathName();
 //LoadDbSource(s,szPath,ss);
 RegisterDBSource(s, szPath);
}

bool CReg_ODBCDlg::RegisterDBSource(CString strDSName, CString strDBPath)
{
 char sysDir[MAX_PATH];
 char drvName[]="\\odbcjt32.dll";
 ::GetSystemDirectory(sysDir,MAX_PATH);
 strcat(sysDir,drvName);
 CFileFind findFile;

 if(!findFile.FindFile(sysDir))
 {
  AfxMessageBox("          无法加载该类数据源!\r该机未装MSAccess的ODBC
驱动程序odbcjt32.dll!", MB_OK|MB_ICONSTOP);
  return false;
 }

  HKEY hKey;
  DWORD nLabel;

  CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
  CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;

  if(strDSName.IsEmpty()) return false;
  if(strDBPath.IsEmpty()) return false;

  CString strDataSource = strBaseKey + _T("\\") + strDSName;

  CString strdbDrive = _T("Microsoft Access Driver (*.mdb)");

  CString strFIL = _T("Ms Access;");
  CString strUID = _T("");

     //获取数据源键值句柄
  RegCreateKeyEx(HKEY_CURRENT_USER,
     strMid,
     0,
     NULL,
     REG_OPTION_NON_VOLATILE,
     KEY_ALL_ACCESS,
     NULL,
     &hKey,
     &nLabel );
     //设置数据源类型
  RegSetValueEx( hKey,
     strDSName,
     0,
     REG_SZ,
     (const unsigned char *)((LPCTSTR)strdbDrive),
     strlen((LPCTSTR)strdbDrive)+1);
     //创建数据源子键
  RegCreateKeyEx(HKEY_CURRENT_USER,
     strDataSource,
     0,
     NULL,
     REG_OPTION_NON_VOLATILE,
     KEY_ALL_ACCESS,
     NULL,
     &hKey,
     &nLabel);
     //数据库表的全路径
  RegSetValueEx( hKey,
     _T("DBQ"),
     0,
     REG_SZ,
     (const unsigned char *)((LPCTSTR)strDBPath),
     strlen((LPCTSTR)strDBPath)+1);
      //ODBC驱动的全路径
   RegSetValueEx(hKey,
     _T("Driver"),
     0,
     REG_SZ,
     (const unsigned char *)((LPCTSTR)sysDir),
     strlen((LPCTSTR)sysDir)+1);
     //表的类型
  RegSetValueEx( hKey,
     _T("FIL"),
     0,
     REG_SZ,
     (const unsigned char *)((LPCTSTR)strFIL),
     strlen((LPCTSTR)strFIL)+1);
     //必须项
  RegSetValueEx( hKey,
     _T("UID"),
     0,
     REG_SZ,
     (const unsigned char *)((LPCTSTR)strUID),
     strlen((LPCTSTR)strUID)+1);

     //必须项
  DWORD DriverId = (DWORD)25;
  RegSetValueEx( hKey,
     _T("DriverId"),
     0,
     REG_DWORD,
     (const BYTE *)(&DriverId),
     sizeof(DWORD));
     //可选项
  DWORD SafeTrans = (DWORD)0;
  RegSetValueEx( hKey,
     _T("SafeTransactions"),
     0,
     REG_DWORD,
     (const BYTE *)(&SafeTrans),
     sizeof(DWORD));
 AfxMessageBox(_T("注册表修改完成,配置ODBC数据源成功!"));
  return true;
}

 关键词:VC MFC 数据库 ODBC 数据源配置

 

 

 

分享到:

上一篇:

下一篇:MCS51单片机学习

评论 (0条) 发表评论

抢沙发,第一个发表评论
验证码