资源描述:
《ado数据库编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、10、邦定数据 定义一个绑定类,将其成员变量绑定到一个指定的记录集,以方便于访问记录集的字段值。 (1).从cadorecordbinding派生出一个类:classccustomrs:publiccadorecordbinding{begin_ado_binding(ccustomrs)ado_variable_length_entry2(3,advarchar,m_szau_fname,sizeof(m_szau_fname),lau_fnamestatus,false)ado_variable_length_entry2(2,advarchar,m_szau_lname,siz
2、eof(m_szau_lname),lau_lnamestatus,false)ado_variable_length_entry2(4,advarchar,m_szphone,sizeof(m_szphone),lphonestatus,true)end_ado_binding()public:charm_szau_fname[22];ulonglau_fnamestatus;charm_szau_lname[42];ulonglau_lnamestatus;charm_szphone[14];ulonglphonestatus;}; 其中将要绑定的字段和变量名用begin_ado_
3、binding宏关联起来。每个字段对应于两个变量,一个存放字段的值,另一个存放字段的状态。字段用从1开始的序号表示,如1,2,3等等。 特别要注意的是:如果要绑定的字段是字符串类型,则对应的字符数组的元素个数一定要比字段长度大2(比如m_szau_fname[22],其绑定的字段au_fname的长度实际是20),不这样绑定就会失败。我分析多出的2可能是为了存放字符串结尾的空字符null和bstr字符串开头的一个字(表示bstr的长度)。这个问题对于初学者来说可能是个意想不到的问题。 cadorecordbinding类的定义在icrsint.h文件里,内容是:classcadore
4、cordbinding{public:stdmethod_(constado_binding_entry*,getadobindingentries)(void)pure;};begin_ado_binding宏的定义也在icrsint.h文件里,内容是:#definebegin_ado_binding(cls)public:\typedefclsadorowclass;\constado_binding_entry*stdmethodcalltypegetadobindingentries(){\staticconstado_binding_entryrgadobindingentri
5、es[]={ado_variable_length_entry2宏的定义也在icrsint.h文件里:#defineado_variable_length_entry2(ordinal,datatype,buffer,size,status,modify)\{ordinal,\datatype,\0,\0,\size,\offsetof(adorowclass,buffer),\offsetof(adorowclass,status),\0,\classoffset(cadorecordbinding,adorowclass),\modify},#defineend_ado_bindin
6、g宏的定义也在icrsint.h文件里:#defineend_ado_binding(){0,adempty,0,0,0,0,0,0,0,false}};\returnrgadobindingentries;} (2).绑定_recordsetptrrs1;iadorecordbinding*picrs=null;ccustomrsrs;......rs1->queryinterface(__uuidof(iadorecordbinding),(lpvoid*)&picrs));picrs->bindtorecordset(&rs); 派生出的类必须通过iadorecordbind
7、ing接口才能绑定,调用他的bindtorecordset方法就行了。 (3).rs中的变量即是当前记录字段的值//setsortandfiltercondition://step4:manipulatethedatars1->fields->getitem("au_lname")->properties->getitem("optimize")->value=true;rs1->sort="au_lnameasc";rs1->f