用ado链接,有两个字段id和name.现在我知道一个name的值,怎样找到其所在的记录,及其id,谢谢

解决方案 »

  1.   

    _bstr_t bstr;
    _variant_t theValue;
    CString  str;
    int id;
    str  = _T("select id from table where name = yourvalue");
    bstr = str;
    try
    {
    pRecordset.CreateInstance(__uuidof(Recordset));
    pRecordset->Open( bstr,
       pConnection.GetInterfacePtr(),
       adOpenDynamic,
       adLockOptimistic,
       adCmdText);
    while( !pRecordset->adoEOF )
    {
    theValue = pRecordset->GetCollect(_T("id"));
    if(TheValue.vt!=VT_NULL)
        id = atoi( (char*)_bstr_t(theValue) );
    }
    }
    catch(_com_error &e)
    {
        //...
    }
    catch(...)
    {
        //...
    }
      

  2.   

    就是这样
    使用SQL语句定位就行了
      

  3.   

    谢谢HanKuu大哥的指点!!顺便再问一下:
    pRecordset.CreateInstance(__uuidof(Recordset));和
    pRecordset.CreateInstance("ADODB.Recordset");这两个句子有什么不同??
      

  4.   

    /**************************************************************
    响应"证卡管理"->"撤户办理(&X)"
    历史纪录:历史纪录:andy-24/5/2002
    ***************************************************************/
    void CMyView::OnCardRelease() 
    {
        m_strTableName=_T("用户信息");//设置当前操作的数据库表名称
       //监测dao数据库对象的有效性,并在纪录集对象打开时关闭该记录集
       if(!m_pDatabase->IsOpen())
       return;
       if(!m_pRecordset)
       return;
       if(m_pRecordset->IsOpen())
       m_pRecordset->Close();
        /////////////////////////////////////////////////////////
        CCarddeleteuser dlg;
    if(dlg.DoModal()!=IDOK)
    return;
    CString userid=dlg.m_userid;
    //AfxMessageBox(userid);
    CString strSql,str;
    //////////////////////////////////////////////////////////
    //判断是否是合法用户
        strSql.Format("select * from 用户信息");
    m_pRecordset->Open(dbOpenDynaset,strSql);
    str.Format("读者号='%s'",userid);
    if(!m_pRecordset->FindFirst(str))
    {
    str.Format("该用户未注册或输入错误,请确认输入!");
    AfxMessageBox(str);
    return;
    }
            m_pRecordset->Close();
    //判断是否借有书
    strSql.Format("select * from %s where  读者号='%s'",m_strTableName,userid);
        m_pRecordset->Open(dbOpenDynaset,strSql);
    str.Format("借阅书目个数>0");
    if(m_pRecordset->FindFirst(str))
    {
    AfxMessageBox("该用户还借有图书,不能注销!");
    return;
    }
    else
    {
     strSql.Format("delete from %s where 读者号='%s'",m_strTableName,userid);
    }
    try
    {
    if(m_pDatabase->CanUpdate())
       m_pDatabase->Execute(strSql);
    }
    catch(CDaoException *e)
    {
    e->ReportError();
    e->Delete();
    return;
    }
    OnZhbbUserall();}
      

  5.   

    类似上面的用法,调用sql语句即可。
    具体参见希望出版的<vc数据库高级编程〉
      

  6.   

    我们在创建ADO COM对象实例时,假如有多个ADO版本,这时需要指定针对哪个版本创建实例,如果用pRecordset.CreateInstance(__uuidof(Recordset));
    创建,这时创建的实例是根据头文件里定义的GUID来指定版本,如果用pRecordset.CreateInstance("ADODB.Recordset");则我们人为地指定创建的版本,“ADODB.Recordset”就是版本描述符
    你可以参看一下注册表KEY_CLASSES_ROOT下的CLSID 和 CurVer