【请教】如何将int转换成_variant_t?

chenjelly 2011-05-12 03:48:44
问题描述:VC +ADO + ACCESS数据库。在编程中,将数据写入ACCESS时,有些是int类型数据。请问如何转换成_variant_t,才能够写入ACCESS。

在网上查找了一下解决方法:
1、用ChangeType
vt.ChangeType(VT_I4);//或者是VT_INT
vt.intVal = record.LQI;
m_pRecordset->PutCollect("LQI",vt);
但是在程序中,操作不成功。

2、int转换成CString类型,再操作
str.Format("%d",record.LQI);
m_pRecordset->PutCollect("LQI",_variant_t(str));
仍然操作不成功。

请大家指导一下,怎样解决这个问题。

谢谢
...全文
411 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjelly 2011-05-18
  • 打赏
  • 举报
回复
呵呵……谢谢大家的帮助。问题解决了。
csu_liying013 2011-05-12
  • 打赏
  • 举报
回复
还有,估计不是你转换问题,你这句有问题:hr = m_pRecordset->AddNew();
不知道你要在那个位置添加记录
chenjelly 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyq5945 的回复:]
http://blog.csdn.net/zyq5945/archive/2010/05/12/5581453.aspx
[/Quote]

多谢……这里写得很强大。

我以前经常用VariantToString
csu_liying013 2011-05-12
  • 打赏
  • 举报
回复
你干脆在ACCESS中把每个字段类型定好,那样你以后操作的时候也方便,你在代码里转来转去,容易出错
King_hhuang 2011-05-12
  • 打赏
  • 举报
回复
应该可以强制转换的啊,看看你的CString对不对

或者试试
CString str = _T("xxx");
_variant_t var = (LPCTSTR)str;
chenjelly 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 devilkillzzz 的回复:]
不会吧,你int转CString没有问题吧,
ReRs->Open(_bstr_t(strConnect),Conn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
第一个参数其实就是要求 _variant_t
所以这样应该是没有问题
你是为什么插入的时候要用到_variant_t,把你的PutCollect贴出来看……
[/Quote]

另外,我若先把ACCESS中表的相应整型类型的字段修改为长整型,再使用上面的方法,添加又是成功的。

chenjelly 2011-05-12
  • 打赏
  • 举报
回复
CString sql;
sql = "SELECT * FROM ParseData";
hr = m_pRecordset->Open(sql.AllocSysString(),
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText); //随时可以使用m_pRecordset->Close()进行关闭
if (FAILED(hr))
{
AfxMessageBox("Open Recordset Failed");
return FALSE;
}
_variant_t vt;
hr = m_pRecordset->AddNew();
m_pRecordset->PutCollect("Duration",_variant_t(record.Duration));

vt.ChangeType(VT_I4); //使用ChangeType进行转换
vt.intVal = record.Channel;
m_pRecordset->PutCollect("Channel",vt);

vt.ChangeType(VT_I4);//使用ChangeType进行转换
vt.intVal = record.Length;
m_pRecordset->PutCollect("Length",vt);
m_pRecordset->PutCollect("Frame_Type",_variant_t(record.Frame_Type));

vt.ChangeType(VT_I4);//使用ChangeType进行转换
vt.intVal = record.Seq_Num;
m_pRecordset->PutCollect("Seq_Num",vt);

m_pRecordset->Update();
m_pRecordset->Close();

帝国队长 2011-05-12
  • 打赏
  • 举报
回复
不会吧,你int转CString没有问题吧,
ReRs->Open(_bstr_t(strConnect),Conn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
第一个参数其实就是要求 _variant_t
所以这样应该是没有问题
你是为什么插入的时候要用到_variant_t,把你的PutCollect贴出来看看
还有就是你看下字符编码是不是一样,这个有可能会出问题
chenjelly 2011-05-12
  • 打赏
  • 举报
回复
谢谢楼上的。

但是还是不行……

帝国队长 2011-05-12
  • 打赏
  • 举报
回复
还有写入access没用过_variant_t,直接插入字符串就行了呀,SQL命令是CString字符串要用_bstr_t(strConnect)转一下
帝国队长 2011-05-12
  • 打赏
  • 举报
回复
.....写入到access就用2就行了
str.Format("%d",record.LQI);
_bstr_t(str)
_bstr_t 和 _variant_t 可以系统转的,这样就行了

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