我为了能够在程序里面换查看多张access表,写了段代码来切换表 onselect是用来选择.mdb的 2个create是为了偷懒来选择表 但是问题出现了 我进去程序切换查询没问题 但是关闭了再进去就说路径出错了 整个程序全关了再进又可以用 我想大概是哪个地方没初始化 所以第二次open函数出错 但是不知道哪错了 还请大侠指教void CQueryDlg::OnSelect() 
{
// TODO: Add your control notification handler code here
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT);
dlg.m_ofn.lpstrInitialDir = m_strdbname;
dlg.m_ofn.lpstrTitle = "Select a Database";
dlg.m_ofn.lpstrFilter = "Microsoft Access(*.mdb)\0*.mdb\0\0";
int len = m_strdbname.GetLength() - m_strdbname.ReverseFind('\\');
strcpy(dlg.m_ofn.lpstrFile,m_strdbname.Right(len - 1));
if(dlg.DoModal() == IDOK)
{
m_strdbname = dlg.GetPathName();
UpdateData(false);
}
}
BOOL CQueryDlg::CreateDSN()
{
UpdateData(TRUE);
char caDriver[] = "Microsoft Access Driver (*.mdb)";
char caAttributes[MAX_PATH]=""; char caTemp[MAX_PATH]="",caDefDirectory[MAX_PATH]="";
GetCurrentDirectory(MAX_PATH,caTemp); sprintf(caDefDirectory,"DefaultDir=%s\\DBase",caTemp);

memset(caAttributes,'\0',sizeof(caAttributes));
AddAttribute(caAttributes,"DSN=DBTimber");
AddAttribute(caAttributes,"DBQ=DBTimber.mdb");
AddAttribute(caAttributes,caDefDirectory);
return SQLConfigDataSource(NULL,ODBC_ADD_DSN,caDriver,caAttributes+1);
//return TRUE;
}BOOL CQueryDlg::CreateDSN1()
{
UpdateData(TRUE);
char caDriver[] = "Microsoft Access Driver (*.mdb)";
char caAttributes[MAX_PATH]; char caTemp[MAX_PATH],caDefDirectory[MAX_PATH];
GetCurrentDirectory(MAX_PATH,caTemp); sprintf(caDefDirectory,"DefaultDir=%s\\files",caTemp);

memset(caAttributes,'\0',sizeof(caAttributes));
AddAttribute(caAttributes,"DSN=DBTimber");
CString m_strdbname2="DBQ="+m_strdbname;
AddAttribute(caAttributes,m_strdbname2);
AddAttribute(caAttributes,caDefDirectory);
// return SQLConfigDataSource(NULL,ODBC_ADD_DSN,caDriver,caAttributes+1);
if (FALSE ==SQLConfigDataSource(NULL,ODBC_ADD_DSN,caDriver,caAttributes+1))
AfxMessageBox("导入数据表错误!");
CString mstrinfo="成功导入数据库表"+m_strdbname;
MessageBox(mstrinfo);
return SQLConfigDataSource(NULL,ODBC_ADD_DSN,caDriver,caAttributes+1);
}