使用ADO封装类的数据库程序开发实例[第二版] (下)
2006-07-23 11:16:11 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇川绾剧晫鈧箍鍎遍幏鎴︾叕椤掑倵鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝懐顦ч柣蹇撶箲閻楁鈧矮绮欏铏规嫚閺屻儱寮板┑鐐板尃閸曨厾褰炬繝鐢靛Т娴硷綁鏁愭径妯绘櫓闂佸憡鎸嗛崪鍐簥闂傚倷鑳剁划顖炲礉閿曞倸绀堟繛鍡樻尭缁€澶愭煏閸繃宸濈痪鍓ф櫕閳ь剙绠嶉崕閬嶅箯閹达妇鍙曟い鎺戝€甸崑鎾斥枔閸喗鐏堝銈庡幘閸忔﹢鐛崘顔碱潊闁靛牆鎳愰ˇ褔鏌h箛鎾剁闁绘顨堥埀顒佺煯缁瑥顫忛搹瑙勫珰闁哄被鍎卞鏉库攽閻愭澘灏冮柛鏇ㄥ幘瑜扮偓绻濋悽闈浶㈠ù纭风秮閺佹劖寰勫Ο缁樻珦闂備礁鎲¢幐鍡涘椽閸愵亜绨ラ梻鍌氬€峰ù鍥敋閺嶎厼鍨傞幖娣妼缁€鍐煥濠靛棙顥滈柣锕備憾濮婂宕掑▎鎺戝帯濡炪們鍨归敃銈夊煝瀹ュ鍗抽柕蹇曞Х椤斿姊洪幖鐐插姶闁告挻鐟╅幃姗€骞庨懞銉у幐闂佸憡鍔戦崝搴㈡櫠閺囩姷纾奸柍褜鍓熷畷姗€鍩炴径鍝ョ泿闂傚⿴鍋勫ú銈吤归悜鍓垮洭鏁冮埀顒勬箒濠电姴锕ら悧蹇涙偩濞差亝鐓涢悘鐐额嚙婵″ジ鏌嶇憴鍕伌鐎规洖宕埢搴ょ疀閹惧妲楃紓鍌氬€搁崐鐑芥⒔瀹ュ绀夐幖杈剧到閸ㄦ繃銇勯弽顐粶濡楀懘姊洪崨濠冨闁搞劍澹嗙划濠氬箮閼恒儱鈧敻鏌ㄥ┑鍡欏嚬缂併劏妫勯湁闁绘ǹ宕甸悾鐑樻叏婵犲啯銇濇俊顐㈠暙閳藉鈻庨幇顓炩偓鐑芥⒑鐠囨彃顒㈤柣顓у櫍瀹曪繝骞庨懞銉ヤ粧濡炪倖娲嶉崑鎾垛偓瑙勬礀閻栧ジ銆佸Δ浣哥窞閻庯綆鍋呴悵顐⑩攽閻樻剚鍟忛柛锝庡灣瀵板﹪宕滆閸嬫挾绮☉妯绘悙缂佺姵鐓¢弻娑㈠Ψ椤旂厧顫╅梺钘夊暟閸犳牠寮婚敐澶婃闁圭ǹ瀛╅崰鎰版⒑閼姐倕鏋庣紓宥咃躬瀵鈽夐埗鈹惧亾閿曞倸绠f繝闈涙川娴滎亝淇婇悙顏勨偓銈夊礈濞嗘挻鍋嬮柛鈩冪▓閳ь剚妫冨畷姗€顢欓崲澹洤绠圭紒顔煎帨閸嬫捇鎳犻鈧崵顒傜磽閸屾艾鈧娆㈤敓鐘茬獥婵°倕鎳庣粻浼存煙闂傚鍔嶉柛瀣ф櫊閺岋綁骞嬮敐鍡╂缂佺虎鍘搁崑鎾绘⒒娴h櫣甯涢柛鏃€娲滅划鏃堟濞磋櫕鐩畷姗€顢欓崗鍏夹氶梻渚€鈧偛鑻晶顖炴煏閸パ冾伃妤犵偞甯¢獮瀣攽閹邦亞纾婚梺璇叉唉椤骞愭搴g焼濞撴埃鍋撻柛鈺冨仱楠炲鏁傞挊澶夋睏闂備礁婀辩划顖滄暜閳哄倸顕遍柍褜鍓涚槐鎾存媴閻熸澘濮㈤悷婊勫閸嬬喖宕氶幒鎴旀瀻闁规儳鐤囬幗鏇炩攽閻愭潙鐏﹂柣顓у枛閳讳粙顢旈崼鐔哄幍闁荤喐鐟ョ€氼剚鎱ㄩ崶銊d簻闁靛濡囩粻鐐存叏婵犲啯銇濋柡灞芥嚇閹瑩鎳犵捄渚純濠电姭鎷冮崒姘ギ闂佸搫鐬奸崰鏍箹瑜版帩鏁冮柨婵嗘噽閿涙捇姊绘担鐟邦嚋缂佽瀚板畷鎴濃槈閵忕姷鍘撮梺鐟邦嚟婵參宕戦幘缁樻櫜閹煎瓨锚娴滅偓銇勯幘瀵糕姇婵炲懎锕弻锛勪沪閻e睗锝嗙箾绾板彉閭鐐茬箳娴狅箓鎸婃径濠呭帿闂傚倸鍊烽悞锕傛儑瑜版帒纾归柡鍥ュ灩缁犵娀鏌熼柇锕€鏋熸い顐f礋閺岀喖骞嗚閹界姴鈹戦娑欏唉闁哄本鐩獮姗€寮堕幋鐘点偡闂備礁鎲¢幐绋跨暦椤掑嫧鈧棃宕橀鍢壯囨煕閳╁喚娈樺ù鐘虫倐濮婃椽鎳¢妶鍛瘣闂佸搫鎳忛惄顖炲箖妤e啯鍊婚柦妯猴級閵娧勫枑濠㈣埖鍔曠壕濠氭煙閸撗呭笡闁哄懏鐓¢獮鏍垝閻熸澘鈷夐梺璇茬箰缁夌懓顫忛搹鍦<婵☆垵顕ч棄宥呪攽閻愭彃绾ч柨鏇樺灪娣囧﹪鎮界粙璺槹濡炪倖鐗楀銊╂偪閳ь剟姊婚崒姘偓鎼佹偋婵犲嫮鐭欓柟閭﹀枦婵娊鏌ゅù瀣珖缁炬崘妫勯湁闁挎繂鐗婇ˉ澶愭煟閹炬潙濮堥柟渚垮妼铻g紒瀣仢椤鈹戦垾鍐茬骇闁告梹鐟╅悰顔嘉熼崗鐓庣彴闂佽偐鈷堥崜锕€危娴煎瓨鈷掑ù锝嚽归弳閬嶆煙绾板崬浜扮€规洘鍔栫换婵喰掔粙鎸庡枠鐎殿喛鍩栭幆鏃堝箻鐎涙ɑ婢戝┑锛勫亼閸婃牕顫忔繝姘ラ悗锝庝憾閸熷懘鏌曟径娑滅濞存粍绮嶉妵鍕箻鐠鸿桨绮跺┑鈩冨絻椤兘寮婚敐澶嬫櫜闁搞儜鍐ㄧ婵°倗濮烽崑鐐垫暜閿熺姷宓侀悗锝庡枛缁秹鏌嶈閸撶喖骞冨Δ浣虹瘈婵﹩鍘搁幏娲煟閻斿摜鎳冮悗姘煎弮瀹曟洖螖閸涱喚鍘卞┑鈽嗗灥閵嗏偓闁稿鎹囬幃銏ゅ箵閹烘垹闃€婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘垿濡甸崟顖氱闁告鍋熸禒鑲╃磼閻愵剙鍔ゆい顓犲厴瀵鎮㈤悡搴n槶閻熸粌绻掗弫顔尖槈閵忥紕鍘撻梻浣哥仢椤戝懘鎮橀敃鍌涚厪闁搞儜鍐句純濡ょ姷鍋炵敮鈥崇暦閸楃儐娓婚柟顖嗗本顥$紓鍌氬€搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾閽樻繈姊洪鈧粔鎾几娴g硶鏀介柣妯挎珪閻ㄦ垹鈧鎸风欢姘跺蓟濞戙垹鐒洪柛鎰典簴婵洭姊虹粙鍖″姛闁稿繑锕㈠璇测槈濡攱鏂€闂佺硶鍓濋〃蹇斿閳ь剚淇婇悙顏勨偓鏍ь潖瑜版帒绀夐柡鍥ュ灩閻撴﹢鏌熸潏楣冩闁稿﹤顭烽弻娑㈠Ψ閵忊剝鐝栭柡宥忕節濮婄粯鎷呴崨濠傛殘闂佸湱枪椤兘骞冮悜鑺ユ櫆闁伙絽澶囬弨铏節閻㈤潧孝婵炶绠撳畷鐢稿礃椤旂晫鍘撻梺鍛婄箓鐎氼剟寮抽悢鍏肩叆婵炴垶鐟ч惌鎺撴叏婵犲洨绱伴柕鍥ㄥ姍楠炴帡骞嬪⿰鍐╃€抽梻鍌欑閹诧繝鎮烽妷锔绘闁归棿绀侀悡婵嬫煙閻愵剚鐏遍柛顐邯閺屾盯顢曢妶鍛亖闂佸憡蓱閹倿寮婚敐鍫㈢杸闁哄洨鍋橀幋椋庣磼缂併垹骞栭柣鏍帶閻g兘骞嬮敃鈧粻濠氭偣閸ヮ亜鐨洪柣銈傚亾婵犵數鍋犻幓顏嗗緤娴犲绠熼柨鐔哄Т绾捐銇勯弽顐沪闁抽攱鍨归惀顏堫敇閻愭潙娅f繛瀛樼矊缂嶅﹪骞冪捄琛℃闁哄诞鍐ㄐ曢梻浣虹《閺備線宕戦幘鎰佹富闁靛牆妫楃粭鎺楁煕閻曚礁浜伴柟顖氬暙鐓ゆい蹇撴噽閸樺憡绻涙潏鍓у埌婵犫偓鏉堛劍娅犳い蹇撶墛閻撳啴鎮峰▎蹇擃仼闁诲繑鎸抽弻鐔碱敊閻e本鍣伴悗娈垮枛閻栧ジ鐛€n喗鍋愰弶鍫厛閺佸洭姊婚崒姘偓椋庣矆娴i潻鑰块弶鍫涘妿娴犳岸姊绘担渚敯濠殿喓鍊楅崚鎺撴償閵娿儳顦梺鍦劋椤ㄥ懐鐚惧澶嬬厱妞ゆ劑鍊曢弸搴∶归悩鐑橆仩缂佽鲸鎸婚幏鍛村礈閹绘帒澹嶆俊鐐€栧ú妯荤箾婵犲洤鏋侀柛鎰靛枛绾惧吋绻涢幋鐐跺妤犵偛鐗撳缁樻媴閸涘﹥鍎撳┑鐐茬湴閸ㄨ棄鐣峰┑鍡欐殕闁告洦鍓欓埀顒€鐖奸弻锝呂熼懖鈺佺闂佺粯鎸诲ú鐔煎蓟閻斿吋鍤嬫い鎺嗗亾濠碉紕鍘ч湁婵犲﹤瀚崝銈夋煃鐟欏嫬鐏撮柡浣哥Ч瀹曠喖顢曢埄鍐╃窔闂傚倷鑳舵灙闁挎洏鍎甸幃褔鎮╅懠顒佹濠电娀娼ч鍡涘疾濠靛鐓冪憸婊堝礈閻旂厧鐏抽柨鏇炲€搁柨銈嗕繆閵堝倸浜鹃梺缁樺笒閻忔岸濡甸崟顖氱鐎广儱鐗嗛崢锛勭磽娴e搫孝濠⒀傜矙閸┾偓妞ゆ巻鍋撻柛妯荤矒瀹曟垿骞橀弬銉︽杸闂佺粯枪娴滎剛绮i弮鍫熺厱閻庯綆鍋掑▓鏃堟煃鐟欏嫬鐏存い銏$懅濞戠敻鎮滈悾灞藉冀濠电姷鏁搁崑娑㈠箯閹寸姴绶ら柛顭戝暎閿濆绠涢柡澶庢硶椤斿﹪姊洪悷鏉挎毐缁剧虎鍙冨畷浼村箻鐠囪尙顔嗛梺缁樶缚缁垶宕甸幋锔界厾缂佸娉曟禒娑欐叏閿濆棗濮嶆慨濠傤煼瀹曟帒顫濋钘変壕闁绘垼濮ら崵鍕煠閸濄儲鏆╁ù鐘崇缁绘繈鎮介棃娑楃捕濡炪倖娲﹂崣鍐ㄧ暦濡も偓铻e〒姘煎灠濞堛劌顪冮妶鍡楀闁稿﹥鐗滈埀顒佺濮樸劑鍩€椤掑倹鍤€濠㈢懓锕畷浼村冀瑜夐弸鏃堟煏婵犲繐顩紒鈾€鍋撻梻浣圭湽閸ㄨ棄岣胯閻楀海绱撴担鍝勪壕婵犮垺岣跨划鏃堟偡闁箑娈ㄩ梺鍝勮閸庤京绮婚悽鍛婄厵闁绘垶岣跨粻姗€鏌涢悙鍨毈闁哄矉缍侀幃鈺呮倻濮楀棔鍝楅梺璇茬箰缁诲牓宕濆畝鍕垫晩闊洦绋戝敮閻熸粌顦靛畷鎴﹀箻閼搁潧鏋傞梺鍛婃处閸撴瑧鍠婂鍛斀闁宠棄妫楁禍婵堢磼鐠囨彃鈧潡鏁愰悙鍓佺杸婵炴垶鐟﹂崕顏堟⒑闂堚晛鐦滈柛姗€绠栭弫宥呪堪閸愶絾鏂€闂佸疇妫勫Λ妤呮倶閻樼粯鐓欑痪鏉垮船娴滀即鏌ㄥ┑鍫濅粶妞ゆ挸銈稿畷鍫曞煛閸愯法闂繝鐢靛仩閹活亞绱炴笟鈧棢闁规崘顕х粈澶屸偓骞垮劚椤︿即鎮″▎鎴犵<閻庯綆浜炴禒銏ゆ煛閸℃稐鎲鹃柡宀嬬秮閺佹劙宕惰楠炲螖閻橀潧浠滄い鎴濐樀瀵偊宕橀鑲╁姦濡炪倖甯掗崐缁樼▔瀹ュ應鏀介柣妯虹-椤f煡鏌涚€e墎绉柡灞剧洴婵$兘骞嬪┑鍡樻婵°倗濮村ú顓㈠箖濡ゅ啯鍠嗛柛鏇ㄥ墮绾板秶绱撴担鍓叉Ч闁瑰憡濞婇崹楣冨籍閸繄顦ㄥ銈嗘煥濡插牐顦归柡灞剧洴閸╁嫰宕楅悪鈧禍顏勎涢崟顐悑闁搞儮鏅濋敍婵囩箾鏉堝墽鍒板鐟帮躬瀹曟洟骞囬悧鍫㈠幈闂侀潧枪閸庨亶銆傚畷鍥╃<妞ゆ梻鈷堥崕蹇斻亜閹惧啿鎮戠€垫澘瀚埀顒婄秵娴滄牠宕戦幘缁樼叆閻庯絻鍔嬬花濠氭⒑閻熺増鎯堢紒澶婄埣钘濋柨鏃堟暜閸嬫挸鈻撻崹顔界亪闂佽绻戠换鍫ュ春閻愬搫绠i柨鏇楀亾闁绘搫绻濋弻娑㈠焺閸愮偓鐣兼繛瀵稿閸ㄨ泛顫忓ú顏勫窛濠电姴娴烽崝鍫曟⒑閸涘﹥澶勯柛娆忛鐓ら柛娑橈梗缁诲棝鏌曢崼婵堢闁告帊鍗抽弻娑㈡偆娴e摜浠搁悗瑙勬礃閸旀瑥鐣疯ぐ鎺濇晝闁挎繂鎳庢导搴㈢節绾版ɑ顫婇柛銊﹀▕瀹曘垼顦崇紒鍌氱У閵堬綁宕橀埡浣插亾閸偅鍙忔俊顖滃帶娴滈箖鎮楀鐐

