急MFC中用ODBC动态建立数据源后连不上数据库怎么处理?
急!MFC中用ODBC动态建立数据源后连不上数据库怎么办?高手指点?
建立另一个基于对话框的工程,能够编译过去,且能运行,在对话框的Dlg的构造函数中添加
BOOL bODBC = SQLConfigDataSource(NULL,ODBC_ADD_DSN,TEXT("Microsoft Access Driver (*.mdb)\0"),
TEXT("DSN=Knowledge\0DBQ=KnowledgeSource.mdb"));
if(!bODBC)
{
AfxMessageBox(TEXT("创建数据源失败"));
exit(0);
}
if(!bODBC)
{
::AfxMessageBox(TEXT("32位数据源配置错误"));
}
然后在一个OnInitDialog函数中添加
db=new CDatabase;
try
{
db->OpenEx(TEXT("DSN=Knowledge"),CDatabase::noOdbcDialog);
}
catch(CDBException * dbErr)
{
CString temp=TEXT("数据库连接失败,具体原因:\n");
MessageBox(temp+dbErr->m_strError,TEXT("警告"),MB_YESNO|MB_ICONEXCLAMATION);
dbErr->Delete();
exit(1);
}
最后在一个处理函数中添加
CRecordset *m_pset = NULL;
m_pset->Open(CRecordset::dynaset,strtmp,CRecordset::none);
strtmp.Format(TEXT("%s"),m_pset->GetRecordCount());
AfxMessageBox(strtmp);
CODBCFieldInfo fieldinfo;
m_pset->GetODBCFieldInfo(short(2),fieldinfo);
columnname2 = fieldinfo.m_strName;
m_pset->GetODBCFieldInfo(short(3),fieldinfo);
columnname3 = fieldinfo.m_strName;
while(!m_pset->IsEOF())
{
m_pset->GetFieldValue(short(2),vkey);
m_pset->GetFieldValue(short(3),answer);
vkey.TrimRight();
answer.TrimRight();
if(m_strText.Find(vkey)>0)
{
m_strText+=answer;
break;
}
m_pset->MoveNext();
}
//CString strtmp = TEXT("select vkey from answer where vkey like")+;
m_strText+=pwzText;
UpdateData(FALSE);
m_pset->Close();
当我调试的时候,运行到m_pset->Open(CRecordset::dynaset,strtmp,CRecordset::none);时出现错误,错误显示好像是:
ODBC驱动程序:Microsoft Access找不到E:\Workspace\develop\C++Test\Toursit\Toursit\KnowledgeSource.mdb
------解决方案--------------------
检查下路径设置对不对,库被没被包含进去。
建立另一个基于对话框的工程,能够编译过去,且能运行,在对话框的Dlg的构造函数中添加
BOOL bODBC = SQLConfigDataSource(NULL,ODBC_ADD_DSN,TEXT("Microsoft Access Driver (*.mdb)\0"),
TEXT("DSN=Knowledge\0DBQ=KnowledgeSource.mdb"));
if(!bODBC)
{
AfxMessageBox(TEXT("创建数据源失败"));
exit(0);
}
if(!bODBC)
{
::AfxMessageBox(TEXT("32位数据源配置错误"));
}
然后在一个OnInitDialog函数中添加
db=new CDatabase;
try
{
db->OpenEx(TEXT("DSN=Knowledge"),CDatabase::noOdbcDialog);
}
catch(CDBException * dbErr)
{
CString temp=TEXT("数据库连接失败,具体原因:\n");
MessageBox(temp+dbErr->m_strError,TEXT("警告"),MB_YESNO|MB_ICONEXCLAMATION);
dbErr->Delete();
exit(1);
}
最后在一个处理函数中添加
CRecordset *m_pset = NULL;
m_pset->Open(CRecordset::dynaset,strtmp,CRecordset::none);
strtmp.Format(TEXT("%s"),m_pset->GetRecordCount());
AfxMessageBox(strtmp);
CODBCFieldInfo fieldinfo;
m_pset->GetODBCFieldInfo(short(2),fieldinfo);
columnname2 = fieldinfo.m_strName;
m_pset->GetODBCFieldInfo(short(3),fieldinfo);
columnname3 = fieldinfo.m_strName;
while(!m_pset->IsEOF())
{
m_pset->GetFieldValue(short(2),vkey);
m_pset->GetFieldValue(short(3),answer);
vkey.TrimRight();
answer.TrimRight();
if(m_strText.Find(vkey)>0)
{
m_strText+=answer;
break;
}
m_pset->MoveNext();
}
//CString strtmp = TEXT("select vkey from answer where vkey like")+;
m_strText+=pwzText;
UpdateData(FALSE);
m_pset->Close();
当我调试的时候,运行到m_pset->Open(CRecordset::dynaset,strtmp,CRecordset::none);时出现错误,错误显示好像是:
ODBC驱动程序:Microsoft Access找不到E:\Workspace\develop\C++Test\Toursit\Toursit\KnowledgeSource.mdb
------解决方案--------------------
检查下路径设置对不对,库被没被包含进去。