请问如果用代码判断ODBC数据源是否存在
请教如果用代码判断ODBC数据源是否存在?
程序中,比较容易实现ODBC的自动配置,可是,当配置好以后,再次启动它会又一次配置.如果出现数据库位置转移的问题,就比较麻烦.
所以想请教一下,如果用代码判断一下指定数据源是否已近存在?
配置数据源代码:
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 + "\\Data.mdb ";
char szAtr[256];
sprintf(szAtr, "DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ", "data ",szFile,szPath);
int nlen;
nlen = strlen(szAtr);
for (int i=0; i <nlen; i++)
{
if (szAtr [i] == '! ')
szAtr [i] = '\0 ';
}
BOOL iFlag = SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)\0 ",(LPCSTR)szAtr);
if (!iFlag)
AfxMessageBox( "SQLConfigDataSource Failed ");
------解决方案--------------------
在注册表中查找ODBC项
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI //机器DSN
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI //用户DSN
程序中,比较容易实现ODBC的自动配置,可是,当配置好以后,再次启动它会又一次配置.如果出现数据库位置转移的问题,就比较麻烦.
所以想请教一下,如果用代码判断一下指定数据源是否已近存在?
配置数据源代码:
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 + "\\Data.mdb ";
char szAtr[256];
sprintf(szAtr, "DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ", "data ",szFile,szPath);
int nlen;
nlen = strlen(szAtr);
for (int i=0; i <nlen; i++)
{
if (szAtr [i] == '! ')
szAtr [i] = '\0 ';
}
BOOL iFlag = SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)\0 ",(LPCSTR)szAtr);
if (!iFlag)
AfxMessageBox( "SQLConfigDataSource Failed ");
------解决方案--------------------
在注册表中查找ODBC项
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI //机器DSN
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI //用户DSN