vc++中编译正确,VS2010中出现C2664错误
voidCTrainingStudentManage::UpdateData(){m_listctrlTrainingStudent.DeleteAllItems();i...
void CTrainingStudentManage::UpdateData()
{
m_listctrlTrainingStudent.DeleteAllItems();
if (!m_database.IsOpen())
{
m_database.Open(_T("training"));
}
CTrainingStudentSet m_recordset(&m_database);
CString csSQL = _T("");
csSQL.Format(_T("select * from TRAINING_STUDENT"));
if (!m_recordset.IsOpen())
{
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE, csSQL);
}
CDBVariant varValue;
if (m_recordset.GetRecordCount() != 0)
{
m_recordset.MoveFirst();//移到第一条记录
}
char buf[20];
int i = 0;
while (!m_recordset.IsEOF())//没到最后一条记录
{
int nTmp = 0;
m_recordset.GetFieldValue(nTmp, varValue);//学员号
sprintf(buf,"%d", varValue.m_iVal);
m_listctrlTrainingStudent.InsertItem(i,buf);
/* error C2664: “int CListCtrl::InsertItem(UINT,int,LPCTSTR,UINT,UINT,int,LPARAM)”: 无法将参数 2 从“char [20]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
*/
m_recordset.GetFieldValue(1, varValue);//姓名
m_listctrlTrainingStudent.SetItemText(i, 1, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(2, varValue);//性别
m_listctrlTrainingStudent.SetItemText(i, 2, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(3, varValue);//年龄
sprintf(buf, "%d", varValue.m_iVal);
m_listctrlTrainingStudent.SetItemText(i, 3,buf);//同第一个错误
m_recordset.GetFieldValue(4, varValue);//民族
m_listctrlTrainingStudent.SetItemText(i, 4, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(9, varValue);//开始参加工作时间
sprintf(buf, "%d-%d-%d", varValue.m_iVal);
m_listctrlTrainingStudent.SetItemText(i, 9, buf);//同样是上面的错误
m_recordset.MoveNext();
i++;
}
} 展开
{
m_listctrlTrainingStudent.DeleteAllItems();
if (!m_database.IsOpen())
{
m_database.Open(_T("training"));
}
CTrainingStudentSet m_recordset(&m_database);
CString csSQL = _T("");
csSQL.Format(_T("select * from TRAINING_STUDENT"));
if (!m_recordset.IsOpen())
{
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE, csSQL);
}
CDBVariant varValue;
if (m_recordset.GetRecordCount() != 0)
{
m_recordset.MoveFirst();//移到第一条记录
}
char buf[20];
int i = 0;
while (!m_recordset.IsEOF())//没到最后一条记录
{
int nTmp = 0;
m_recordset.GetFieldValue(nTmp, varValue);//学员号
sprintf(buf,"%d", varValue.m_iVal);
m_listctrlTrainingStudent.InsertItem(i,buf);
/* error C2664: “int CListCtrl::InsertItem(UINT,int,LPCTSTR,UINT,UINT,int,LPARAM)”: 无法将参数 2 从“char [20]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
*/
m_recordset.GetFieldValue(1, varValue);//姓名
m_listctrlTrainingStudent.SetItemText(i, 1, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(2, varValue);//性别
m_listctrlTrainingStudent.SetItemText(i, 2, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(3, varValue);//年龄
sprintf(buf, "%d", varValue.m_iVal);
m_listctrlTrainingStudent.SetItemText(i, 3,buf);//同第一个错误
m_recordset.GetFieldValue(4, varValue);//民族
m_listctrlTrainingStudent.SetItemText(i, 4, varValue.m_pstring->GetBuffer(1));
m_recordset.GetFieldValue(9, varValue);//开始参加工作时间
sprintf(buf, "%d-%d-%d", varValue.m_iVal);
m_listctrlTrainingStudent.SetItemText(i, 9, buf);//同样是上面的错误
m_recordset.MoveNext();
i++;
}
} 展开
2个回答
展开全部
有两种改法。
1
把工程属性中的“use unicode charset”改成"use multibyte charset“。
2
把char改成TCHAR,sprintf改成_stprintf,字符串都要加_T,例如_stprintf(buf, _T("%d-%d-%d"), varValue.m_iVal);
推荐改法2。
至于为什么,请参照http://zhidao.baidu.com/question/175600119763646324.html?oldq=1。
1
把工程属性中的“use unicode charset”改成"use multibyte charset“。
2
把char改成TCHAR,sprintf改成_stprintf,字符串都要加_T,例如_stprintf(buf, _T("%d-%d-%d"), varValue.m_iVal);
推荐改法2。
至于为什么,请参照http://zhidao.baidu.com/question/175600119763646324.html?oldq=1。
浙江启扬智能科技有限公司
2023-06-12 广告
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
2014-04-25
展开全部
把声明char buf[20]改成TCHAR buf[20]
追问
之前改了试过,sprintf这提示第一个参数要为char*型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询