CString strName;
dlg->m_pRecordset =  dlg->m_pConnection->Execute("SELECT * FROM _user WHERE tel = 23", NULL, adCmdText);

if(!dlg->m_pRecordset->adoBOF)
{
_variant_t vIndex = (long)0;
_variant_t vCount = dlg->m_pRecordset->Fields->GetItem(vIndex)->Value;
dlg->m_pRecordset->Close();
strName = (LPCSTR)_bstr_t(vCount);
dlg->m_list.InsertString(0, strName);
}
else
dlg->m_list.InsertString(0, "无记录");如果tel=23(该值在表中存在),则程序运行正确;若我换一个表中不存在的值,那么程序执行的这里就会异常中止。但我需要判断一个值在我的表中到底有没有,请问各位达人们有什么建议,还望不吝赐教。谢谢了!!!

解决方案 »

  1.   

    if(!dlg->m_pRecordset->adoBOF)
    不能这样来判断有没有记录,用下面的语句:
    if ((dlg->m_pRecordset->EOF) && (dlg->m_pRecordset->BOF))
      

  2.   

    你当然不会对了,在你的Stdafx.h中没有修改重复的adoBOF,去看看书上的例子,在看看它的Stdafx.h文件夹
      

  3.   

    那你在前面再判断一下记录集是不是为空了:
    if ((dlg->m_pRecordset!=NULL) && (dlg->m_pRecordset->EOF) && (dlg->m_pRecordset->BOF))
      

  4.   

    好,我再试试多谢 tabby(-_-! .. 内存泄漏)大哥了
      

  5.   

    如果数据库支持的话,可以试一试 m_pRecordset->RecordCount (打开m_pRecordset时的光标类型为adOpenKeyset)
      

  6.   

    参考代码,祝好运#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "AdoEOF")using namespace ADODB;bool CADORecordset::IsEmpty()
    {
        if ( IsOpen() )
        {
            if ( m_pRecordset->BOF && m_pRecordset->AdoEOF )
            {
                return true;
            }
            return false;
        }    return true;
    }
    long CADORecordset::GetRecordCount()
    {
        long    lRowConut = 0L;
        
        if ( IsOpen() )
        {
            lRowConut = m_pRecordset->GetRecordCount();
            if ( lRowConut == -1 )
            {
                lRowConut = 0L;            if ( !IsEmpty() )
                {
                    m_pRecordset->MoveFirst();
                    
                    while ( !m_pRecordset->AdoEOF )
                    {
                        m_pRecordset->MoveNext();
                        lRowConut++;
                    }
                    m_pRecordset->MoveFirst();
                }
            }
        }    return lRowConut;
    }
      

  7.   

    程序好像并不是如何判断是否为空这里有问题,->Execute("SELECT * FROM _user WHERE tel = 23", NULL, adCmdText);在这条语句中当我将23(表中存在的值)替换成一个表中不存在的值(比如说24时)程序就会出现异常中止。但我需要看看这些值是否存在我的表中,请问该如何期待等待求救啊