查询数据库中表Employees的一列Badge_ID(非主键)满足=temp值,并返回主键Emp_ID(数据类型为int)
int CEmployees::GetEmpID2(CString temp)
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SELECT语句
_bstr_t vSQL;
vSQL = "SELECT * FROM Employees WHERE Badge_ID='" + temp + "'";

//执行SELECT语句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
if (m_pRecordset->adoEOF)
CEmployees();
else
{
// Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
//var = m_pRecordset->GetCollect("Age");
Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
}
//断开与数据库的连接
m_AdoConn.ExitConnect();
return Emp_Id;
}

解决方案 »

  1.   

    vSQL = "SELECT * FROM Employees WHERE Badge_ID='" + temp + "'";
    你这里有个问题没有搞清楚,temp是字符串,而Badge_ID是整型,这样用等于是不成立的。改为:
    vSQL.Format("SELECT * FROM Employees WHERE Badge_ID = %s",temp);
    或者你的语句中将两个单引号去掉,保持等号两边在SQL语句中类型相同。
      

  2.   

    vSQL = "SELECT * FROM Employees WHERE Badge_ID='" + temp + "'";
    如LS所说,你这里查询的是字符串,不是整型
      

  3.   

    我已经在SQL中试过了,结果显示这个用户在表里的所有信息 怎么返回他的Emp_ID呢 是个整型
    Badge_ID定义的就是个字符串
      

  4.   

    我已经在SQL中试过了,结果显示这个用户在表里的所有信息 怎么返回他的Emp_ID呢 是个整型
    Badge_ID定义的就是个字符串
      

  5.   

    Badge_ID定义的是CString型
    查询语句我已经在SQL中试过了,结果显示这个用户在表里的所有信息 怎么返回他的Emp_ID呢 是个整型号
      

  6.   

    或者这样:
    CString strTemp;
    strTemp.Format("%d",temp);
    vSQL ="SELECT * FROM Employees WHERE Badge_ID="+strTemp;
      

  7.   

    CString strTemp;
    strTemp.Format("%d",temp);
    vSQL ="SELECT Emp_ID FROM Employees WHERE Badge_ID="+strTemp;
      

  8.   

    我已经在SQL中试过了,结果显示这个用户在表里的所有信息 怎么返回他的Emp_ID呢 是个整型
    Badge_ID定义的就是个字符串
    ===你的语句中并没有循环,而且只有Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
    这一句,不知道你所说的所有信息是什么东西。
      

  9.   


    while(!m_Ado.m_pRecordset->adoEOF)
    {
    Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
    m_Ado.m_pRecordset->MoveNext();                          //执行添加下一条信息
    }
      

  10.   


    楼主: Badge_ID(非主键)满足=temp值,并返回主键Emp_ID(数据类型为int)
    因为Badge_ID(非主键)满足=temp值,成立的记录可能有多条,所以要用循环。
      

  11.   

    Badge_ID是唯一的,是个电子标签的卡号。可以加你QQ吗?或者我的964461873
      

  12.   

    这个函数想返回整型,最好能留个QQ,或者能加我QQ964461873
    函数想查询表中BadgeID=temps(这个已实现),返回值Emp_Id为整型(这个失败了),报错
    我重新改了一下,还是失败了int CEmployees::GetEmpID(CString temp3)
    {
    //连接数据库
    ADOConn m_AdoConn;
    m_AdoConn.OnInitADOConn();
    //设置SELECT语句
    _variant_t vParam;
    _bstr_t vSQL;
    vSQL = "SELECT Emp_Id FROM Employees WHERE BadgeID=" + temp3;
    //执行SELECT语句
    _RecordsetPtr m_pRecordset;
    m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
    if (m_pRecordset->adoEOF)
    return 0;
    else
    {
        vParam=m_pRecordset->GetCollect("Emp_Id");
    return vParam.iVal;
    }
    }
      

  13.   

    我知道了,错误是因为_variant_t型转化int型没成功,求指导,几种方法都试了
    int CEmployees::GetEmpID(CString temp3)
    {
    //连接数据库
    ADOConn m_AdoConn;
    m_AdoConn.OnInitADOConn();
    //设置SELECT语句
    AfxMessageBox("模式设置成功!");
    _bstr_t vSQL;
    vSQL = "SELECT Emp_Id FROM Employees WHERE BadgeID=" + temp3;
    //执行SELECT语句
    _RecordsetPtr m_pRecordset;
    m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
    if (m_pRecordset->adoEOF==1)
    return 0;
    else
    {
            _variant_t var;
    var=m_pRecordset->GetCollect("Emp_Id");
            int i= var.intVal;
            return i;
    }
    }
      

  14.   

    dingdong 20:42:47 
    嗯 我在听 
    笨笨兔 20:43:42 
    CString str;
    str.format("%d", Emp_ID)vSQL = "INSERT INTO Attendence(CheckTime,BadgeID,Emp_Id) VALUES('" + CheckTime + "','" + BadgeId + "',“ +  (_bstr_t)Emp_ID + ")";
     
    笨笨兔 20:43:52 
    好像还有更巧妙的方法 
    笨笨兔 20:43:59 
    稍等,我再想想 
    笨笨兔 20:56:57
    你怎么写的??
    dingdong 20:57:03
    void CAttendence::sql_insert()
    {
    CString str;
    str.Format("%d", Emp_ID);
    //连接数据库
    ADOConn m_AdoConn;
    m_AdoConn.OnInitADOConn();
    _bstr_t vSQL;
    vSQL = "INSERT INTO Attendence(CheckTime,BadgeID,Emp_Id) VALUES('" + CheckTime + "','" + BadgeId + "',"+(_bstr_t)Emp_ID+")";
    //执行INSERT语句
    m_AdoConn.ExecuteSQL(vSQL);
    //断开与数据库的连接
    m_AdoConn.ExitConnect();
    }
    笨笨兔 20:57:31
    。。
    vSQL = "INSERT INTO Attendence(CheckTime,BadgeID,Emp_Id) VALUES('" + CheckTime + "','" + BadgeId + "',"+(_bstr_t)str+")";
    dingdong 20:58:03
    oh no
    笨笨兔 20:58:20
     
    dingdong 20:58:55
    error C2666: '+' : 2 overloads have similar conversions
    dingdong 20:59:03
    还是这句在报错
    笨笨兔 20:59:11
    稍等
    笨笨兔 21:00:50
    CheckTime 是_bstr_t类型的么??
    dingdong 21:01:24
    不是 之前已经验证了 CheckTime 没问题的 是CString类型
    笨笨兔 21:01:48
    稍等
    dingdong 21:01:54
    就是这个Emp_ID的问题
    笨笨兔 21:02:03
    vSQL = "INSERT INTO Attendence(CheckTime,BadgeID,Emp_Id) VALUES('" + CheckTime + "','" + BadgeId + "',"+str+")";dingdong 21:08:35 
    那一串是BadgeID 就是temp3 
    笨笨兔 21:08:57 
    等一下 
    dingdong 21:09:03 
    嗯 
    笨笨兔 21:12:22 
    vSQL = "SELECT Emp_Id FROM Employees WHERE BadgeID=" + temp3 + "'";
     
    笨笨兔 21:12:30 
    vSQL = "SELECT Emp_Id FROM Employees WHERE BadgeID='" + temp3 + "'"; 避免倒分嫌疑....分享一下我昨天晚上学习vc 字符转换的经验^_^