请教各位,你们是这样写ADO程序的吗?感觉速度好慢呢,600多条记录要1,2分钟才能读出来

iuhxq 2004-12-28 04:02:12
小弟不是专业搞这个的,各位么见笑,也许应该放到一个线程里来做这个,可是俺不太会写线程。呵呵
说说你们是怎么开发数据库程序的。谢谢
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();
}
...全文
262 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
iuhxq 2004-12-29
  • 打赏
  • 举报
回复
数据库很大,所以我把建数据库的脚本发给你了。在chat.rar里
bohut 2004-12-29
  • 打赏
  • 举报
回复
你的数据库是sql server的吧,请把数据库导成文件发给我。
iuhxq 2004-12-29
  • 打赏
  • 举报
回复
谢谢楼上各位热心网友

to 伯虎:
我把代码发给你了,麻烦你帮我看一下。
oyljerry 2004-12-29
  • 打赏
  • 举报
回复
刷新也要消耗时间
oyljerry 2004-12-29
  • 打赏
  • 举报
回复
不要按一下按钮,就连接一次数据库,这个会消耗时间的
bohut 2004-12-29
  • 打赏
  • 举报
回复
如果可能的话,请将代码发至bohut@163.com
注明原帖的url。希望可以帮到你。
zhangqu_980371 2004-12-29
  • 打赏
  • 举报
回复
不是ADO慢。是屏幕刷新慢。
从你的程序看来,屏幕需要输出1200次,也就是刷新1200次。
嘿嘿。当然很慢。在这之前你把屏幕刷新disable掉。保正很快。
stavck 2004-12-29
  • 打赏
  • 举报
回复
不应该每次按下按钮都要连接数据库的,连接数据库是很慢的,应该把数据库连接做一个成员变量,初始化时连接数据库。
iuhxq 2004-12-29
  • 打赏
  • 举报
回复
伯虎大哥帮我找到原因了,是网速慢,我晕!

SQL 服务器在远端
zhangqu_980371 2004-12-29
  • 打赏
  • 举报
回复
如果一定排除显示问题,那么就是数据库问题:索引
lemon_wei 2004-12-29
  • 打赏
  • 举报
回复
我用ADO从ACEESS数据库查询新数据写到SQL server 数据库,每分钟240条数据 还是分布在15个表中,只用6秒多一点。我想说的是ADO没有这么慢,应该是其它地方有问题,上面有人也说了,显示也是要花一定的时间的。
  
sharkhuang 2004-12-28
  • 打赏
  • 举报
回复
ADO不会这么慢!可能数据库哪里出问题了!还是设置问题!
iuhxq 2004-12-28
  • 打赏
  • 举报
回复
哪位大虾能帮忙看看,哪里有问题吗?
glimix 2004-12-28
  • 打赏
  • 举报
回复
如上,或许是你的代码有问题。
bohut 2004-12-28
  • 打赏
  • 举报
回复
应该是数据库或者你的代码处理的问题,ado的速度还不至于慢成这样。
iuhxq 2004-12-28
  • 打赏
  • 举报
回复
什么接口?不好意思,偶只会用ADO操作数据库
MZP 2004-12-28
  • 打赏
  • 举报
回复
ADO速度就是这样了,很慢。
要想快用专用接口。

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