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++;
}
}
展开
 我来答
帐号已注销
推荐于2017-11-26 · TA获得超过143个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:170万
展开全部
有两种改法。
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 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
匿名用户
2014-04-25
展开全部
把声明char buf[20]改成TCHAR buf[20]
追问
之前改了试过,sprintf这提示第一个参数要为char*型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式