我用ADO连接SQL SERVER ,可以成功读出数据,
#include "icrsint.h"
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF") 
_RecordsetPtr myset;//定义
但myset->adoEOF不起作用,不能检测到是记录尾,结果循环时候就出现崩溃,编译能通过,但分步调试时候报错:overloaded operator -> not supported,不知道怎么回事啊

解决方案 »

  1.   

    VARIANT_BOOL eof;
    myset->get_EOF(&eof);如果是因为这个,那我真是...
      

  2.   

    See the links below, FYI :http://codeguru.earthweb.com/mfc_database/QTADO.shtml
    http://codeguru.earthweb.com/mfc_database/ADOX_in_details.html
      

  3.   

    while(!myset->adoEOF)
    {
    myset->MoveNext();
    ........
    _variant_t value=myset->GetCollect("au_id");
    _variant_t value1=myset->GetCollect("au_lname");
    _variant_t value2=myset->GetCollect("city");
    m_type=(char*)_bstr_t(value);
    m_departure=(char*)_bstr_t(value1);
    m_aim=(char*)_bstr_t(value2);
    UpdateData(false);
    }
    这样用的时候就不起作用!结果蹦出个abnormal program termination
      

  4.   

    你的逻辑有问题,不应该是先movenext再Update,应该先Update再movenext!
      

  5.   

    编译通过了,单步调式报的是overloaded operator ->not supported我不能上国外的网站,能帮贴一下吗
      

  6.   

    在打开记录集时,你依此用下面这几个CursorType试试。或许有用。
    adOpenForwardOnly
    adOpenKeyset
    adOpenDynamic
    adOpenStatic 
      

  7.   

    四个都用了,myset->adoEOF不起作用
      

  8.   

    抱歉,我想问清楚一点儿:
    单布调试是调试到myset->adoEOF时出错吗?
    UpdateData(false)是更新窗口?还是Update()而你写错了?如果是更新窗口试试加上一个Update()试试(好像ADO里如果用MoveNext,记录集是可以自动保存的,不过VC中不知道会不会自动保存,因为我一直都用Update的,呵呵)。PS:get_EOF(VARIANT_BOOL)我试过没出错(不过我没用#import,用#include的):
    VARIANT_BOOL eof;
    myset->get_EOF(&eof)
    while (!eof)
    {
    ...
    myset->get_EOF(&eof);
    }
      

  9.   

    对,调到myset->adoEOF也不停止,接着执行后面语句,但调试框里是我说的那个提示,执行到最后一个记录还是检测不出。我是更新窗口,从库里读数据
      

  10.   

    while(!myset->adoEOF)
    {
    ........
    _variant_t value=myset->GetCollect("au_id");
    _variant_t value1=myset->GetCollect("au_lname");
    _variant_t value2=myset->GetCollect("city");
    m_type=(char*)_bstr_t(value);
    m_departure=(char*)_bstr_t(value1);
    m_aim=(char*)_bstr_t(value2);
    UpdateData(false);
    myset->MoveNext();
    }
    这样可以吗?
      

  11.   

    对不起,我也很想知道为什么,所以请你帮个忙试试下面的代码:VARIANT_BOOL eof;
    HRESULT hr;
    hr=myset->get_EOF(&eof);
    if (FAILED(hr))
      MessageBox("First get failed");
    while (!eof)
    {
    ...
    ...
    hr=myset->get_EOF(&eof);
    if (FAILED(hr))
      MessageBox("Looping get failed");
    }希望能帮帮忙,谢谢。
      

  12.   

    myset->GetadoEOF();我就是这么用的
      

  13.   

    __variant__t Holder  try{while(!MySet-〉adoEOF)  { Holder = MySet-〉GetCollect("FIELD__1");  if(Holder.vt!=VT__NULL)  m__List.AddString((char)__bstr__t(Holder));  MySet-〉MoveNext();} }  catch(__com__error  e)  { CString Error = e-〉ErrorMessage();   AfxMessageBox(e-〉ErrorMessage());  } catch(...)  { MessageBox("ADO发生错误!");} 我抄的别人的代码,测试通过的。如果需要,我把完整代码给你![email protected]
      

  14.   


    抱歉,这两天有事情没来,那个代码调试如下D:\ado\adoDlg.cpp(389) : error C2039: 'getEOF' : is not a member of '_Recordset'
            d:\ado\debug\msado15.tlh(1693) : see declaration of '_Recordset'
    D:\ado\adoDlg.cpp(395) : error C2039: 'get_EOF' : is not a member of '_Recordset'
            d:\ado\debug\msado15.tlh(1693) : see declaration of '_Recordset'
    Error executing cl.exe.
    Creating browse info file...ado.exe - 2 error(s), 0 warning(s)
      

  15.   

    我的问题已经解决,try{while(!MySet-〉adoEOF)...正确执行是没有问题的,我的程序在此处出现问题是因为别处的毛病,而非真正是此句的原因,请检查一下你的程序,不要光盯着此句。
    建议查一下此行:
    myset->Open("select * from authors",mydb.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
    用调试手段看一下此句是否被执行,如果此句没有被执行或在程序中被跳过的话,try{while(!MySet-〉adoEOF)肯定要出问题。
      

  16.   

    而且如果执行sql语句,存储过程没有返回集,也会出现类似的错误.