AddNew后取ID的有关问题, 总是取不到, 总是0, 这是为什么呢
AddNew后取ID的问题, 总是取不到, 总是0, 这是为什么呢?
m_cTitle.Replace(_T( " ' "),_T( " ' ' "));
m_cPic.Replace(_T( " ' "),_T( " ' ' "));
m_cMid.Replace(_T( " ' "),_T( " ' ' "));
m_cTxt.Replace(_T( " ' "),_T( " ' ' "));
txt.Empty();
txt = _T( "select * from source ");
m_pRecordset-> Open(_bstr_t(txt),(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset-> AddNew(); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "imagepath ")))-> Value = _bstr_t(m_cPic); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "midpath ")))-> Value = _bstr_t(m_cMid); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "txtpath ")))-> Value = _bstr_t(m_cTxt); //成功
_variant_t m_nNewIDValue;
m_nNewIDValue = m_pRecordset-> GetCollect(_variant_t(_T( "id "))); //取不到
if(m_nNewIDValue.vt != VT_NULL)
{
m_nNewIDValue.ChangeType(VT_INT); //转不转都是0
txt.Empty();
txt.Format(_T( "insert into mms(mobilephone,type,sourceid,status,title)values( '%s ',1,%d,0, '%s ') "),m_cPhone,m_nNewIDValue.iVal,m_cTitle);
m_pConnection-> Execute((_bstr_t)txt,NULL,adCmdText);
m_pRecordset-> Update(); //无错误就COMMIT
}
m_pRecordset-> Close();
因为我是两个表有相关联的ID的,所以需要先插入一条记录,再拿到新记录的ID,再把这个ID插入另一个表, 我原来用过(网页中)这种方法,可行(但有并发不同步的问题,不过现在是软件所以不用考虑), 但是为什么拿不到ID呢? 请大家帮我分析一下,谢谢,这段代码执行是没有问题的, 两个表都插入了记录了,只是ID总是0.
------解决方案--------------------
AddNew后Commit,再Requery
------解决方案--------------------
(LPCTSTR)(_bstr_t)m_pRecordSet-> GetCollect( "Content ")
我之前都是这样用的..然后获得一个CString ,
string 就string ,再atoi() 转换int 就好了
(呵呵 数据库做的不多,就弄过一个access的缩略词小程序).
你手动为数据库加上记录看能不能获得ID, 看能不能缩小错误产生原因的范围.
不怎么熟悉, 帮你UP..
------解决方案--------------------
先Update再取数据。
m_cTitle.Replace(_T( " ' "),_T( " ' ' "));
m_cPic.Replace(_T( " ' "),_T( " ' ' "));
m_cMid.Replace(_T( " ' "),_T( " ' ' "));
m_cTxt.Replace(_T( " ' "),_T( " ' ' "));
txt.Empty();
txt = _T( "select * from source ");
m_pRecordset-> Open(_bstr_t(txt),(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset-> AddNew(); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "imagepath ")))-> Value = _bstr_t(m_cPic); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "midpath ")))-> Value = _bstr_t(m_cMid); //成功
m_pRecordset-> Fields-> GetItem(_variant_t(_T( "txtpath ")))-> Value = _bstr_t(m_cTxt); //成功
_variant_t m_nNewIDValue;
m_nNewIDValue = m_pRecordset-> GetCollect(_variant_t(_T( "id "))); //取不到
if(m_nNewIDValue.vt != VT_NULL)
{
m_nNewIDValue.ChangeType(VT_INT); //转不转都是0
txt.Empty();
txt.Format(_T( "insert into mms(mobilephone,type,sourceid,status,title)values( '%s ',1,%d,0, '%s ') "),m_cPhone,m_nNewIDValue.iVal,m_cTitle);
m_pConnection-> Execute((_bstr_t)txt,NULL,adCmdText);
m_pRecordset-> Update(); //无错误就COMMIT
}
m_pRecordset-> Close();
因为我是两个表有相关联的ID的,所以需要先插入一条记录,再拿到新记录的ID,再把这个ID插入另一个表, 我原来用过(网页中)这种方法,可行(但有并发不同步的问题,不过现在是软件所以不用考虑), 但是为什么拿不到ID呢? 请大家帮我分析一下,谢谢,这段代码执行是没有问题的, 两个表都插入了记录了,只是ID总是0.
------解决方案--------------------
AddNew后Commit,再Requery
------解决方案--------------------
(LPCTSTR)(_bstr_t)m_pRecordSet-> GetCollect( "Content ")
我之前都是这样用的..然后获得一个CString ,
string 就string ,再atoi() 转换int 就好了
(呵呵 数据库做的不多,就弄过一个access的缩略词小程序).
你手动为数据库加上记录看能不能获得ID, 看能不能缩小错误产生原因的范围.
不怎么熟悉, 帮你UP..
------解决方案--------------------
先Update再取数据。