自动注册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");
}