BOOL CDlg(类名)::LoadDbSource(CString strSourceName, CString strSourceDb, CString strDescription)
{
 //存放打开的注册表键
 HKEY hKey;
 DWORD dw;
 
 //存放注册表API函数执行的返回值
 LONG lReturn;
 
 //存放要打开的子键
 CString strSubKey;
 
 //检测是否安装了MS Access ODBC driver:odbcjt32.dll
 //获得 Windows系统目录
 char sysDir[MAX_PATH];
 char drvName[]="\\odbcjt32.dll";
 ::GetSystemDirectory(sysDir, MAX_PATH);
 strcat(sysDir,drvName);
 CFileFind findFile;
 if(!findFile.FindFile(sysDir))
 {
  AfxMessageBox("您的计算机系统中没有安装MS Access的ODBC驱动程序odbcjt32.dll,您将无法加载该类数据源。" ,MB_OK | MB_ICONSTOP);
  return false;
 }
 
 strSubKey="SOFTWARE\\ODBC\\ODBC.INI\\" + strSourceName;
 //创建 ODBC数据源在注册表中的子键
 lReturn=::RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,&dw);
 if(lReturn != ERROR_SUCCESS)
  return false;
 
 //设置数据源的各项参数
 CString strDbq = strSourceDb;
 CString strDriver = sysDir;
 DWORD dwDriverId = 25;
 CString strFil = "MS Access;";
 CString strPwd = strSourceName;
 DWORD dwSafeTransactions = 0;
 CString strUid = strSourceName;
 ::RegSetValueEx(hKey, "DBQ", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strDbq), strDbq.GetLength());
 ::RegSetValueEx(hKey, "Description", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strDescription), strDescription.GetLength());
 ::RegSetValueEx(hKey, "Driver", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strDriver), strDriver.GetLength());
 ::RegSetValueEx(hKey, "DriverId", 0L, REG_DWORD, (CONST BYTE*)(&dwDriverId), sizeof(dw));
 ::RegSetValueEx(hKey, "FIL", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strFil),strFil .GetLength ());
 ::RegSetValueEx(hKey, "PWD", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strPwd),strPwd.GetLength ());
 ::RegSetValueEx(hKey, "SafeTransactions", 0L, REG_DWORD, (CONST BYTE*)(&dwSafeTransactions), sizeof(dw));
 ::RegSetValueEx(hKey, "UID", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strUid),strUid.GetLength());
 ::RegCloseKey(hKey);
 
 //创建 ODBC数据源的Jet子键
 strSubKey += "\\Engines\\Jet";
 lReturn = ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dw);
 if(lReturn != ERROR_SUCCESS)
  return false;
 
 //设置该子键下的各项参数
 CString strImplict="";
 CString strUserCommit="Yes";
 DWORD dwPageTimeout=5;
 DWORD dwThreads=3;
 DWORD dwMaxBufferSize=2048;
 ::RegSetValueEx(hKey, "ImplicitCommitSync", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strImplict), strImplict.GetLength()+1);
 ::RegSetValueEx(hKey, "MaxBufferSize", 0L, REG_DWORD, (CONST BYTE*)(&dwMaxBufferSize), sizeof(dw));
 ::RegSetValueEx(hKey, "PageTimeout", 0L, REG_DWORD, (CONST BYTE*)(&dwPageTimeout), sizeof(dw));
 ::RegSetValueEx(hKey, "Threads", 0L, REG_DWORD, (CONST BYTE*)(&dwThreads), sizeof(dw));
 ::RegSetValueEx(hKey, "UserCommitSync", 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strUserCommit), strUserCommit.GetLength());
 ::RegCloseKey(hKey);
 
 //设置ODBC数据库引擎名称
 lReturn=::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources", 0L,
  KEY_WRITE, &hKey);
 if(lReturn != ERROR_SUCCESS)
  return false; //程序在这里出错,这句执行了
 CString strDbType="Microsoft Access Driver (*.mdb)";
 ::RegSetValueEx(hKey, strSourceName, 0L, REG_SZ, (CONST BYTE*)((LPCTSTR)strDbType), strDbType.GetLength());
 
 return true;