对于一张表t(a,b,c);
在vc ado编程中,我怎样才能知道b=100的记录存不存在?
应该是类似这样一条SQL吧:select * from t exists(b = 100).请教一下两个问题?
1、这句SQL怎么写?
2、在vc ado中,执行SQL语句返回的是一个记录集(_RecordsetPtr m_pRec),怎么从m_pRec里取我判断的结果?

解决方案 »

  1.   

    select * from t where b = 100;
      

  2.   

    _variant_t vdata;while(!pRecordset->adoEOF)
    {
      vdata = pRecordset->GetCollect("列名");
    if(vdata.vt != VT_NULL)
    {}
      

  3.   

    _variant_t vdata; while(!pRecordset->adoEOF) 

      vdata = pRecordset->GetCollect("列名"); 
    if(vdata.vt != VT_NULL) 
    { }pRecordset->MoveNext();
    }
      

  4.   

    解答:1、SQL 语句// 获取记录集(可能的结果是空,一条记录,多条记录)
    SELECT * FROM t WHERE b=100
    // 获取记录个数
    SELECT COUNT(*) FROM t WHERE b=100
    2、在程序中判断 CString strSQL("SELECT * FROM t WHERE b=100");  // 生产 SQL 语句 pRs->Open(_variant_t(strSQL),
    theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);  // 打开记录集
    if(!pRs->BOF) bReturn = TRUE;  // 判读指针位置,不在 BOF 时,表示记录集中有记录 pRs->Close();
    如果记录集中没有记录,pRs->BOF 为真,有记录为假。
      

  5.   

    char szSQL[512];
    sprintf(szSQL,"select * from t where b = 100");
    try
    {
    rst=cnn->Execute(_bstr_t(szSql),&v,adCmdText);
    if(!rst->GetadoEOF())
    {

    AfxMessageBox("存在!");

    }else
    {
                        AfxMessageBox("不存在!");
                            
                     }
    }
    catch(_com_error &e)
    {
    char szTmp[512];
    sprintf(szTmp,"执行SQL出错: %s",LPCTSTR(e.Description()));
    AfxMessageBox(szTmp);
    return;
    }
      

  6.   

    也可以先打开“SELECT * FROM t”的记录集,然后设置filter过滤
      

  7.   

    同意四楼SELECT COUNT(*) FROM t WHERE b=100 
    程序里要想获得返回结果就得改改了。
    SELECT COUNT(*) as T1 FROM t WHERE b=100 ;
    执行完以后,
    _variant_t v1;
    int n;
    要用记录集对象,
    v1 = pRs->GetCollect(T1);
    然后
    int n = v1.intVal
    n就是记录数
    n>0就有,否则没有。