现有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有招吗?

解决方案 »

  1.   

    追问一个问题:
    建表时指定了默认值,比如时间值为now(),用recordset新添记录时,需用putcollect
    给值吗?用connection的execute方法 ,insert语句中需要写入 (,Xtime) 
    ...Values(,now)吗?
      

  2.   

    自增字段不用putcollect也不能用putcollect
    有默认值和允许空值得字段可以不用putcollect
    //(_bstr_t("insert into test(XName,Xtime) values('zhangsan','2000-1-1 00:00:00')
    ADO,把字段全写上,肯定成功,具体原因等待高手解释
      

  3.   

    同感,我很想知道 自增字段如何用vc+ado 方式添加记录,由于个人实验不成功,暂时用GUID 
    来作为唯一ID。
      

  4.   

    自增字段:
    insert into test(XName,Xtime) values('zhangsan',now)
    把这句放在access的查询里面运行以下,如果可以运行,问题就在你的VC代码中
      

  5.   

    改为:
    "insert into test(XName,Xtime) values('zhangsan',covert(datetime,'2000-1-1 00:00:00'))"
    试试
      

  6.   

    时间前面有高人说了,现在发个VC的ADO数据库查询与增删改操作实例:http://www.maoyeah.com/display.asp?boardid=3&id=43