主要代码如下:
void RegisterDBSource(CString strDSName, CString strDBPath)
{
HKEY hKey;
DWORD nLabel;
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
if(strDSName.IsEmpty()) return;
if(strDBPath.IsEmpty()) return;
CString strDataSource = strBaseKey + _T("\\") + strDSName;
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
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)strMdb),
strlen((LPCTSTR)strMdb)+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);//数据库表的全路径
RegSetValueEx(hKey,
_T("Driver"),
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strDBDriver),
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
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));//可选项
}
调试环境:WINDOWS2000 + VC6.0 + VSP5.0