小弟不是专业搞这个的,各位么见笑,也许应该放到一个线程里来做这个,可是俺不太会写线程。呵呵
说说你们是怎么开发数据库程序的。谢谢
void CLogin::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
if ( phone.Left(2) != "13" || phone.GetLength() != 11 )
{
MessageBox("手机号码错误");
return;
}
CString sql; sql.Format("select * from chat_user where phone=%s",phone); _RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(_variant_t(sql),(IDispatch *)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); if ( m_pRecordset->adoEOF )
{
MessageBox("手机号码不存在");
return;
}
_variant_t nickname = m_pRecordset->GetCollect("nickname");
title.Format("%s",(char *)(_bstr_t)nickname);
m_pRecordset->Close(); GetDlgItem( IDOK )->EnableWindow(false);
sql.Format("select userid,nickname,phone from chat_user where state=1");
m_pRecordset->Open(_variant_t(sql),(IDispatch *)m_pConnection,adOpenKeyset,adLockOptimistic,adCmdText);
int i=0;
int count = m_pRecordset->RecordCount;
progress.SetRange( 1, count );
CString str;
MSG msg;
User u;
while(!m_pRecordset->adoEOF)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
i++;
str.Format("%d/%d",i,count);
GetDlgItem( IDC_PROTEXT )->SetWindowText(str);
progress.SetPos(i);
_variant_t userid = m_pRecordset->GetCollect("userid");
_variant_t nickname = m_pRecordset->GetCollect("nickname");
_variant_t pho = m_pRecordset->GetCollect("phone");
u.nickname = (char *)(_bstr_t)nickname;
u.userid = userid.lVal;
luser.push_back(u);
m_pRecordset->MoveNext();
}
m_pRecordset->Close(); sql.Format("select * from chat_room");
m_pRecordset->Open(_variant_t(sql),(IDispatch *)m_pConnection,adOpenKeyset,adLockOptimistic,adCmdText);
i=0;
count = m_pRecordset->RecordCount;
progress.SetRange( 1, count );
Room r;
while(!m_pRecordset->adoEOF)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} i++;
str.Format("%d/%d",i,count);
GetDlgItem( IDC_PROTEXT )->SetWindowText(str);
progress.SetPos(i);
_variant_t id = m_pRecordset->GetCollect("id");
_variant_t roomname = m_pRecordset->GetCollect("roomname");
r.id = id.lVal;
r.roomname = (char *)(_bstr_t)roomname;
lroom.push_back(r);
m_pRecordset->MoveNext();
}
m_pRecordset->Close(); OnOK();
}

解决方案 »

  1.   

    ADO速度就是这样了,很慢。
    要想快用专用接口。
      

  2.   

    什么接口?不好意思,偶只会用ADO操作数据库
      

  3.   

    应该是数据库或者你的代码处理的问题,ado的速度还不至于慢成这样。
      

  4.   

    ADO不会这么慢!可能数据库哪里出问题了!还是设置问题!
      

  5.   

    不是ADO慢。是屏幕刷新慢。
    从你的程序看来,屏幕需要输出1200次,也就是刷新1200次。
    嘿嘿。当然很慢。在这之前你把屏幕刷新disable掉。保正很快。
      

  6.   

    如果可能的话,请将代码发至[email protected]
    注明原帖的url。希望可以帮到你。
      

  7.   

    你的数据库是sql server的吧,请把数据库导成文件发给我。
      

  8.   

    数据库很大,所以我把建数据库的脚本发给你了。在chat.rar里
      

  9.   

    我用ADO从ACEESS数据库查询新数据写到SQL server 数据库,每分钟240条数据 还是分布在15个表中,只用6秒多一点。我想说的是ADO没有这么慢,应该是其它地方有问题,上面有人也说了,显示也是要花一定的时间的。
      
      

  10.   

    伯虎大哥帮我找到原因了,是网速慢,我晕!SQL 服务器在远端