ado之recordset添加记录时如何处理自增字段和时间字段
现有access表test(XID,XName,Xtime),XID用的自增字段
想通过ado - recordset来增加记录
m_pCommand-> ActiveConnection = m_pConnection ;
m_pCommand-> CommandText = _bstr_t( "select * from test ");
m_pRecordset-> Open ((IDispatch *) m_pCommand, vtMissing, adOpenDynamic,adLockOptimistic,adCmdText );
m_pRecordset-> AddNew();
m_pRecordset-> put_Collect(_variant_t( "XID "),???);
m_pRecordset-> put_Collect(_variant_t( "XName "),_variant_t( "张三 "));
COleDateTime date=COleDateTime::GetCurrentTime();
CString strTime =date.Format(_T( "%Y-%m-%d %H:%M:%S "));m_pRecordset-> put_Collect(_variant_t( "Xtime "),_variant_t(strTime));
...
m_pRecordset-> UpdateBatch(adAffectAll);
问题有:
1.自增字段XID是否需要putcollect赋值,如果不这样用当如何处理?我做过如下实验
m_pConnection-> Execute(_bstr_t( "insert into test(XName,Xtime) values( 'zhangsan ', '2000-1-1 00:00:00 ') "));不能取得成功,不知道是否我做错了,我意思是没有给XID赋值,才导致出错的。XID换成非自增字段,程序赋值是可以编译通过的。
2.时间字段Xtime使用putcollect的确可以成功,但是在更新后显示时,用m_pRecordset-> Fields-> Item[2L]-> Value取时间值时取到空值而出错;但是如果用m_pRecordset-> Fields-> Item[2L]-> PutValue(_variant_t(strTime));来给时间字段赋值,则显示时可以成功取到值,为什么?
3.如果是oracle数据库,采用序列seqence s_a 来给XID赋值,用putcollect有招吗?
[解决办法]
自增字段不用putcollect也不能用putcollect
有默认值和允许空值得字段可以不用putcollect
//(_bstr_t( "insert into test(XName,Xtime) values( 'zhangsan ', '2000-1-1 00:00:00 ')
ADO,把字段全写上,肯定成功,具体原因等待高手解释
[解决办法]
自增字段:
insert into test(XName,Xtime) values( 'zhangsan ',now)
把这句放在access的查询里面运行以下,如果可以运行,问题就在你的VC代码中