如题,首先是用ADO的方式向Access插入数据,如下代码
m_pRecordset->AddNew();   
m_pRecordset->PutCollect("Name", _variant_t(m_Name));
m_pRecordset->PutCollect("Age", _variant_t(m_Age));
m_pRecordset->Update();
是成功的;
但是改为向SQL插入数据 用上面同样代码却报错了,不明白是为什么 。

解决方案 »

  1.   

    用SQL语句,insert into table (field) values (value)
      

  2.   

    m_Name m_Age都是编辑框的变量 CString类型
    而数据库中的Name是char
    Age是int该怎么匹配呢
    对于参数类型的匹配及转换 有些困惑 呵呵
      

  3.   

    用atoi函数
    int atoi( const char *string );
    可将CString转化成int
      

  4.   

    嗯 写SQL 我没试过 但理论是上肯定是可以的 
    我的困惑是为什么上面的代码会出错呢?
    对于数据库Access 和sql的操作代码应该是不是通用的呢???
    如果是 那就应该是类型匹配的问题,可是又错在哪里呢??
      

  5.   

    对于数据库Access 和sql的操作代码是可以通用的,
    不知你说的错误具体信息是什么,提示什么样的错误呢
      

  6.   

    刚试过 atoi 根本编译不过去 atol倒是可以通过编译 但运行仍然有错误另外我调试运行时 走过m_pRecordset->AddNew();  就有错误了
    Unhandled exception in ADO_SQL.exe(KERNEL32.DLL);0xE06D7363:Microsoft C++ Exception.困惑
      

  7.   

    能不能把关于m_pRecordset的代码贴出来看看
      

  8.   

    你有邮箱么 我可以把代码发给你 因为用到m_pRecordset的地方很多 
      

  9.   

    问题是:m_pRecordset用过之后没有及时释放。
    每次使用m_pRecordset之后都要释放它
    可以这样添加:
    if(m_pRecordset!=NULL)
    {
    m_pRecordset->Close();
    m_pRecordset.Release();
    }
    当再次使用m_pRecordset它时,还要重新打开记录集,如:
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    m_pRecordset->Open("SELECT * FROM d1 order by Age",            theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
    然后才可以使用m_pRecordset
    我在你程序里的void CADO_SQLDlg::OnReadaccess()和void CADO_SQLDlg::OnWriteaccess() 
    添加了一部分,其他的你自己添加吧已发到你邮箱里
      

  10.   

    修改一下数据库的Open参数试试。