小弟我用vc的ado对数据库进行操作,在记录集中对记录的选择和删除都可以,但是不能往数据库里插入数据
sql_="insert into teller (tel_id,telnam,telgrp,telpwd)     values   ('"+m_sTelNo+"','"+m_sTelNm+"','"+m_sTelTyp+"','000000')";
     m_pRs->Open(sql_,   m_pLConn.GetInterfacePtr(),adOpenDynamic,   adLockPessimistic,adCmdText);
跟踪调试发现
inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum newLockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
执行到此步时出错,_hr的值非零。我得connection的打开方式是adModeUnknown.我把打开方式改成adModeReadWrite,系统却提示“变量或者类型不对,或者不在可以接受的范围之内,要不就是与其他数据冲突”。请高手指教,我那里错了!!!

解决方案 »

  1.   

    你的m_sTelNo的类型是什么?在插入的时候要把VC数据类型转换为com数据类型
    比如当m_StemNo是整形的时候有_variant_t((Long)(m_sTelNo))
    同时注意如果插入的不是字符型的话要把''去掉
      

  2.   

    不是数据类型的问题,而是连接属性的问题。我已经改好了,但还不太明白
    以前是这样:
    strConnect = "DRIVER={Oracle ODBC Driver};DBQ=pg; \
                             SERVER=pg;UID=pg;PWD=root3221";
    Conn->Open(( _bstr_t )strConnect,  "", "",adModeUnknown);
    无法更新和新增记录
    后来我有改成:
    strConnect= "Provider=OraOLEDB.Oracle.1;Password=root3221; \
    Persist Security Info=True;User ID=pg;Data Source=pg";
    Conn->Open(( _bstr_t )strConnect,  "", "",adModeUnknown);
    就可以更新和新增记录了,请教高手!!!!