查询数据库中表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;
}
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;
}
你这里有个问题没有搞清楚,temp是字符串,而Badge_ID是整型,这样用等于是不成立的。改为:
vSQL.Format("SELECT * FROM Employees WHERE Badge_ID = %s",temp);
或者你的语句中将两个单引号去掉,保持等号两边在SQL语句中类型相同。
如LS所说,你这里查询的是字符串,不是整型
Badge_ID定义的就是个字符串
Badge_ID定义的就是个字符串
查询语句我已经在SQL中试过了,结果显示这个用户在表里的所有信息 怎么返回他的Emp_ID呢 是个整型号
CString strTemp;
strTemp.Format("%d",temp);
vSQL ="SELECT * FROM Employees WHERE Badge_ID="+strTemp;
strTemp.Format("%d",temp);
vSQL ="SELECT Emp_ID FROM Employees WHERE Badge_ID="+strTemp;
Badge_ID定义的就是个字符串
===你的语句中并没有循环,而且只有Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
这一句,不知道你所说的所有信息是什么东西。
while(!m_Ado.m_pRecordset->adoEOF)
{
Emp_Id = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Emp_ID"));
m_Ado.m_pRecordset->MoveNext(); //执行添加下一条信息
}
楼主: Badge_ID(非主键)满足=temp值,并返回主键Emp_ID(数据类型为int)
因为Badge_ID(非主键)满足=temp值,成立的记录可能有多条,所以要用循环。
函数想查询表中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;
}
}
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;
}
}
嗯 我在听
笨笨兔 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 字符转换的经验^_^