我在工程中CADORecordBinding绑定我的字段
已经绑定成功,因为我已经能操纵显示记录了!
但是,如何添加记录一直不成功!
请大家帮忙!
class CCustom : public CADORecordBinding  
{
BEGIN_ADO_BINDING(CCustom)
ADO_VARIABLE_LENGTH_ENTRY4(1, adVarChar, m_bd_id, sizeof(m_bd_id),true)
ADO_VARIABLE_LENGTH_ENTRY4(2, adVarChar, m_bd_name, sizeof(m_bd_name),true)
ADO_NUMERIC_ENTRY2(3,adInteger,m_bd_yuwen,0,0,true)
ADO_NUMERIC_ENTRY2(4,adInteger,m_bd_shuxue,0,0,true)
END_ADO_BINDING()
public:
CHAR m_bd_id[50];
CHAR m_bd_name[50];
int m_bd_yuwen;
int m_bd_shuxue;};CADODatabase db;
CADORecordset rs;
db.SetConnectionString("Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=xs.mdb");
db.Open("","","");
rs.Open(db.GetActiveConnection(),"SELECT *FROM xs");
CCustom cs;
rs.RecordBinding(cs);
请帮忙!
或者哪位高手有添加的例子也可拿来一看哈 !
谢谢 !

解决方案 »

  1.   

    class CTenementSet : public CADORecordBinding  
    {
    BEGIN_ADO_BINDING(CTenementSet)
    ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_szName, sizeof(m_szName), m_lsts_Name, TRUE)
    ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szGender, sizeof(m_szGender), m_lsts_gender, TRUE)
    ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szIDCard, sizeof(m_szIDCard), m_lsts_IDCard, TRUE)
    END_ADO_BINDING()public:
    //重置绑定标志
    void ResetBindingStatus(){ m_lsts_Name = 0;
    m_lsts_gender = 0;
    m_lsts_IDCard = 0;
    } inline LPCSTR GetName(){
    return m_lsts_Name == adFldOK ? m_szName : _T("");
    }
    inline LPCSTR GetGender(){
    return m_lsts_gender == adFldOK ? m_szGender : _T("");
    }
    inline LPCSTR GetIDCard(){
    return m_lsts_IDCard == adFldOK ? m_szIDCard : _T("");
             }
    TCHAR m_szName[9];
    TCHAR m_szGender[3];
    TCHAR m_szIDCard[19];
    };
      

  2.   

    想起来了,偶以前做的时候也出错,但是是当数据表中为空的时候出错的……如果有数据,只要有一个……就不会出错。
    所以我用了个笨法处理的……各位大虾不要笑!!!保存功能如下:
    CWaitCursor cursor;
    extern _ConnectionPtr pGConnection;
    _RecordsetPtr pRecordset = NULL;
    IADORecordBinding *pTenementSet = NULL; CString strSQL = _T("select * from H_TENEMENT_Info");
    if(m_bEdit)
    strSQL += _T(" where T_CODE = '")
    + m_strCode + _T("'");
    try{
    TESTHR(pRecordset.CreateInstance("ADODB.Recordset"));
    pRecordset->Open((_bstr_t)strSQL,
    _variant_t((IDispatch *) pGConnection, true),
    adOpenKeyset,
    adLockOptimistic,
    adCmdText);
    TESTHR(pRecordset->QueryInterface(__uuidof(IADORecordBinding),
    (LPVOID*)&pTenementSet));
    TESTHR(pTenementSet->BindToRecordset(&m_TenementSet));
    m_TenementSet.ResetBindingStatus();

    //填充绑定缓冲
                      // 将数据从控件中填入绑定记录集,用_strcpy(),代码略…… if(m_bEdit){
    TESTHR(pTenementSet->Update(&m_TenementSet));
    }
    else{
    TESTHR(pTenementSet->AddNew(&m_TenementSet));
    }

    pTenementSet->Release();
    pRecordset->Close();
    }
    catch (_com_error &e) {
    DisplayError(e.Description);
    if(e.Error() == 0x800a0bcd){
    AddNULL();
    }
    }AddNULL();的内容就简单了,就是执行个insert空记录的sql,哈哈……