原本想让一个窗口弹出更新资料的窗口,更新完成之后,再更新先前有该资料的listctrl的内容。现在
我一运行就出现,终止,重试,忽略的问题,连忽略可以正常显示,点终止退出。在release下就没有问题。BOOL CProp1::OnInitDialog() 
{
CPropertyPage::OnInitDialog();

ListAddData(FALSE);  //调用函数,让listctrl从数据库中取出数据 
    

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}void CProp1::ListAddData(BOOL bUpdate)
{
if (!bUpdate) //在初始化时取数据。
{
        m_imagelist.Create(16,16,TRUE,2,2);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_list.SetImageList(&m_imagelist,LVSIL_SMALL);
    
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_list.SetBkColor(RGB(247,247,255));
m_list.SetTextColor(RGB(0,0,255));
m_list.SetTextBkColor(RGB(247,247,255));
m_list.InsertColumn(0, "", LVCFMT_LEFT, 85);
m_list.InsertColumn(1, "收 盘", LVCFMT_LEFT, 85);
m_list.InsertColumn(2, "涨 跌", LVCFMT_LEFT, 85); CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command)); pConn->ConnectionString = _bstr_t(ConnStr) ;
    
pConn->Open("","","",adConnectUnspecified);
    
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="SELECT TOP 1 * FROM OverseasStockMarket ORDER BY StockMarketDate DESC ";
pRst=pCmd->Execute(NULL,NULL,adCmdText); while(!pRst->rsEOF)
{ CString str("");
m_list.InsertItem(0,"");
m_list.SetItemText(0,0,"Nasdaq");
m_list.SetItemText(0,1,(_bstr_t)pRst->GetCollect("NasdaqClosing"));
m_list.SetItemText(0,2,(_bstr_t)pRst->GetCollect("NasdaqUpsdowns"));

pRst->MoveNext(); }
    
pConn->Close();
pConn.Release();
CoUninitialize();
}
else //在修改时取数据。。
{

m_list.DeleteAllItems();
while (m_list.DeleteColumn(0))
{
};
//上面两句清除原来的listCtrl
m_imagelist.Create(16,16,TRUE,2,2);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_list.SetImageList(&m_imagelist,LVSIL_SMALL);
    
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_list.SetBkColor(RGB(247,247,255));
m_list.SetTextColor(RGB(0,0,255));
m_list.SetTextBkColor(RGB(247,247,255));
m_list.InsertColumn(0, "", LVCFMT_LEFT, 85);
m_list.InsertColumn(1, "收 盘", LVCFMT_LEFT, 85);
m_list.InsertColumn(2, "涨 跌", LVCFMT_LEFT, 85); CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command)); pConn->ConnectionString = _bstr_t(ConnStr) ;
    
pConn->Open("","","",adConnectUnspecified);
    
pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="SELECT TOP 1 * FROM OverseasStockMarket ORDER BY StockMarketDate DESC ";
pRst=pCmd->Execute(NULL,NULL,adCmdText); while(!pRst->rsEOF)
{ CString str("");
m_list.InsertItem(0,"");
m_list.SetItemText(0,0,"Nasdaq");
m_list.SetItemText(0,1,(_bstr_t)pRst->GetCollect("NasdaqClosing"));
m_list.SetItemText(0,2,(_bstr_t)pRst->GetCollect("NasdaqUpsdowns"));

pRst->MoveNext(); }
    
pConn->Close();
pConn.Release();
CoUninitialize();
}
    
}void CProp1::OnUpdate() 
{
// TODO: Add your control notification handler code here
COverEdit dlg;    //Initialize;
    CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command)); pConn->ConnectionString = _bstr_t(ConnStr) ; pConn->Open("","","",adConnectUnspecified); pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
