自動註冊ODBC數據源,如下代碼可直接放在對話框初始化函數OnInitDialog中:
/*獲取應用程序exe所在路徑*/
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 + "\\odbc.accdb";
char szAtr[256];
//如下代碼不能替換爲sprintf(szAtr,"DSN=%s\0DBQ=%s\0DEFAULTDIR=%s\0\0","ODBC_TEST", szFile,szPath);
//原因:sprintf僅能拷貝處理後的字符串,遇到‘\0'後結束。導致僅能將szAtr設置爲“DSN=%s\0”,這樣導致註冊數據源的屬性不全。
sprintf(szAtr,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!!","ODBC_TEST", szFile,szPath);
nlen = strlen(szAtr);
for (int i=0; i<nlen; i++)
{
if (szAtr [i] == '!')
szAtr [i] = '\0';
}
/*自動註冊ODBC數據源*/
if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN,
"Microsoft Access Driver (*.mdb, *.accdb)\0",
(LPCSTR)szAtr))
{
AfxMessageBox("SQLConfigDataSource Failed");
}