可能是记录中没有数据,
去掉p_Set->MoveFirst();这一句就可以了。
访问数据库的时候,应该经常考虑
try
{
}
catch(...)
{
}
来捕获错误。

解决方案 »

  1.   

    一般的开始遍历一个数据库表时,应该先判断它是否有记录,然后才能开始遍历,才能是用 .MoveFirst .... .MoveNext 等等
      

  2.   

    在MoveFirst 和 MoveLast 之前 , 要先用 IsBOF() 和 IsEOF() !用
    if( !m_pSet->IsBOF() )
        m_pSet->MoveFirst( );
    if( !m_pSet->IsEOF()
        m_pSet->MoveLast( );我做过不少ODBC的东东,你马上发给我吧!
    [email protected]
      

  3.   

    TO  fz_zhou(vcfan):
    数据库一定不是空的了。
    等一下我会把代码发给你。
      

  4.   

    你这个问题我也遇到过的,可能是表里面没有记录,所以MoveFirst时出现错误。有个办法可以解决,把MoveFirst()改成以下两条语句就可以了。
    m_pSet.Close();
    m_pSet.Open();
    while(!m_pSet.IsEOF)
    {
      ...
    }
      

  5.   

    那你有没有设置过 m_strFilter 之类的东西!
      

  6.   

    To  fz_zhou(vcfan):
    代码已经发给你了,谢谢了先。
    写得很乱。
    问题解决了,一定要E-Mail我。
      

  7.   

    不好意思,公司不让往外发mail!
    我会在CSDN 上给你回复!
      

  8.   

    东东已收到,我看了一下,首先发现你的不好的地方就是建文件太多,你应该把你所有的东本全放到一个mdb中去,再在此文件中建很多表,
    打开 一个数据库是很费时的操作,但在已打开的文件中打开一张表相对时间少多了!
    所有如果你还有机会做这种项目的话,最好放到一个文件中去!
    而且你这种几个文件根本就不用谈几范式了,只能靠你自己来统一操作!
      

  9.   

    "SELECT DISTINCT PAGE FROM [STUDENT] ORDER BY PAGE"这时是不是错了,DISTINCT PAGE 是什么意思!
      

  10.   

    fz_zhou(vcfan) :
    我的数据库结构中infos.mdb存放一些自定义的约定,比如:
    FlexGrid列标题、宽度、和采用辅助控件的格式,以及其它约定,主要还是有关
    当数据库不为空时,
    MoveLast再MoveNext为什么出错
    我们数据量大,而且一般一次只对一个库操作,所以切换数据库动作不会太多。
    如果把1991~2000放入一库中,数据库如被破坏,损失太大。"SELECT DISTINCT PAGE FROM [STUDENT] ORDER BY PAGE"一句中PAGE是字段名。
      

  11.   

    MoveLast再MoveNext为什么出错
    这个是一定会出错的,你都到了最后一条了,没有Next 了!
    再MoveNext当然就要出错了!对了,你是冶院的吧!(我也是江西人,现在杭州)
    现在叫南方工业大学了吧!
      

  12.   

    哈哈,别提这事了,校名改不改我觉得没什么必要,对我也没什么实际意义。但你说:
    while(!rs.IsEof())
    {
     rs.movenext();
    }
    怎么会错???
      

  13.   

    我用的是ADO,没有发现这样的问题。
    prs->movefirst();
    if (!prs->adoEOF)
    {
       ……
       prs->movenext();
    }
    我选的是动态游标.
    关注中……
      

  14.   

    那我的DAO怎么就不行呢,KAO!
    我打算用
    for(int i = 0;i< =m_pSet->GetRecordCount();i++)
    {m_pSet->MoveNext();
     
    }我以前的方法是:
    if(p_Set->IsEOF() && p_Set->IsBOF())
    {
    return;
    }
    p_Set->MoveFirst();
    while(!p_Set->IsEOF())
    {...
    p_Set->MoveNext();}
      

  15.   

    我假设你用的是odbc与数据库连接,(不过一般mdb数据库使用dao打开,但是答案类似)首先你的CRecordSet是用何种方式打开的,是snapshot or dynaset 或者其他的方式,察看一下MSDN 的CRecordSet::Open 里面参数的说明,然后用CRecordSet::GetRecordCount()看看表里是否有数据,如果没有,你最好在打开Access里自己加入一行数据,一般来说这样时没有问题的了。你最好用try  catch 来捕获错误。
     格式如下 
      try
    {
    }
    catch (CDBException* e)
    {
    e->ReportErr();
    e->Delete();
    }
    建议你多看看Msdn的例子及帮助。
      

  16.   

    DAO我没怎么用过,晚上看了一下你的程序,觉得也没有什么问题!你打开方式也是对的!
    我今天再帮你看一下!
      

  17.   

    真是太谢谢楼上两位了,希望你们继续关注本贴。
    To soft_leer(softwind) :
    我采用的是DAO,请给我你的E-Mail我把代码发给你。
      

  18.   

    先要有
     if(pSet->GetRecordcount()==0)
     { 
       //数据库为空的时候
       break;
     }
     pSet->MoveFrist();
     if(!pSet->IsEOF())
     {
         pSet->MoveNext();
     }
      

  19.   

    mahongxi(烤鸡翅膀)(色摸):
    while(!rs.IsEof())
    {
     rs.movenext();
    }
    怎么会错???
    你调试一下不就知道了?
    我记得当记录移到最后一条时EOF还不是Fause!
    但再移一个才是F,
      

  20.   

    谢谢各位了,昨天CSDN打不开,不知怎么回事。问题又变得奇怪了,F10一步步调试时会出错,而F5运行时没错,KAO