pCmd->CommandText="SELECT TOP 1 * FROM OverseasStockMarket ORDER BY StockMarketDate DESC ";
pRst=pCmd->Execute(NULL,NULL,adCmdText); while(!pRst->rsEOF)
{
CString str;
str.Format("%0.2f",(double)pRst->GetCollect("NasdaqClosing"));
dlg.m_NasdaqClosing = atof(str) ;
str.Format("%0.2f",(double)pRst->GetCollect("NasdaqUpsdowns")*100);
dlg.m_NasdaqUpsdowns = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("NikkeiClosing"));
dlg.m_NikkeiClosing = atof(str);
        str.Format("%0.2f",(double)pRst->GetCollect("NikkeiUpsdowns")*100);
dlg.m_NikkeiUpsdowns = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("TWSEClosing"));
dlg.m_TWSEClosing = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("TWSEUpsdowns")*100);
dlg.m_TWSEUpsdowns = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("DowJonesClosing"));
dlg.m_DowJonesClosing = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("DowJonesUpsdowns")*100);
dlg.m_DowJonesUpsdowns = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("HangSengClosing"));
dlg.m_HangSengClosing = atof(str);
str.Format("%0.2f",(double)pRst->GetCollect("HangSengUpsdowns")*100);
dlg.m_HangSengUpsdowns = atof(str);
        pRst->MoveNext();
}
if (IDOK==dlg.DoModal())
{
UpdateData(TRUE); CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command)); pConn->ConnectionString = _bstr_t(ConnStr) ;
pConn->Open("","","",adConnectUnspecified);
  
pRst->Open("SELECT TOP 1 * FROM OverseasStockMarket ORDER BY StockMarketDate DESC",_variant_t((IDispatch*)pConn),
adOpenDynamic,adLockOptimistic,adCmdText);
//pRst->AddNew(); // you can pRst->PutCollect
//pRst->PutCollect(_variant_t("RecordManID"),_variant_t((short)15)); pRst->Fields->GetItem(_variant_t("NasdaqClosing"))->PutValue(_variant_t(dlg.m_NasdaqClosing));
pRst->Fields->GetItem(_variant_t("NasdaqUpsdowns"))->PutValue(_variant_t(dlg.m_NasdaqUpsdowns/100));
pRst->Update(); pRst->Close();
pConn->Close();
pConn.Release();
CoUninitialize();
}
         //上为修改数据,再放到数据库中

    ListAddData(TRUE);//再调用函数重新在listCtrl中放入数据库更新过后的数据

}

解决方案 »

  1.   

    示例下载,在DEBUG下的执行文件。
    http://www.cczq.com/jacky/webmanage.exe
      

  2.   

    release是不执行Assert,但那个错误还是隐藏着
    建议在Debug下将问题解决,和debug/release无关
      

  3.   

    我猜想可能是窗体重复执行了,但如何能做到不重复执行。
    当listctrl的项再被删除后再重新增加listctrl的项时为什么会出错,怎么样才能免出错啊。
    这个问题我想是比较普通的存在的,就是不知道怎么去解决。
      

  4.   

    在修改时取数据时又调用了
    m_imagelist.create,
    前面已经调用过了,能这样用吗?
      

  5.   

    那怎么样用呢,你们一般是怎么用的啊,老大给个意见,不够再加分。
    我以前是玩DELPHI的。
      

  6.   

    ListAddData是否在程序运行中只是调用一次?
    如果调用多次就应把:  
      m_imagelist.Create(16,16,TRUE,2,2);
    m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    m_list.SetImageList(&m_imagelist,LVSIL_SMALL);
        
    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    m_list.SetBkColor(RGB(247,247,255));
    m_list.SetTextColor(RGB(0,0,255));
    m_list.SetTextBkColor(RGB(247,247,255));
    m_list.InsertColumn(0, "", LVCFMT_LEFT, 85);
    m_list.InsertColumn(1, "收 盘", LVCFMT_LEFT, 85);
    m_list.InsertColumn(2, "涨 跌", LVCFMT_LEFT, 85);OnInitDialog() 中去.
      

  7.   

    Imisspassword(NOMONEY) 所言极是,我一时脑子咋转不过弯了呢
    现在对了。结贴~~~~~