大约有3500条数据,为建立一个树结构而使用递归函数,函数中有select 语句,但在函数结尾已经关闭SQL连接,不知为什么速度特别慢,大约30秒才能完成。大概代码如下:
void CTreeDataDlg::TreeAddSubTree(CString ParTree, CString strChildTree, HTREEITEM hPartItem)
{if (strChildTree!="0")
{ _RecordsetPtr m_pTreeRecordset; //用于创建一个查询记录集
_variant_t vChild; HTREEITEM hCurrent; CString strSQL,strCurItem; strSQL="SELECT * FROM code where ParentItem = '" ;
strSQL=strSQL+ParTree+"'";
try
{
HRESULT hTRes;
hTRes = m_pTreeRecordset.CreateInstance(_T("ADODB.Recordset"));
if (SUCCEEDED(hTRes))
{
//----------------------------------------------------
hTRes = m_pTreeRecordset->Open(.....);
if(SUCCEEDED(hTRes))
{
TRACE(_T("连接成功!\n"));
//------------------------------------------
m_pTreeRecordset->MoveFirst();
if (!(m_pTreeRecordset->adoEOF))
{
while(!m_pTreeRecordset->adoEOF)
{
hCurrent = m_ctrlTree.InsertItem(...); if (TreeSumRecordCount(VariantToCString\
(m_pTreeRecordset->GetCollect("Name")))>0)
{
TreeAddSubTree(VariantToCString(m_pTreeRecordset->GetCollect("Name")),
(VariantToCString(m_pTreeRecordset->GetCollect("Name"))),
hCurrent);
}
if (!(m_pTreeRecordset->adoEOF))
{
m_pTreeRecordset->MoveNext();
}
}
}
//---------------------------------------
}
}
m_pTreeRecordset->Close();
m_pTreeRecordset.Release();
}
catch(_com_error e)///捕捉异常
{
MessageBox("创建省市记录集失败!");
}
}
}
void CTreeDataDlg::TreeAddSubTree(CString ParTree, CString strChildTree, HTREEITEM hPartItem)
{if (strChildTree!="0")
{ _RecordsetPtr m_pTreeRecordset; //用于创建一个查询记录集
_variant_t vChild; HTREEITEM hCurrent; CString strSQL,strCurItem; strSQL="SELECT * FROM code where ParentItem = '" ;
strSQL=strSQL+ParTree+"'";
try
{
HRESULT hTRes;
hTRes = m_pTreeRecordset.CreateInstance(_T("ADODB.Recordset"));
if (SUCCEEDED(hTRes))
{
//----------------------------------------------------
hTRes = m_pTreeRecordset->Open(.....);
if(SUCCEEDED(hTRes))
{
TRACE(_T("连接成功!\n"));
//------------------------------------------
m_pTreeRecordset->MoveFirst();
if (!(m_pTreeRecordset->adoEOF))
{
while(!m_pTreeRecordset->adoEOF)
{
hCurrent = m_ctrlTree.InsertItem(...); if (TreeSumRecordCount(VariantToCString\
(m_pTreeRecordset->GetCollect("Name")))>0)
{
TreeAddSubTree(VariantToCString(m_pTreeRecordset->GetCollect("Name")),
(VariantToCString(m_pTreeRecordset->GetCollect("Name"))),
hCurrent);
}
if (!(m_pTreeRecordset->adoEOF))
{
m_pTreeRecordset->MoveNext();
}
}
}
//---------------------------------------
}
}
m_pTreeRecordset->Close();
m_pTreeRecordset.Release();
}
catch(_com_error e)///捕捉异常
{
MessageBox("创建省市记录集失败!");
}
}
}
我变了一下程序。
原来程序启动时直接建立三级树结构
现在不那样做了,启动时只建立第一级,当用户有需求时再通过用户动作建立第二级。
等会再把SQL查询换成存储过程,我想这样基本解决这个问题了。