CAdoRecordSet class:
CAdoRecordSet:
CAdoRecordSet::CAdoRecordSet()
CAdoRecordSet::CAdoRecordSet(CAdoConnection *pConnection)
void CAdoRecordSet::SetAdoConnection(CAdoConnection *pConnection)
创建Connection对象.
Params:
[pConnection]: 连接对象指针.
Open 方法:
BOOL CAdoRecordSet::Open(LPCTSTR strSQL, long lOption, CursorTypeEnum CursorType, LockTypeEnum LockType)
Params:
[strSQL]: SQL语句, 表名, 存储过程或持久 Recordset 文件名.
[lOption]: 可选. 长整型值, 用于指示 strSQL 参数的类型. 可为下列常量之一.
[常量] | [说明] |
adCmdText | 指示strSQL为命令文本, 即普通的SQL语句. |
adCmdTable | 指示ADO生成SQL查询返回以 strSQL 命名的表中的所有行. |
adCmdTableDirect | 指示所作的更改在strSQL中命名的表中返回所有行. |
adCmdStoredProc | 指示strSQL为存储过程. |
adCmdUnknown | 指示strSQL参数中的命令类型为未知. |
adCmdFile | 指示应从在strSQL中命名的文件中恢复保留(保存的)Recordset. |
adAsyncExecute | 指示应异步执行strSQL. |
adAsyncFetch | 指示在提取 Initial Fetch Size 属性中指定的初始数量后, 应该异步提取所有剩余的行. 如果所需的行尚未提取, 主要的线程将被堵塞直到行重新可用. |
adAsyncFetchNonBlocking | 指示主要线程在提取期间从未堵塞. 如果所请求的行尚未提取, 当前行自动移到文件末尾. |
[CursorType]: 可选. CursorTypeEnum 值, 确定打开 Recordset 时应该使用的游标类型. 可为下列常量之一.
[常量] | [说明] |
adOpenForwardOnly | 打开仅向前类型游标. |
adOpenKeyset | 打开键集类型游标. |
adOpenDynamic | 打开动态类型游标. |
adOpenStatic | 打开静态类型游标. |
[ LockType]: 可选, 确定打开 Recordset 时应该使用的锁定类型(并发)的 LockTypeEnum 值, 可为下列常量之一.
[常量] | [说明] |
adLockReadOnly | 只读 - 不能改变数据. |
adLockPessimistic | 保守式锁定 - 通常通过在编辑时立即锁定数据源的记录. |
adLockOptimistic | 开放式锁定 - 只在调用 Update 方法时才锁定记录. |
adLockBatchOptimistic | 开放式批更新 - 用于批更新模式(与立即更新模式相对). |
Cancel 方法:
BOOL CAdoRecordSet::Cancel()
取消执行挂起的异步 Execute 或 Open 方法的调用.
Remarks: 使用 Cancel 方法终止执行异步 Execute 或 Open 方法调用(即通过 adAsyncConnect、adAsyncExecute 或 adAsyncFetch 参数调用的方法). 如果在试图终止的方法中没有使用 adAsyncExecute, 则 Cancel 将返回运行时错误.
Close 方法:
void CAdoRecordSet::Close()
关闭打开的对象及任何相关对象.
Remarks: 使用 Close 方法可关闭 Recordset 对象以便释放所有关联的系统资源. 关闭对象并非将它从内存中删除,
可以更改它的属性设置并且在此后再次打开. 要将对象从内存中完全删除, 可将对象变量设置为 NULL.
如果正在立即更新模式下进行编辑, 调用Close方法将产生错误,应首先调用 Updat e或 CancelUpdat 方法.
如果在批更新期间关闭 Recordset 对象, 则自上次 UpdateBatch 调用以来所做的修改将全部丢失.
如果使用 Clone 方法创建已打开的 Recordset 对象的副本, 关闭原始Recordset或其副本将不影响任何其他副本.
例1:
if (m_adoConnection.OpenUDLFile("C:\\mm.udl"))
{
m_adoRecordSet.SetAdoConnection(&m_adoConnection);
m_adoRecordSet.SetCursorLocation(adUseClient);
m_adoRecordSet.Open("ado", adCmdTable);
// 开始事务 ------------------------
m_adoConnection.BeginTrans();
bool bSex = false;
if (m_strSex == "男") bSex = true;
m_adoRecordSet.AddNew();
if (!m_adoRecordSet.PutCollect("age", m_nAge)
|| !m_adoRecordSet.PutCollect("length", m_fLength)
|| !m_adoRecordSet.PutCollect("name", m_strName)
|| !m_adoRecordSet.PutCollect("tel", m_strTel)
|| !m_adoRecordSet.PutCollect("money", m_cyMoney)
|| !m_adoRecordSet.PutCollect("date", m_dtDate)
|| !m_adoRecordSet.PutCollect("sex", bSex))
{
m_adoRecordSet.CancelUpdate();
m_adoConnection.RollbackTrans();
}
else
{
m_adoRecordSet.Update;
m_adoConnection.CommitTrans();
}
....
if (m_adoRecordSet.GetEditMode() != adEditNone)
{
m_adoRecordSet.CancelUpdate();
}
m_adoRecordSet.Close();
}
else
{
MessageBox("数据库连接失败!");
}
AddNew 方法:
BOOL CAdoRecordSet::AddNew()
Remarks: 开始添加新的纪录.
Update 方法:
BOOL CAdoRecordSet::Update()
Remarks: 在调用 AddNew 等方法后, 调用此方法完成更新或修改.
UpdateBatch 方法:
BOOL CAdoRecordSet::UpdateBatch(AffectEnum AffectRecords)
Remarks: 将所有挂起的批更新写入磁盘.
Params: AffectRecords 可选, AffectEnum 值. 决定 UpdateBatch 方法所影响的记录数目.可以为如下常量之一.
[常量] | [说明] |
adAffectCurrent | 只写入当前记录的挂起更改. |
adAffectGroup | 写入满足当前 Filter 属性设置的记录所发生的挂起更改. 必须将 Filter 属性设置为某个有效的预定义常量才能使用该选项. |
adAffectAll(默认值) | . 写入 Recordset 对象中所有记录的挂起更改, 包括由于当前 Filter 属性设置而隐藏的任何记录. |
adAffectAllChapters | 写入所有子集的挂起更改. |
Remarks: 按批更新模式修改 Recordset 对象时, 使用 UpdateBatch 方法可将 Recordset 对象中的所有更改传递到基本数据库.
如果 Recordset 对象支持批更新, 那么可以将一个或多个记录的多重更改缓存在本地, 然后再调用 UpdateBatch 方法. 如果在调用 UpdateBatch 方法时正在编辑当前记录或者添加新的记录, 那么在将批更新传送到提供者之前, ADO 将自动 调用 Update 方法保存对当前记录的所有挂起更改.
只能对键集或静态游标使用批更新.
CancelUpdate 方法:
BOOL CAdoRecordSet::CancelUpdate()
Name: 取消在调用 Update 方法前对当前记录或新记录所作的任何更改.
Remarks: 使用 CancelUpdate 方法可取消对当前记录所作的任何更改或放弃新添加的记录. 在调用 Update 方法后将无法撤消对当前记录或新记录所做的更改, 除非更改是可以用 RollbackTrans 方法回卷的事务的一部分, 或者是可以用 CancelBatch 方法取消的批更新的一部分.
如果在调用 CancelUpdate 方法时添加新记录, 则调用 AddNew 之前的当前记录将再次成为当前记录.
如果尚未更改当前记录或添加新记录, 调用 CancelUpdate 方法将产生错误.
CancelBatch 方法:
BOOL CAdoRecordSet::CancelBatch(AffectEnum AffectRecords)
Name: 取消挂起的批更新.
Params: AffectRecords 可选的 AffectEnum 值, 决定CancelBatch 方法所影响记录的数目, 可为下列常量之一:
[常量] | [说明] |
AdAffectCurrent | 仅取消当前记录的挂起更新. |
AdAffectGroup | 对满足当前 Filter 属性设置的记录取消挂起更新.使用该选项时,必须将 Filter 性设置为合法的预定义常量之一. |
AdAffectAll 默认值 | 取消 Recordset 对象中所有记录的挂起更新,包括由当前 Filter 属性设置所隐藏的任何记录. |
Delete 方法:
BOOL CAdoRecordSet::Delete(AffectEnum AffectRecords)
Params: AffectRecords: AffectEnum 值, 确定 Delete 方法所影响的记录数目, 该值可以是下列常量之一.
[常量] | [说明 ] |
AdAffectCurrent 默认 | 仅删除当前记录. |
AdAffectGroup | 删除满足当前 Filter 属性设置的记录. 要使用该选项, 必须将 Filter 属性设置为有效的预定义常量之一. |
adAffectAll | 删除所有记录. |
adAffectAllChapters | 删除所有子集记录. |
PutCollect/GetCollect 方法:
BOOL PutCollect(long index, const _variant_t &value);
BOOL PutCollect(long index, const CString &value);
BOOL PutCollect(long index, const double &value);
BOOL PutCollect(long index, const float &value);
BOOL PutCollect(long index, const long &value);
BOOL PutCollect(long index, const DWORD &value);
BOOL PutCollect(long index, const int &value);
BOOL PutCollect(long index, const short &value);
BOOL PutCollect(long index, const BYTE &value);
BOOL PutCollect(long index, const bool &value);
BOOL PutCollect(long index, const COleDateTime &value);
BOOL PutCollect(long index, const COleCurrency &value);
BOOL PutCollect(LPCTSTR strFieldName, const _variant_t &value);
BOOL PutCollect(LPCTSTR strFieldName, const CString &value);
BOOL PutCollect(LPCTSTR strFieldName, const double &value);
BOOL PutCollect(LPCTSTR strFieldName, const float &value);
BOOL PutCollect(LPCTSTR strFieldName, const long &value);
BOOL PutCollect(LPCTSTR strFieldName, const DWORD &value);
BOOL PutCollect(LPCTSTR strFieldName, const int &value);
BOOL PutCollect(LPCTSTR strFieldName, const short &value);
BOOL PutCollect(LPCTSTR strFieldName, const BYTE &value);
BOOL PutCollect(LPCTSTR strFieldName, const bool &value);
BOOL PutCollect(LPCTSTR strFieldName, const COleDateTime &value);
BOOL PutCollect(LPCTSTR strFieldName, const COleCurrency &value);
BOOL GetCollect(long index, CString &value);
BOOL GetCollect(long index, double &value);
BOOL GetCollect(long index, float &value);
BOOL GetCollect(long index, long &value);
BOOL GetCollect(long index, DWORD &value);
BOOL GetCollect(long index, int &value);
BOOL GetCollect(long index, short &value);
BOOL GetCollect(long index, BYTE &value);
BOOL GetCollect(long index, bool &value);
BOOL GetCollect(long index, COleDateTime &value);
BOOL GetCollect(long index, COleCurrency &value);
BOOL GetCollect(LPCSTR strFieldName, CString &strValue);
BOOL GetCollect(LPCSTR strFieldName, double &value);
BOOL GetCollect(LPCSTR strFieldName, float &value);
BOOL GetCollect(LPCSTR strFieldName, long &value);
BOOL GetCollect(LPCSTR strFieldName, DWORD &value);
BOOL GetCollect(LPCSTR strFieldName, int &value);
BOOL GetCollect(LPCSTR strFieldName, short &value);
BOOL GetCollect(LPCSTR strFieldName, BYTE &value);
BOOL GetCollect(LPCSTR strFieldName, bool &value);
BOOL GetCollect(LPCSTR strFieldName, COleDateTime &value);
BOOL GetCollect(LPCSTR strFieldName, COleCurrency &value);
在读取字段的值,本程序做了一些自动的转换,如: 如果字段的值是以数字组成的字符串,你可以用整型或双精度的值,直接读取.
Requery 方法:
BOOL CAdoRecordSet::Requery(long Options)
Name: 通过重新执行对象所基于的查询, 更新 Recordset 对象中的数据.
Params: Options 可选. 指示影响该操作选项的位屏蔽. 如果该参数设置为 adAsyncExecute, 则该操作将异步执行并在它结束时产生 RecordsetChangeComplete 事件
Remarks: 通过重新发出原始命令并再次检索数据, 可使用 Requery 方法刷新来自数据源的 Recordset 对象的全部内容. 调用该方法等于相继调用 Close 和 Open 方法. 如果正在编辑当前记录或者添加新记录将产生错误.
Resync 方法:
BOOL CAdoRecordSet::Resync(AffectEnum AffectRecords, ResyncEnum ResyncValues)
Name: 从基本数据库刷新当前 Recordset 对象中的数据.
Params: AffectRecords: 可选, AffectEnum 值, 决定 Resync 方法所影
响的记录数目, 可以为下列常量之一.
[常量] | [说明] |
adAffectCurrent | 只刷新当前记录. |
adAffectGroup | 刷新满足当前 Filter 属性设置的记录.只有将 Filter 属性设置为有效预定义常量之一才能使用该选项. |
adAffectAll 默认值 | 刷新 Recordset 对象中的所有记录, 包括由于当前 Filter 属性设置而隐藏的记录. |
adAffectAllChapters | 刷新所有子集记录. |
ResyncValues: 可选, ResyncEnum 值. 指定是否覆盖基本值. 可为下列常量之一.
[常量] | [说明] |
adResyncAllValues 默认值 | 覆盖数据, 取消挂起的更新. |
adResyncUnderlyingValues | 不覆盖数据, 不取消挂起的更新. |
Remarks: 使用 Resync 方法将当前 Recordset 中的记录与基本的数据库重新同步. 这在使用静态或仅向前的游标但希望看到基本数据库中的改动时十分有用.
如果将 CursorLocation 属性设置为 adUseClient, 则 Resync 仅对非只读的 Recordset 对象可用.
与 Requery 方法不同, Resync 方法不重新执行 Recordset 对象的基本的命令, 基本的数据库中的新记录将不可见.
Save/Load 方法:
BOOL CAdoRecordSet::Save(LPCTSTR strFileName, PersistFormatEnum PersistFormat)
BOOL CAdoRecordSet::Load(LPCTSTR strFileName)
Name: 将 Recordset 保存在持久性文件中.
Params:
[strFileName]: 可选. 文件的完整路径名, 用于保存 Recordset.
[PersistFormat]: 可选. PersistFormatEnum 值, 指定保存 Recordset 所使用的格式. 可以是如下的某个常量:
[常量] | [说明] |
adPersistADTG | 使用专用的“Advanced Data Tablegram”格式保存. |
adPersistXML 默认 | 使用 XML 格式保存. |
Remarks: 只能对打开的 Recordset 调用 Save 方法. 随后使用 Open 方法可以从文件中恢复 Recordset. 如果 Filter 属性影响 Recordset, 将只保存经过筛选的行.
在第一次保存 Recordset 时指定 FileName. 如果随后调用 Save 时, 应忽略 FileName, 否则将产生运行时错误. 如果随后使用新的 FileName 调用 Save, 那么 Recordset 将保存到新的文件中, 但新文件和原始文件都是打开的.
记录集导航方法:
BOOL CAdoRecordSet::MoveFirst()
BOOL CAdoRecordSet::MoveLast ()
BOOL CAdoRecordSet::MoveNext ()
BOOL CAdoRecordSet::MovePrevious ()
Remarks:
使用 MoveFirst 方法将当前记录位置移动到 Recordse 中的第一个记录.
使用 MoveLast 方法将当前记录位置移动到 Recordset 中的最后一个记录. Recordset 对象必须支持书签或向后光标移动; 否则调用该方法将产生错误.
使用 MoveNext 方法将当前记录向前移动一个记录(向 Recordset 的底部). 如果最后一个记录是当前记录并且调用 MoveNext 方法, 则 ADO 将当前记录设置到 Recordset (EOF为 True)的尾记录之后. 当 EOF 属性已经为 True 时试图向前移动将产生错误.
使用 MovePrevious 方法将当前记录位置向后移动一个记录(向记录集的顶部). Recordset 对象必须支持书签或向后游标移动; 否则方法调用将产生错误. 如果首记录是当前记录并且调用 MovePrevious 方法, 则 ADO 将当前记录设置在 Recordset (BOF为True)的首记录之前. 而BOF属性为 True 时向后移动将产生错误. 如果 Recordse 对象不支持书签或向后游标移动, 则 MovePrevious 方法将产生错误.
如果记录集是仅向前的, 但是用户希望支持向前和向后滚动, 则可以使用 CacheSize 属性创建记录缓存, 通过 Move 方法支持向后游标移动. 由于缓存记录是加载到内存中的, 所以应避免不必要地缓存太多记录. 可以调用仅向前 Recordset 对象的 MoveFirst 方法; 这样做可使提供者重新执行生成 Recordset 对象的命令.
Move:
BOOL CAdoRecordSet::Move(long lRecords, long Start)
Name: 移动 Recordset 对象中当前记录的位置.
Params:
[lRecords] 带符号长整型表达式, 指定当前记录位置移动的记录数.
[Start] 可选, 变体型书签. 也可以使用下列 BookmarkEnum 值:
[常量] | [说明] |
adBookmarkCurrent 默认 | 从当前记录开始. |
adBookmarkFirst | 从首记录开始. |
adBookmarkLast | 从尾记录开始. |
State 属性:
long CAdoRecordSet::GetState()
BOOL CAdoRecordSet::IsOpen()
Name: 取得记录集对象的状态(是打开状态还是关闭状态). 对异步方式执行的 Recordset 对象, 则说明当前的对象状态是连接、执行还是获取状态.
returns: 返回下列常量之一的长整型值.
[常量] | [说明] |
adStateClosed | 指示对象是关闭的. |
adStateOpen | 指示对象是打开的. |
adStateConnecting | 指示 Recordset 对象正在连接. |
adStateExecuting | 指示 Recordset 对象正在执行命令. |
adStateFetching | 指示 Recordset 对象的行正在被读取. |
Remarks: 可以随时使用 State 属性确定指定对象的当前状态. 该属性是只读的. Recordset 对象的 State 属性可以是组合值. 例如: 如果正在执行语句, 该属性将是 adStateOpen 和 adStateExecuting 的组合值.
long CAdoRecordSet::GetStatus()
Name: 指示有关批更新或其他大量操作的当前记录的状态.
returns: 返回下列一个或多个 RecordStatusEnum 值之和.
[常量] | [说明] |
adRecOK | 成功地更新记录. |
adRecNew | 记录是新建的. |
adRecModified | 记录被修改. |
adRecDeleted | 记录被删除. |
adRecUnmodified | 记录没有修改. |
adRecInvalid | 由于书签无效, 记录没有保存. |
adRecMultipleChanges | 由于影响多个记录, 因此记录未被保存. |
adRecPendingChanges | 由于记录引用挂起的插入, 因此未被保存. |
adRecCanceled | 由于操作被取消, 未保存记录. |
adRecCantRelease | 由于现有记录锁定, 没有保存新记录. |
adRecConcurrencyViolation | 由于开放式并发在使用中, 记录未被保存. |
adRecIntegrityViolation | 由于用户违反完整性约束, 记录未被保存. |
adRecMaxChangesExceeded | 由于存在过多挂起更改, 记录未被保存. |
adRecObjectOpen | 由于与打开的储存对象冲突, 记录未被保存. |
adRecOutOfMemory | 由于计算机内存不足, 记录未被保存. |
adRecPermissionDenied | 由于用户没有足够的权限, 记录未被保存. |
adRecSchemaViolation | 由于记录违反基本数据库的结构, 因此未被保存. |
adRecDBDeleted | 记录已经从数据源中删除. |
Remarks: 使用 Status 属性查看在批更新中被修改的记录有哪些更改被挂起. 也可使用 Status 属性查看大量操作时失败记录的状态. 例如, 调用 Recordset 对象的 Resync、UpdateBatch 或 CancelBatch 方法, 或者设置 Recordset 对象的 Filter 属性为书签数组. 使用该属性, 可检查指定记录为何失败并将问题解决.
long CAdoRecordSet::GetRecordCount()
Name: 获取当前记录集中记录数目
long CAdoRecordSet::GetFieldsCount()
Name: 获取当前记录集中字段数目
BOOL CAdoRecordSet::IsBOF()
Name: 指针是否在在记录集头
BOOL CAdoRecordSet::IsEOF()
Name: 指针是否在在记录集尾
字段属性:
FieldsPtr CAdoRecordSet::GetFields()
Remarks: Recordset 对象包括 Field 对象组成的 Fields 集合. 每个Field 对象对应 Recordset 集中的一列.
GetField
FieldPtr CAdoRecordSet::GetField(long lIndex)
FieldPtr CAdoRecordSet::GetField(LPCTSTR lpszFieldName)
Name: 取得指定列的字段对象的指针.
FieldName
CString CAdoRecordSet::GetFieldName(long lIndex)
Remarks: 取得指定列字段的字段名.
FieldAttributes:
long CAdoRecordSet::GetFieldAttributes(long lIndex)
long CAdoRecordSet::GetFieldAttributes(LPCTSTR lpszFieldName)
name: 取得 Field 对象一项或多项属性.
returns: 对于 Field 对象, Attributes 属性为只读, 其值可能为以下任意一个或多个 FieldAttributeEnum 值的和.
[常量] | [说明] |
adFldMayDefer | 指示字段被延迟, 即不从拥有整个记录的数据源检索字段值, 仅在显式访问这些字段时才进行检索. |
adFldUpdatable | 指示可以写入该字段. |
adFldUnknownUpdatable | 指示提供者无法确定是否可以写入该字段. |
adFldFixed | 指示该字段包含定长数据. |
adFldIsNullable | 指示该字段接受 Null 值. |
adFldMayBeNull | 指示可以从该字段读取 Null 值. |
adFldLong | 指示该字段为长二进制字段. 并指示可以使用 AppendChunk 和 GetChunk 方法. |
adFldRowID | 指示字段包含持久的行标识符, 该标识符无法被写入,并且除了对行进行标识(如记录号、唯一标识符等)外不存在有意义的值. |
adFldRowVersion | 指示该字段包含用来跟踪更新的某种时间或日期标记. |
adFldCacheDeferred | 指示提供者缓存了字段值, 并已完成随后对缓存的读取. |
DefineSize:
long CAdoRecordSet::GetFieldDefineSize(long lIndex)
long CAdoRecordSet::GetFieldDefineSize(LPCTSTR lpszFieldName)
Name: 指示 Field 对象所定义的长度.
returns: 返回某个字段定义的长度(按字节数)的长整型值.
Remarks: 使用 DefinedSize 属性可确定 Field 对象的数据容量.
ActualSize:
long CAdoRecordSet::GetFieldActualSize(long lIndex)
long CAdoRecordSet::GetFieldActualSize(LPCTSTR lpszFieldName)
Name: 取得字段的值的实际长度.
returns: 返回长整型值.某些提供者允许设置该属性以便为 BLOB 数据预留空间, 在此情况下默认值为 0.
Remarks: 使用 ActualSize 属性可返回 Field 对象值的实际长度.对于所有字段,ActualSize 属性为只读.如果 ADO 无法确定 Field 对象值的实际长度, ActualSize 属性将返回 adUnknown. 如以下范例所示, ActualSize 和 DefinedSize 属性有所不同: adVarChar 声明类型且最大长度为 50 个字符的 Field 对象将返回为 50 的 DefinedSize 属性值, 但是返回的 ActualSize 属性值是当前记录的字段中存储的数据的长度.
FieldType:
DWORD CAdoRecordSet::GetFieldType(long lIndex)
DWORD CAdoRecordSet::GetFieldType(LPCTSTR lpszFieldName)
returns: 返回下列值之一. 相应的 OLE DB 类型标识符在下表的说明栏的括号中给出.
[常量] | [说明] |
adArray | 与其他类型一起加入逻辑 OR 以指示该数据是那种类型的安全数组 (DBTYPE_ARRAY). |
adBigInt | 8 字节带符号的整数 (DBTYPE_I8). |
adBinary | 二进制值 (DBTYPE_BYTES). |
adBoolean | 布尔型值 (DBTYPE_BOOL). |
adByRef | 与其他类型一起加入逻辑 OR 以指示该数据是其他类型数据的指针 (DBTYPE_BYREF). |
adBSTR | 以空结尾的字符串 (Unicode) (DBTYPE_BSTR). |
adChar | 字符串值 (DBTYPE_STR). |
adCurrency | 货币值 (DBTYPE_CY).货币数字的小数点位置固定、小数点右侧有四位数字.该值保存为 8 字节范围为10,000 的带符号整型值. |
adDate | 日期值 (DBTYPE_DATE).日期按双精度型数值来保存, 数字全部表示从 1899 年 12 月 30 开始的日期数.小数部分是 一天当中的片段时间. |
adDBDate | 日期值 (yyyymmdd) (DBTYPE_DBDATE). |
adDBTime | 时间值 (hhmmss) (DBTYPE_DBTIME). |
adDBTimeStamp | 时间戳 (yyyymmddhhmmss 加 10 亿分之一的小数)(DBTYPE_DBTIMESTAMP). |
adDecimal | 具有固定精度和范围的精确数字值 (DBTYPE_DECIMAL). |
adDouble | 双精度浮点值 (DBTYPE_R8). |
adEmpty | 未指定值 (DBTYPE_EMPTY). |
adError | 32 - 位错误代码 (DBTYPE_ERROR). |
adGUID | 全局唯一的标识符 (GUID) (DBTYPE_GUID). |
adIDispatch | OLE 对象上 Idispatch 接口的指针 (DBTYPE_IDISPATCH). |
adInteger | 4 字节的带符号整型 (DBTYPE_I4). |
adIUnknown | OLE 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN). |
adLongVarBinary | 长二进制值. |
adLongVarChar | 长字符串值. |
adLongVarWChar | 以空结尾的长字符串值. |
adNumeric | 具有固定精度和范围的精确数字值 (DBTYPE_NUMERIC). |
adSingle | 单精度浮点值 (DBTYPE_R4). |
adSmallInt | 2 字节带符号整型 (DBTYPE_I2). |
adTinyInt | 1 字节带符号整型 (DBTYPE_I1). |
adUnsignedBigInt | 8 字节不带符号整型 (DBTYPE_UI8). |
adUnsignedInt | 4 字节不带符号整型 (DBTYPE_UI4). |
adUnsignedSmallInt | 2 字节不带符号整型 (DBTYPE_UI2). |
adUnsignedTinyInt | 1 字节不带符号整型 (DBTYPE_UI1). |
adUserDefined | 用户定义的变量 (DBTYPE_UDT). |
adVarBinary | 二进制值. |
adVarChar | 字符串值. |
adVariant | 自动变体型 (DBTYPE_VARIANT). |
adVector | 与其他类型一起加入逻辑 OR 中, 指示数据是 DBVECTOR 结构(由 OLE DB 定义).该结构含有元素的计数和其他类型 (DBTYPE_VECTOR) 数据的指针. |
adVarWChar | 以空结尾的 Unicode 字符串. |
adWChar | 以空结尾的 Unicode 字符串 (DBTYPE_WSTR). |
Remarks: 返回指定字段的数据类型.
IsFieldNull:
BOOL CAdoRecordSet::IsFieldNull(LPCTSTR lpFieldName)
BOOL CAdoRecordSet::IsFieldNull(long index)
当前的记录的指定字段值是否为NULL;
Supports 方法:
BOOL CAdoRecordSet::Supports(CursorOptionEnum CursorOptions)
Name: 确定指定的 Recordset 对象是否支持特定类型的功能.
Params: CursorOptions 长整型, 包括一个或多个下列 CursorOptionEnum 值.
[常量] | [说明] |
adAddNew | 可使用 AddNew 方法添加新记录. |
adApproxPosition | 可读取并设置 AbsolutePosition 和 AbsolutePage 的属性. |
adBookmark | 可使用 Bookmark 属性获得对特定记录的访问. |
adDelete | 可以使用 Delete 方法删除记录. |
adHoldRecords | 可以检索多个记录或者更改下一个检索位置而不必提交所有挂起的更改. |
adMovePrevious | 可使用 MoveFirst 和 MovePrevious 方法, 以及 Move 或 GetRows 方法将当前记录位置向后移动而不必使用书签. |
adResync | 通过 Resync 方法, 使用在基本的数据库中可见的数据更新游标. |
adUpdate | 可使用 Update 方法修改现有的数据. |
adUpdateBatch | 可以使用批更新(UpdateBatch 和 CancelBatch 方法) 将更改组传输给提供者. |
adIndex | 可以使用 Index 属性命名索引. |
adSeek | 可以使用 Seek 方法定位 Recordset 中的行. |
returns: 返回布尔型值, 指示是否支持 CursorOptions 参数所标识的所有功能.
Remarks: 使用 Supports 方法确定 Recordset 对象所支持的功能类型. 如果 Recordset 对象支持其相应常量在 CursorOptions 中的功能, 那么 Supports方法返回 True.否则返回 False.
注意 尽管 Supports 方法可对给定的功能返回 True, 但它不能保证提供者可以使功能在所有环境下均有效. Supports 方法只返回提供者是否支持指定的功能(假定符合某些条件). 例如, Supports 方法可能指示 Recordset 对象支持更新 (即使游标基于多个表的合并), 但并且某些列仍然无法更新.
Bookmark 方法:
void CAdoRecordSet::GetBookmark()
获取当前记录的书签.
BOOL CAdoRecordSet::SetBookmark()
将当前记录移至书签指向的记录.
AppendChunk/GetChunk 方法:
BOOL AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(LPCSTR strFieldName, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPCTSTR lpszFileName);
BOOL AppendChunk(LPCSTR strFieldName, LPCTSTR lpszFileName);
BOOL GetChunk(FieldPtr pField, LPVOID lpData);
BOOL GetChunk(long index, LPVOID lpData);
BOOL GetChunk(LPCSTR strFieldName, LPVOID lpData);
BOOL GetChunk(long index, CBitmap &bitmap);
BOOL GetChunk(LPCSTR strFieldName, CBitmap &bitmap);
写入或取出BLOB数据
strFieldName 文件名:
lpData 指向缓冲区的指针:
nBytes 要写入或读出的数据的字节数:
例如:
// 写入 ----------------
m_adoRecordSet.AddNew();
m_adoRecordSet.SetFieldValue("ID", 5);
m_adoRecordSet.AppendChunk("Document", "C:\\doc1.txt");
m_adoRecordSet.Update();
// 读取 ----------------
long size = GetFieldActualSize(strFieldName);
if ((adFldLong & GetFieldAttributes(strFieldName)) && size > 0)
{
BYTE *lpData = new BYTE[size];
if (GetChunk(GetField(strFieldName), (LPVOID)lpData))
{
.....
DoSomeThing();
}
delete[] lpData;
lpData = NULL;
}
Clone 方法:
BOOL CAdoRecordSet::Clone(CAdoRecordSet &pRecordSet)
克隆一份副本
Find 方法:
BOOL CAdoRecordSet::Find(LPCTSTR lpszFind, SearchDirectionEnum SearchDirection)
BOOL CAdoRecordSet::FindFirst(LPCTSTR lpszFind)
查找满足条件的记录.
Filter 方法:
BOOL CAdoRecordSet::SetFilter(LPCTSTR lpszFilter)
过滤出满足条件的记录.
CAdoRecordset m_pRs;
m_pRs = CAdoRecordSet(&m_pConnection);
if(m_pRs.Open("ado", CADORecordset::openTable))
{
CString strFilter = _T("Name <> ''anyou'' And Age > 20");
m_pRs.SetFilter(strFilter);
.
.
m_pRs.Close();
}
Sort 方法:
BOOL CAdoRecordSet::SetSort(LPCTSTR lpszCriteria)
使记录集以指定的字段排序.
EditMode 属性:
EditModeEnum CAdoRecordSet::GetEditMode()
根据当前的EditMode属性,你可以确定要不要Update 或 CancelUpdate!
AbsolutePage 属性:
BOOL CAdoRecordSet::SetAbsolutePage(int nPage)
long CAdoRecordSet::GetAbsolutePage()
name: 当前记录所在的页.
returns: 置或返回从 1 到 Recordset 对象 (PageCount) 所含页数的长整型值,或者返回以下常量。
[常量] | [说明] |
adPosUnknown | Recordset 为空,当前位置未知,或者提供者不支持 AbsolutePage 属性。 |
adPosBOF | 当前记录指针位于 BOF(即 BOF 属性为 True)。 |
adPosEOF | 当前记录指针位于 EOF(即 EOF 属性为 True)。 |
AbsolutePosition 属性:
BOOL CAdoRecordSet::SetAbsolutePosition(int nPosition)
long CAdoRecordSet::GetAbsolutePosition()
name: Recordset 对象当前记录的序号位置。
returns: 设置或返回从 1 到 Recordset 对象 (PageCount) 所含页数的长整型值,或者返回以下常量。
[常量] | [说明] |
adPosUnknown | Recordset 为空,当前位置未知,或者提供者不支持 AbsolutePosition 属性。 |
adPosBOF | 当前记录指针位于 BOF(即 BOF 属性为 True)。 |
adPosEOF | 当前记录指针位于 EOF(即 EOF 属性为 True)。 |
Remarks: 使用 AbsolutePosition 属性可根据其在 Recordset 中的序号 位置移动到记录,或确定当前记录的序号位置。提供者必须支持该属性的相应功能才能使用该属性。
同 AbsolutePage 属性一样,AbsolutePosition 从 1 开始,并在当前记录 为 Recordset 中的第一个记录时等于 1。从 RecordCount 属性可获得 Recordset 对象的总记录数。
设置 AbsolutePosition 属性时,即使该属性指向位于当前缓存中的记录,ADO 也将使用以指定的记录开始的新记录组重新加载缓存。CacheSize 属性决定该记录组的大小。
注意 不能将 AbsolutePosition 属性作为替代的记录编号使用。删除前面的记录时,给定记录的当前位置将发生改变。如果 Recordset 对象被重新查询或重新打开,则无法保证给定记录有相同的 AbsolutePosition。书签仍然是保持和返回给定位置的推荐方式,并且在所有类型的 Recordset 对象的定位时是唯一的方式。
如何与DataGrid控件进行绑定:
if (m_adoConnection.ConnectAccess("database.mdb"))
{
m_adoRecordSet.SetAdoConnection(&m_adoConnection);
// 这一步不能少,只有设成adUseClient才能进行绑定.
m_adoRecordSet.SetCursorLocation(adUseClient);
if (m_adoRecordSet.Open(lpszPathName, adCmdTable))
{
m_wndDataGrid.SetCaption(GetDocument()->GetPathName());
m_wndDataGrid.SetRefDataSource(NULL);
// 绑定数据源 ---------------------------.
m_wndDataGrid.SetRefDataSource((LPUNKNOWN)(m_adoRecordSet.GetRecordset()));
// 充许更新修改数据 ---------------------
m_wndDataGrid.SetAllowAddNew(TRUE);
m_wndDataGrid.SetAllowDelete(TRUE);
m_wndDataGrid.SetAllowUpdate(TRUE);
m_wndDataGrid.Refresh();
}
}
更多精彩
赞助商链接