vc++中用odbc连接mysql数据库运行时出错
以下是我在MFC下的程序段,是在弹出对话框时运行这个函数的。连接应该是没有问题,但是在程序运行弹出对话框的时候出错,而且没有任何提示信息(错误对话框是空的),请哪位好心的...
以下是我在MFC下的程序段,是在弹出对话框时运行这个函数的。
连接应该是没有问题,但是在程序运行弹出对话框的时候出错,而且没有任何提示信息(错误对话框是空的),请哪位好心的大哥帮帮忙!
说明:
m_database(CDatabase)
CTrainset_5 派生自 CRecordset
程序:
void CMainDlg::RefreshData()
{
if(!m_database.IsOpen())
{
m_database.Open(_T("example"));
}
m_ListCtrl.DeleteAllItems();
CTrainset_5 m_train(&m_database);
m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
CDBVariant varValue;
int i=0;
if(!m_train.GetRecordCount()==0)
{
m_train.MoveFirst();
}
while(!m_train.IsEOF())
{
int temp=0;
m_train.GetFieldValue(temp,varValue);//此函数建立了Record和varValue的连接
m_ListCtrl.InsertItem(i,(char*)varValue.m_pstring);//先插入,后设定文本
m_train.GetFieldValue(1,varValue);
m_ListCtrl.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(2,varValue);
m_ListCtrl.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(3,varValue);
m_ListCtrl.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(4,varValue);
m_ListCtrl.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(5,varValue);
m_ListCtrl.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(6,varValue);
m_ListCtrl.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(7,varValue);
m_ListCtrl.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(8,varValue);
m_ListCtrl.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
i++;
m_train.MoveNext();
}
}
经过单步执行后发现是在执行m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);时出错的
执行时进入了以下调用:
CATCH_ALL(e)
{
CWinThread* pWinThread = AfxGetThread();
if ( pWinThread != NULL )
{
lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);在这步弹出了出错框
TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
}
else
{
TRACE0("Warning: Uncaught exception in WindowProc.\n");
lResult = 0;
}
DELETE_EXCEPTION(e);
} 展开
连接应该是没有问题,但是在程序运行弹出对话框的时候出错,而且没有任何提示信息(错误对话框是空的),请哪位好心的大哥帮帮忙!
说明:
m_database(CDatabase)
CTrainset_5 派生自 CRecordset
程序:
void CMainDlg::RefreshData()
{
if(!m_database.IsOpen())
{
m_database.Open(_T("example"));
}
m_ListCtrl.DeleteAllItems();
CTrainset_5 m_train(&m_database);
m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
CDBVariant varValue;
int i=0;
if(!m_train.GetRecordCount()==0)
{
m_train.MoveFirst();
}
while(!m_train.IsEOF())
{
int temp=0;
m_train.GetFieldValue(temp,varValue);//此函数建立了Record和varValue的连接
m_ListCtrl.InsertItem(i,(char*)varValue.m_pstring);//先插入,后设定文本
m_train.GetFieldValue(1,varValue);
m_ListCtrl.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(2,varValue);
m_ListCtrl.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(3,varValue);
m_ListCtrl.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(4,varValue);
m_ListCtrl.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(5,varValue);
m_ListCtrl.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(6,varValue);
m_ListCtrl.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(7,varValue);
m_ListCtrl.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));
m_train.GetFieldValue(8,varValue);
m_ListCtrl.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
i++;
m_train.MoveNext();
}
}
经过单步执行后发现是在执行m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);时出错的
执行时进入了以下调用:
CATCH_ALL(e)
{
CWinThread* pWinThread = AfxGetThread();
if ( pWinThread != NULL )
{
lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);在这步弹出了出错框
TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
}
else
{
TRACE0("Warning: Uncaught exception in WindowProc.\n");
lResult = 0;
}
DELETE_EXCEPTION(e);
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询