请教大虾,怎么实现这种功能的封装:CMyRecordset rs;rs("FieldName") = 5;
int nValue = rs("FieldName");就是让CMyRecordset类具有()=和=()的运算方法

解决方案 »

  1.   

    我也是刚学,重载operator()应该就可以了_variant_t& CMyRecordset::operator()(const char *field)
    {
        return Fields->GetItem(field)->Value;
    }
      

  2.   

    ms定义是:ADO 允许使用 Value 属性设置和返回长二进制的数据
    所以给的是_variant_t&,而可以直接进行赋值的。
      

  3.   

    多谢fangxu1999!!
    我想把_variant_t与int,CString等类型的转封装起来,
    调用时自动呼叫相应的重载函数,如下,不知怎么做,请给个思路.rs("Field1") = 5; 
    int nValue = rs("Field1"); 
    rs("Field2") = “string”; 
    CString strValue = rs("Field2"); 
      

  4.   

    这样可就烦一点了,大致过程可以如下:class MyRecordset : public Recordset
    {
    struct MyField
    {
    Field & field; MyField(Field& f):field(f){}

    operator int()
    {
    return (int)field->Value
    }

    int operator=(int nValue)
    {
    field->Value = nValue;
    return nValue;
    }
    }*pField;public:
    MyField& operator()(const char* field)
    {
    if(pField!=NULL)
    {
    delete pField;
    }
    pField = new MyField(Fields->GetItem(field));
    return *pField;
    }

    MyRecordset():pField(NULL){}

    ~MyRecordset()
    {
    if(pField!=NULL)
    {
    delete pField;
    }
    }
    };MyRecordset rs;
    rs("field") = 123;
    int value = rs("field");以上通过内部类封装,主要实现了int的处理,其它的类似吧。可能有点语法错误,适当改改。
      

  5.   

    fangxu1999大佬,非常感谢!!
    思路不错!我加上_variant_t与其他类型的转换就行了