以下是CRecordset类继承类中函数的代码。CString strSQL;
for(int groundType; groundType<100; groundType++)
{
  strSQL.Format("select * from radartest1 where GroundTypes=%d  ORDER BY Distance",   groundType,);  
  Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
  //数据处理
  Close();
}
Open()需近2秒的时间才能返回,可能跟我要取的数据量有关。但这样一来整个循环的执行时间就无法接受。
刚刚结束数据库编程,不知道这样的结构是不是合理?现在是groundType变化一次,就Open一次。
如何缩短查询数据库的时间呢?
用ADO可以获得更多的控制,在这个效率方面是不是也有优势?
大家帮忙啊,急需解决哪

解决方案 »

  1.   

    楼主要打开数据库100次,效率怎么会高?修改一下strSQL,打开一次不行吗?
      

  2.   

    这样做效率肯定很低,但因为刚接触SQL,所以懂得不多啊,“打开一次”不知道怎么写啊。
    是不是先用Open打开(一次),然后用设置m_strFilter和m_strSort,用Requery()多次查询?感觉差不多啊?
     
    学习!!!
      

  3.   


      CStirng strSQL 
      CRecordSet m_pSet;
      strSQL = _T("select * from radartest1 where GroundTypes<100  ORDER BY Distance"); 
      m_pSet.MoveFirest();
      while(!m_pSet.IsEOF())
    {
      pSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
      
      //循环进行数据处理
       pSet.MoveNext();
    }
     pSet.Close();
      

  4.   

    xindao_wang(小日本都是猪)的代码的顺序有点错误,应该这样
      CStirng strSQL 
      CRecordSet m_pSet;
      strSQL = _T("select * from radartest1 where GroundTypes<100  ORDER BY Distance"); 
      pSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
      while(!m_pSet.IsEOF())
    {
      
      //循环进行数据处理
       pSet.MoveNext();
    }
     pSet.Close();
      

  5.   

    不好意思,写错了,应该把open函数写在循环之外,如3ks(司马缸--砸光)所说.
      

  6.   

    如下:  
    CStirng strSQL 
      CRecordSet m_pSet;
      strSQL = _T("select * from radartest1 where GroundTypes<100 AND Dive<10.0 ORDER BY Distance"); 
      pSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
      while(!m_pSet.IsEOF())
    {
       //循环进行数据处理
       pSet.MoveNext();
    }
    pSet.Close();为什么这样会出错呢?GroundTypes 和Dive都是一样的索引值啊。解决这个问题后立马散分
      

  7.   

    捕捉到错误:“超时已过期”
    我用SQL Server2000的查询分析器执行是成功的,但
    同样的语句在Vc++ 下就不行。
    可能问题本身很简单,实乃刚接触,又没时间去查资料,只好来这里求助了。先谢谢各位了。
      

  8.   

    我是远程访问数据库服务器,
    在执行Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);后
    所有的记录集结果是不是已经传到了本地机上?
    还是每次通过"MoveNext();"语句把记录集从远端服务器传过来的么?
    测试下来执行MoveNext();耗时1ms左右???