写了一个MFC程序
第一次查询数据库,获得数据,显示到界面上,
然后开辟一个线程对选取的数据进行封装然后传送,传送成功,线程结束时,
在该线程内获取当前MFC界面句柄,调用该句柄内的查询数据库函数,
重新查询数据时就会报错: bof或者eof中有一个是真,或者当前的纪录已被删除,所需的操作要求一个当前的纪录
查询到的数据记录不完整
有时候直接就查询不到数据
void CCertSync::CertsyncQuery()
{
m_CertList.EnableWindow(TRUE);
m_Sync.EnableWindow(TRUE);
m_CertList.EnableWindow(TRUE);
m_Query.EnableWindow(TRUE);
//m_CertList.DeleteAllItems();
SetDlgItemText(IDC_CERTSYNC_TOTALCOUNT, "");
if (CADB.QueryUnSyncCertsManul() == RESULT_SUCCESS)
{
int index = 0;
m_CertList.DeleteAllItems();
try {
while(!CADB.pRst->adoEOF)
{
index = m_CertList.GetItemCount();
m_CertList.InsertItem(index, "");
strtmp.Format("%d", index + 1);
m_CertList.SetItemText(index, 1, strtmp);
strtmp.Format((_bstr_t)CADB.pRst->GetCollect("CertSN"));
m_CertList.SetItemText(index, 2, strtmp);
CADB.tmp = CADB.pRst->GetCollect("CertStatus");
strtmp = IntToString(TRANSFORM_TYPE_USERCERTSTATUS,CADB.tmp.intVal);
m_CertList.SetItemText(index, 3, strtmp);
CADB.pRst->MoveNext();
}
}
catch(_com_error &e)
{
MessageBox(e.Description(), "数据库异常", MB_OK);
}
CADB.tmp = CADB.ptmpRst->GetCollect("CertCount");
m_TotalCount = CADB.tmp.intVal;
CString total;
total.Format("%d",m_TotalCount);
SetDlgItemText(IDC_CERTSYNC_TOTALCOUNT, total);
//UpdateData(FALSE);
}
}
int CDB::QueryUnSyncCertsManul()
{
CString strRecordCount;
strCommand = "SELECT TOP 200 * FROM V_UserCertsSync";
strRecordCount = "SELECT COUNT(*) AS CertCount FROM V_UserCertsSync";
try
{
pRst = pConn->Execute((_bstr_t)strCommand, NULL, adCmdText);
ptmpRst = pConn->Execute((_bstr_t)strRecordCount, NULL, adCmdText);
}
catch(_com_error &e)
{
if (SHOW_DB_EXCEPTION)
{
MessageBox(e.Description(), "数据库异常", MB_OK);
}
return RESULT_DB_FAILURE;
}
return RESULT_SUCCESS;
}