#WindowsCE嵌入式高級編程其實例詳解8_第1頁
#WindowsCE嵌入式高級編程其實例詳解8_第2頁
#WindowsCE嵌入式高級編程其實例詳解8_第3頁
#WindowsCE嵌入式高級編程其實例詳解8_第4頁
#WindowsCE嵌入式高級編程其實例詳解8_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第 8 章 Windows CE 基礎(chǔ)數(shù)據(jù)庫編程在軟件編程中,數(shù)據(jù)庫始終是很重要的一個部分。通過數(shù)據(jù)庫,可以非常方便地存儲和 【索數(shù)據(jù),極大的提高工作效率。例如要實現(xiàn)一個個人通訊簿的管理,就可以使用數(shù)據(jù) 庫,它以非常迅速地實現(xiàn)該項功能。在本章中,將重點介紹 Windows CE 自帶的數(shù)據(jù)庫系統(tǒng) EDB。果需要存儲的數(shù)據(jù)量較小,數(shù)據(jù)結(jié)構(gòu)相對簡單,EDB將會是非常適用的。本章主要介紹如下內(nèi)容: EDB 概述 EDB 操作綜合示例81 EDB 概述從 Windows CE 50 開始, Windows CE自帶數(shù)據(jù)庫系統(tǒng)就包括了 EDB和 CEDB。CEDB 是 Windows CE 50 之前就

2、支持的數(shù)據(jù)庫系統(tǒng), EDB是 Windows CE 50 之后新增的數(shù)據(jù) 庫系統(tǒng)。EDB可以理解成是對 CEDB的升級,新增加了如下功能: 支持事務(wù)處理功能。 使用計劃 (schemas 定義數(shù)據(jù)庫結(jié)構(gòu)。 增加了字段排序功能 ( 支持最多 l6 個字段排序以及排序字段支持所有字段類型。 新增了“流”字段類型。 多用戶訪問。在 Windows CE 5 0、Willdows CE 6 0 中依舊支持 CEDB,關(guān)于 CEDB方面的知識讀者 可 以參考 EVC高級編程以及應(yīng)用開發(fā)一書。EDB 數(shù)據(jù)庫系統(tǒng)支持 10種字段數(shù)據(jù)類型,如表 81 所示。表 8 110 種字段數(shù)據(jù)類型表數(shù)據(jù)類型描述對應(yīng)常量

3、iVal2 個字節(jié)有符號整數(shù)CEVT l2uiVU2 個字節(jié)無符號整數(shù)CEVTUl214個字節(jié)有符號整數(shù)CEVT l4ulV al4 個字節(jié)無符號整數(shù)CEVT-U14filetime日期時間結(jié)構(gòu)CEVl jILETIMElpwstr以0結(jié)構(gòu)的 UNICOD字E 符串CEVLPWSTRblobCEBLOB結(jié)構(gòu),用于存儲一些較小的二進(jìn)制數(shù)據(jù)CEVT BLOBBoolVal布爾值CEVT BOOLdblVal8 個字節(jié)的有符號值CEVT R8Stream內(nèi)存流CEVT STREAM/ 67256 Windows CE 嵌入式高級編程及其實例詳解 (用 C+實現(xiàn) 本節(jié)將來介紹 EDB的一些重要 APl

4、 函數(shù),這些 APl 函數(shù)可以實現(xiàn)創(chuàng)建數(shù)據(jù)庫、打開數(shù) 損庫以及讀寫記錄等功能。8 11 裝配數(shù)據(jù)卷從 Windows CE 2 1 開始,數(shù)據(jù)庫文件可以存儲在卷中而不用直接存儲在對象存儲庫 中。數(shù)據(jù)庫卷是可以存儲 Windows CE 數(shù)據(jù)庫的特殊格式的文件。在Windows CE 中,如果想把參 據(jù)庫存儲在文件中,即要使用數(shù)據(jù)庫卷,就必須先裝配數(shù)據(jù)庫卷,并且在關(guān)閉數(shù)據(jù)庫后, 還矗 卸載數(shù)據(jù)庫卷。裝配數(shù)據(jù)庫卷具有兩個意思,一是新建數(shù)據(jù)庫卷,二是打開已存在的數(shù)據(jù) 在 Windows CE 中裝配數(shù)據(jù)庫卷可以通過 CeMountDBVolEx 函數(shù)來實現(xiàn),它的定義如下: 傳常BOOL CeMoun

5、tDBVolEx(PCEGUID pGuid ,LPWSTR lpwszDBVol ,CEVOLUMEOPTIONS+pOptio,ns值描述CREATE NEW創(chuàng)建一個新的數(shù)據(jù)庫卷,如果數(shù)據(jù)庫卷已存在,函數(shù)將失敗CREATE ALWAYS創(chuàng)建一個新的數(shù)據(jù)庫卷,如果數(shù)據(jù)庫卷已存在,它將覆蓋舊卷OPEN EXISTING打開一個數(shù)據(jù)庫卷,如果數(shù)據(jù)庫卷不存在,函數(shù)將失敗OPEN ALWAYS打開一個數(shù)據(jù)庫卷,如果數(shù)據(jù)庫卷不存在,則創(chuàng)建一個新的數(shù)據(jù)庫卷TRUNCATE EXISTING打開一個數(shù)據(jù)庫卷,并將其截斷為 0字節(jié)大小。如果數(shù)據(jù)庫卷不存在, 函數(shù)將失敗如果函數(shù)執(zhí)行成功,將返回 TRUE,還會

6、將參數(shù) pGuid 設(shè)置為某一個值,并且此值可 E 差給其他數(shù)據(jù)庫函數(shù)使用。如果函數(shù)執(zhí)行失敗,則可以調(diào)用 GetLastError 函數(shù)獲取錯誤代 見的錯誤代碼如表 8.3 所示。表 8-3 常見錯誤代碼襲值描述ERROR INVALID PARAMETER表示其中某個參數(shù)無效ERROR BAD FORMAT表示數(shù)據(jù)庫卷來自一個不同的 EDB版本ERROR FILE NOT FOUND表示參數(shù) dwFlags 值為TRUNCATE EXISTIN,G但是要裝載 的數(shù)據(jù)庫卷不存在翠型蕩目勘茸犁簿鞣軸 SAVA3V-3J :vauD蕈S天VMlv_N丑d0暮蔡s翱I 舭p鞣霉樂些輩 鞍貊回娶驃豳S

7、 工SIXa 凡Qv lv H0日馳衛(wèi)業(yè)哥 pJoMsdzsMdQaIN 日QSSHDDV 0a/ 67擘旃朝娶罾瞽檗犁薄驃 (I驟辮哥DWORD dwFlagS;WCHAR szDbaseNameCFDB MAXDBASENAMELE;NDWORD dwDbaseType;DWORD dwNumRecords jDWORD dwSize;FILETIME ftLastModified ;CESORTORDERSPEC rgSortSpecsCEDB_MAXSORTORD;ER CEDBASEINFOE;X 字段 wVersion :表示此結(jié)構(gòu)體的版本,此值必須設(shè)置為2。 字段 wNumSor

8、tOrder :表示在數(shù)據(jù)庫中能夠被激活的排序字段個數(shù),最大值為16。 字段 dwFlags :表示數(shù)據(jù)庫標(biāo)志,它的取值為表8-4 中值的組合。表 8-4 dwFlags 參數(shù)取值表值CEDB VALIDNAME表示 szDbaseName成員有效并且將被使用 丟忑 dw Db ase Typ 磊 e 面兩磊酥兩麗 表示 成員有效并且將被使用泵磊 i :;面。成員有效并且將被使用覆荔荔丙 ii 面鬲荔戛號辱罰蜀 i 西藏?fù)?jù)庫的壓縮狀態(tài) 該參數(shù)應(yīng)與下面的參數(shù)共同使用以設(shè)置數(shù)據(jù)厙的壓縮狀態(tài) 戛票麗磊麗磊屬菊示柔雨 云磊鬲j 麗此標(biāo)記被 : SetDatabaselnfoCeS表示創(chuàng)建數(shù)據(jù)庫時,不采

9、用壓縮方式。如果此標(biāo)記被 菡數(shù)使用,新的記錄或修改的記錄存儲時將不被壓縮。默認(rèn)情況下, 字段 szDbaseN 鋤 e:表示數(shù)據(jù)庫名稱,此字符串最多可以包括SQLCEDMAXDBASENAMELE個N 字符。當(dāng)使用 CeCreateDatabaseWithProps 函數(shù)時,此威 必須被設(shè)置。 字段 dwDbaseType:表示數(shù)據(jù)庫類型標(biāo)識。 字段 dwNumRecords:表示數(shù)據(jù)庫中的記錄數(shù)。/ 67字段 dwSize: EDB中未使用。字段 ftLastModified : EDB中未使用。字段略 sortspecsCEDB_MAXSORTORDER:排序字段定義,是 1 個CESOR

10、。T ORDERSPE結(jié)C構(gòu)體的固定數(shù)組,表示只有數(shù)組中前 N 個值有意義, N:霧 m 艫鬻勰莖篙凱帆必須艤這些覯方可往靳寫入黼prgPropsEDB 參數(shù) 字段描述數(shù)組。在 中,必須足義返些子段, 力口 J 仕生叫與八翟循:參 數(shù) 硼 妒 rops 是 指 向 CEPROPSPEC結(jié) 構(gòu) 體 的 數(shù) 組 ,CEPROPSPE結(jié)C構(gòu)體的定義如下搿塑燮塑湍憾 肌磁一醬搿豳字段 wVersion :表示結(jié)構(gòu)體版本,必須設(shè)置為 l字段 propid :表示字段 ID ,用來表示數(shù)據(jù)庫中的字段。它是一個 32位值,低 l61 表示字段的數(shù)據(jù)類型,高 16位是用戶定義的值,用來標(biāo)識字段。例如定義一個字

11、: 串類型的字段“倉庫名稱”,則可以定義如下 propid 值:#define PID STORAGENAME MAKELONG(CELVPTWST,R 1字段 dwFlags :表示字段標(biāo)志,它為表 8.5 中的值的組合。 表8-5 成員dwFlags 值描述值描述DB PROP NOTNULL表示此字段不能為空DB PROP COMPRESSED表示此字段將被壓縮。此標(biāo)志僅僅可以應(yīng)用于 CEVT STREA字M段類 型。如果 Stream 字段被設(shè)置為壓縮格式,那么 Stream APl 將不能訪問, 相反必須使用 CeReadRecordPropsEx(EDB函數(shù)來訪問在對數(shù)據(jù)庫進(jìn)行添加

12、記錄、刪除記錄,查詢記錄等操作之前,必須先打開數(shù)據(jù)庫。在/ 67 之前曾經(jīng)介紹過, EDB 打開數(shù)據(jù)庫需要基于會話連接來打開數(shù)據(jù)庫,以便系統(tǒng)來維護(hù)事務(wù)操 作。在 EDB中,可以使用 CeOpenDatabaselnSession 函數(shù)打開數(shù)據(jù)庫。該函數(shù)的定義如下: HANDLE CeOpenDatabaseInSession(HANDLE hSession ,PCEGUID pGuid ,PCEOID poid ,塹蟬謄甚硯并暮球咨融明翟智鄧號回琳工 Sl 直N。&0NNNnTNOS aQ丑3磁阜豬專審黜古牲皆。氳、¥蜘彩臥I工ISNaSNIaSVJ J湛OSaq丑3陋j 崮捶罐陋揩辛華督捌0

13、p QNa3s日a確 0s HGHD驟辨珥|jl 。摹華號爵髫辯明中 p8擎槧剪 蒼鋈一薹莖三山I 疆n尋羽百竄警壕妙鴦。一珈璐千些擎人 X xwvWnl 丁確 0S aQ日 3刨驄摹華哥珂掰湃粥業(yè)些擎IVNOIZISOd ON ZlIOS-8Qa31 皂率一珈當(dāng)輩afl0INl-工lIOS HQ丑 3摹g髫擗朝口牮捌單霹0孓辨哥/ 67驟辨剪 s6eId91M 曾搿爭 8擎。號爵明士 9-8擎槧哥碓翠斟茸瓣犁群 s8BId 角M觚秘車 。 (9 Id 嗍 dlxos ,曠 31bs K 耳¥咨磉妙朝豬專茸擗犁群 sdoMumNA 豬專p 。乙槧驀蔡蟛硒卓硎鞘瞬勒當(dāng)擎 Uo!sa0AA硝右!

14、jx 丑3丑 dsH丑QHol工-Hosd牛 -x 丑3丑dsH丑aH0I-Hos B jdoHdlLHosxprga 丑3】 s6PTdMp6J GHOMG ?d 。Hd工HosxVpr日Q丑。】 a工doJd6】 GIdOHd丑D ?paA 】 aseHM GHOM5:s6它 d 五exM a OM !sdoxdmnNM GHOM !u 。 TSXaAM GHOM x丑 3丑dsH丑a丑。工 Hos一 0nas ;ap。d五 3 :土蟬百暈璐驊竊鎏t# 噼羈 3丑dsaIol 工 0s叫群Vosd。摹華髫揩朝婆呆茸群磉革群 VoSd壕霉1 。蜘彩驥徘 OUmNZsA dI臻霉眵爛 0槧業(yè)鷺

15、 p!od嫌霉醬晦。牲零犁群鞣明妊群聯(lián)益當(dāng)擎otuBNz8柚驃霉1。七b p!od 翠黝掣琳碘斟誓艋犁群驃明回娶掣辮驃妊群半pmod咄OlLmNZSAdl 群誹琳 0緊暮蔡 p!od 。濃辮誓胚茸辨壕朗妊群些擎 p!od 臻霉。 QIn0 明捌群磉些擎 p!nod 壕霉0 。崾勘 i6bK 4 o!ssososeqtnefImOOO1巖疆 (HOHuo!ssosmBoaO00甲血耳鎏。鏵嗚弩艇娶號當(dāng)擎 uo!ssosq 驃霉l !( 一 一十 m M 0IIoN 丑3。 SSWldMP GHOMO,4】。sd早x丑3ad sH丑QH0工Hos。 OmeNz sMdI HlLsMdq 續(xù)表值描述

16、CEDB SORT IGNORENONSPACE僅對字符串有效CEDB SORT IGNORESYMBOLS僅對字符串有效CEDB SORT IGNOREKANATYPE不區(qū)分 Hiragana 和Katakana 字符。僅對字符串有效CEDB SORT IGNOREWIDTH不區(qū)分單字節(jié)和雙字節(jié),只對字符串有效CEDB SORT NONNULL表示排序字段不能為 NULLDWORD dwSize DWORD dwParam; UINT uType ; CEGUI D guid ; CEOID oid ; CEOID oidParent ;/ 67CENOTINOTIFICATION;字段 d

17、wSize 表示 CENOTIFICATION結(jié)構(gòu)大小。字段 dwParam存儲在 CENOTIFYREQUES結(jié)T構(gòu)中的 dwParam成員值。字段 uType 表示發(fā)送 WM_DBNOTIFICATIO消N息的類型,它可以設(shè)置為表8 8 中的任意值。262 Windows CE 嵌入式高級編程及其實例詳解 (用c+實現(xiàn) 表88成員 uType取值表值描述DB CEOID CREATED創(chuàng)建了一個新的數(shù)據(jù)庫對象DB CEOID DATABASE DELETED數(shù)據(jù)庫從數(shù)據(jù)卷中刪除DB CEOID RECORD DELETED記錄從數(shù)據(jù)庫中刪除DB CEOID FILE DELETED文件被刪

18、除DB CEOID DIRECTORY DELETED目錄被刪除DB CEOID CHANGED數(shù)據(jù)庫對象被修改,/ 67 參數(shù) hSession 表示會話對象句柄,此參數(shù)可以在打開數(shù)據(jù)庫函數(shù)(CeOpenDatabaselnSession 中獲取。此參數(shù)與對應(yīng)的 CeBeginTransaction 函數(shù)中的 hSession 值是一樣的。 參數(shù) fCommit 表示結(jié)束一個事務(wù)的兩種方法,一種是提交事務(wù),把之前的操作全部 更新到數(shù)據(jù)庫,另一種是回滾事務(wù),把之前的操作全部取消。參數(shù) fCommit 值為 TRUE ,則提交事務(wù),否則回滾事務(wù)。當(dāng) fCommit 值為 TRUE時,所有的數(shù)據(jù)變

19、化并 不會實際寫入到磁盤,此時我們還需調(diào)用 CeFlushDBVol 函數(shù)將數(shù)據(jù)寫入磁盤。若成功結(jié)束事務(wù),函數(shù)返回 TRUE,否則返回 FALSE。8 17 刪除數(shù)據(jù)庫EDB 提供了 CeDeleteDatabase 函數(shù)來刪除數(shù)據(jù)庫卷中的數(shù)據(jù)庫,包括刪除數(shù)據(jù)庫中的記 錄。該函數(shù)定義如下:BOOL CeDeleteDatabase( 264 window!cE 嵌入式高級編程及其實例詳解 ( 用 c+實現(xiàn) / 67PCEGUID pGuid,CEOID Oid 參數(shù) p 伽 d 表示要刪除的數(shù)據(jù)庫所在的數(shù)據(jù)庫卷標(biāo)識,可由 CeMountDbVolEx 函數(shù) 獲取。參數(shù) oid 表示要刪除的數(shù)據(jù)

20、庫對象標(biāo)識; 0id 值必須已經(jīng)被 CeCrea 卸撕 base 晰吐 證 mIsD:B函數(shù)生成。成功刪除數(shù)據(jù)庫后將返回 TRUE,否則返回 FALSE。同樣的,可以使用 GetLastError 函 數(shù)獲取函數(shù)執(zhí)行錯誤信息。8 18 枚舉數(shù)據(jù)庫卷以及數(shù)據(jù)庫。如果需要了解當(dāng)前系統(tǒng)中已裝配好的數(shù)據(jù)卷的信息,可以通過重復(fù)調(diào)厙 CeEnumDBVolumes函數(shù)來實現(xiàn)。 CeEnumDBVolumes函數(shù)的定義如下:BOOL CeEnumDBVo lume s(PCEGUID pGuid ,LPWSTR pws zName ,DWORD cchMaxName1 : - 參數(shù) pGuid 用于標(biāo)識開始

21、列舉的數(shù)據(jù)庫卷 guid 。在首次使用時,應(yīng)該調(diào)月CREATE INVALIDEDBGUID 宏將 pGuid 設(shè)置為無效,然后在下一次調(diào)用時,直招 調(diào)用上一次的 pGuid 即可,直到函數(shù)返回 FALSE值,調(diào)用 GetLastError 函數(shù)返匡ERROR N0 MORE ITEMS。 參數(shù) pwszName用于存儲找到的數(shù)據(jù)庫卷名稱。 參數(shù) cchMaxName表示 pwszName的長度。此值應(yīng)設(shè)置足夠大,以便能夠存l ;pwszName 值,此值至少應(yīng)該設(shè)置為 CEDB_MAXDBASENAME。LEN如果函數(shù)找到一個已裝配的數(shù)據(jù)庫卷,將返回TRUE值,并且將數(shù)據(jù)庫卷的標(biāo)識和名乖分別

22、存儲到 pGuid 和 pwszName中;反之,則返回 FALSE值。如下代碼實現(xiàn)了列舉系統(tǒng)中所有已裝配的數(shù)據(jù)庫卷的功能:CEGUID ceguid ;TCHAR szvolumeNameCEDB_MAXDBASENAMELE;N 創(chuàng)建無效的 GUIDCREATE INVALIDEDBGU工 D(&ceguid ; 列舉已裝載的數(shù)據(jù)庫卷while(CeEnumDBVolumes(&ceguid , szVolumeName, sizeof(szVolumeNameTRACE fL”Enum mounted volumes: s n”, szVolumeNamej上面介紹了 EDB 列舉已經(jīng)裝

23、載的數(shù)據(jù)庫卷的函數(shù), EDB 也提供了一套 APl 函數(shù)來列 舉;據(jù)庫卷中的數(shù)據(jù)庫, CeFindFirstDatabaseEx 用于查找第一個數(shù)據(jù)庫并獲取一個查找句 柄,然 J傳遞給 CeFindNextDatabaseEx 函數(shù)以繼續(xù)查找數(shù)據(jù)庫。此 APl 函數(shù)非常類似于文件查找,/ 67不過 CeFindFirstDatabaseEx 函數(shù)只是進(jìn)行搜索,并不返回數(shù)據(jù)庫對象。CeFindFirstDatabaseEx 函數(shù)的定義如下:HANDLE CeFindFirstDatabaseEx(10 / 67retUrn ;11 / 67開始枚舉數(shù)據(jù)庫 while(CeOid=CeFindNe

24、xtDatabaseEx(hEnumDB , NULL!。 0 ZeroMemory(&CeObjectInf0 , sizeof(CeObjectInfo ;CeObj ectInf0 wVersion=2 ;得到數(shù)據(jù)庫信息if(!CeOidGetInfoEx2(pGuid, CeOid, &CeObj ectInfo dwError=GetLastError(jTRACE(L-the last error: d n”, dwErrorj關(guān)閉查找旬柄C10SeHandle(hEnumDB ;e1SeretUrnj 判斷是數(shù)據(jù)庫類型 if(CeObjectInf0 wObjType=OBJTY

25、PE DATABASE TRACE fL”The name of the database is : s n”,CeObjectInf0infDatabase szDbaseName; 關(guān)閉查找句柄 CIoseHandle(hEnumDB; 枚舉系統(tǒng)的所有已經(jīng)裝載的數(shù)據(jù)庫卷以及數(shù)據(jù)庫卷中的數(shù)據(jù)庫 void CEDB SampleDl9 : 0nBnClickedBtnEnumVolumes( CEGUID ceguid ;TCHAR szVolumeNameCEDB_MAXDBASENAMELE;N創(chuàng)建無效的 GUIDCREATEINVAL 工 DEDBGU工 D(&ceguid ; 列舉已裝

26、載的數(shù)據(jù)庫卷 while(CeEnumDBVolumes(&ceguid , SzVolumeName, CEDB MAXDBASENAMEL一EN1 TRACE fL” Enum mounted volumes: S n”, SzVolumeName; ZeroMemory(szVolumeName,CEDB_MAXDBASENAMELEN;+2/ 67列舉其中的數(shù)據(jù)庫EnumDatabasesInVolume(&ceguid ; + + + + + + + + + + 78.1.9 查找或移動記錄 打開數(shù)據(jù)庫后,如果想讀取或?qū)懭胗涗?,還必須移動數(shù)據(jù)庫的當(dāng)前指針。EDB提供了CeSeekDa

27、tabaseEx函數(shù)來查找數(shù)據(jù)庫或移動數(shù)據(jù)庫指針,該函數(shù)在查找記錄的同時,還設(shè)置 了數(shù)據(jù)庫的當(dāng)前指針。 CeSeekDatabaseEx函數(shù)如果查找到了御應(yīng)的記錄,則返回此記錄對象 標(biāo)識,否則返回 0值。 0CeSeekDatabaseEx 函數(shù)的定義如下:CEOID CeSeekDatabaseEx( 。HANDLE hDatabase , iDWORD dwSeekType ,DWORD dwValue ,WORD wNumValS ,LPDWORD ipdwIndex ;參數(shù) hDatabase :表示打開的數(shù)據(jù)庫句柄。參數(shù) dwSeekType表示查找記錄的類型。 dwSeekType

28、參數(shù)的取值如表 8-9 所示。 表 8-9 dwSeekType 參數(shù)取值表值描述CEDB SEEK CEOID根據(jù)特定記錄對象 ID來查找記錄CEDB SEEK VALUESMALLER從數(shù)據(jù)庫當(dāng)前位置開始查找,直到找到的記錄小于所指定 的值CEDB SEEK VALUESMALLEROREQUAL從數(shù)據(jù)庫當(dāng)前位置開始查找,直到找到的記錄小于或者等于 所指定的值CEDB SEEK VALUEFIRSTEQUAL從數(shù)據(jù)庫當(dāng)前位置開始查找,直到找到的記錄與所指定的值 相等。如果沒有找到,數(shù)據(jù)庫當(dāng)前指針將移動數(shù)據(jù)庫尾部, 函數(shù)并返回 0。指定的值由 CEPROPVA結(jié)L構(gòu)數(shù)組存儲,參 數(shù) dwVa

29、lue 指向此結(jié)構(gòu)地址, wNumVals表示數(shù)組個數(shù)CEDB SEEK VALUENEXTEQUAL從數(shù)據(jù)庫當(dāng)前位置開始查找,直到找到的記錄等于所指定的 值。指定的值由 CEPROPVA結(jié)L構(gòu)數(shù)組存儲,參數(shù) dwValue 指向此結(jié)構(gòu)地址CEDB SEEK VALUEGREATER從數(shù)據(jù)庫當(dāng)前記錄開始查找,直到找到的記錄屬性值大于所 指定的值。指定的值由 CEPROPVA結(jié)L構(gòu)數(shù)組存儲,參數(shù) dwValue 指向此結(jié)構(gòu)地址CEDB SEEK VALUEGREATEROREQUAL從數(shù)據(jù)庫當(dāng)前記錄開始查找,直到找到的記錄屬性值大于或 等于所指定的值。指定的值由 CEPROPVA結(jié)L構(gòu)數(shù)組存儲,

30、 參數(shù) dwValue指向此結(jié)構(gòu)地址CEDB SEEK BEGINNING從數(shù)據(jù)庫記錄首部開始查找第 n個記錄, n的值由 dwValue 決定值描述/ 67CEDB SEEK CURRENT從數(shù)據(jù)庫當(dāng)前記錄開始向前或向后查找第 n個記錄。 n的值 由dwValue 參數(shù)決定,如果是正數(shù)則從當(dāng)前記錄開始向后查 找第 n個記錄,如果為負(fù)數(shù),則從當(dāng)前記錄開始向前查找第 n個記錄CEDB SEEK END從數(shù)據(jù)庫記錄末尾開始查找倒數(shù)第 n個記錄, n的值由 dwValue 決定 CEDBSEEK PREFIX支持按前綴進(jìn)行查詢。此標(biāo)志只能和 strin9 、BLOB字段使 用。例如:要查找字段中前綴

31、為“ AAA”字符,那么字段中 的值為“ AAAA” 、 “ AAABC”將被列舉出 來,但是值為 “從”或者“ AAB”將不會被查找。 此標(biāo)志還必須和以前的查找類型組合使用: CEDB SEEK VALUEFIRSTEQUAL CEDB SEEK VALUESMALLER CEDB SEEK、, ALUEGREATER CEDB SEEK VALUESMALLEROREQUAL CEDB SEEK VALUEGREATEROREQUAL 使用下面的標(biāo)志,前綴可以忽略事件: NORM IGNORECASE NORM IGNORENONSPACE NORM IGNOREKANATYPE NORM

32、 IGNOREWIDTH在 dwSeekType參數(shù)取值的描述中,多次提到了 CEPROPVA結(jié)L構(gòu),以下是該結(jié)構(gòu)的定支 說明:typedef struct CEPROPVALCEPROPID propid ;WORD wLenDataj ,WORD wFlags ;CEVALUNION val ;CEPROPVAL;typedef CEPROPVAL+PCEPROPVALj字段 propid 表示字段標(biāo)識。字段 wLenData將被忽略,未被使用。字段 wFlags 表示字段屬性。在 CeSeekDatabase函數(shù)中,可以忽略。字段val 是一個聯(lián)合結(jié)構(gòu),在實際使用時,應(yīng)當(dāng)根據(jù)字段的類型選

33、用相應(yīng)的賦值。尹 中CEVALUNIO聯(lián)N合結(jié)構(gòu)的定義如下:typede f union CEVALUNION(short iVal ; 112 個字節(jié)有符號整數(shù);USHORT uiVal ; 2 個字節(jié)無符號整數(shù)二1 。 nq iVal ; 4 個字節(jié)有符號整數(shù)、ULONG uIVal ; 4個字節(jié)無符號整數(shù)FILETIME filetimej日期時間結(jié)構(gòu)LPWSTR ipwstr ;以 0 結(jié)束的 UNICODE字符串CEBLOB blobj CEBLOB結(jié)構(gòu),這里可用于存儲大對象,例如圖片或聲音文件等BOOL boolVal j布爾值/ 67double dblValj 8 個字節(jié)的有符

34、號值CEVALUNION ; 參數(shù) dwValue 表示要查找的值。 dwValue 具體值由參數(shù) dwSeekType 決定,讀者請 參考表 8-9 中 dwSeekType 參數(shù)的取值表。 參數(shù) wNumVals 表示在參數(shù) dwValue 里, CEPROPVA結(jié)L 構(gòu)體數(shù)組成員數(shù)。此值只 有當(dāng) dwSeekType 類型為 CEDB SEEK LUESMALLE、R CEDB SEEKVALUESMALLEROREQUA、LCEDB SEEK_VALUEFIRSTEQU、ALCEDBSEEK一 LUEGREATE或R 者 CEDB SEEK LUEGREATEROItEQUA才L有意義

35、。 參數(shù) lpdwIndex 表示找到記錄的索引,此值可以設(shè)置NULL而被忽略。若 CeSeekDatabaseEx 函數(shù)返回 0 ,表示沒有找到相應(yīng)記錄,否則返回指定記錄的OID 標(biāo)識。CeSeekDatabaseEx 函數(shù)將使用 CeOpenDatabaselnSession(EDB 打開數(shù)據(jù)庫時的排序方式 查找或移動記錄。如果在打開數(shù)據(jù)庫時沒有排序方式,那么 CeSeekDatabaseEx 只支持如下 尋找方式: 。 CEDB SEEK CEOID CEDB SEEK BEGINNING CEDB SEEK CURRENTO CEDB SEEK END如果通過 CEPROPVA結(jié)L 構(gòu)

36、列表查找數(shù)據(jù),那么參數(shù) propid 必須在打開數(shù)據(jù)庫 (CeOpenDatabaselnSession 時是存在的排序方式。EDB 比 CEDB多了 3 種查找類型: (1CEDB_SEEK_VALUESMALLEROREQ。UA茬L ECEDB中, CEDB_SEEK_VALUESMALLER 實際上是查找第 1 個小于等于符合條件的記錄。在EDB中,需要使用 CEDB一 SEEKgALUESMALLEROREQU來A查L 找第 l 個小于等于符合條件的記錄;在EDB中使用2EDB SEEK VALUESMALLE將R查找第 l 個小于符合條件的記錄。(2CEDB_SEEK_VALUEGR

37、EATEROREQU。A在L CEDB中, CEDB SEEKVALUEGREATER 實際上是查找第 1 個大于等于符合條件的記錄。在EDB中,需要使用 CEDBSEEKCALUEGREATEROREA查L找第 l 個大于等于符合條件的記錄;在EDB中使用2EDB SEEK VALUEGREATE將R查找第 l 個大于符合條件的記錄。(3CEDB SEEK PREFIX 。在 EDB中,可以使用前綴查找字符串或者BLOB字段。要耋找字段中前綴為“ AAA”的字符,那么字段中的值為“ AAAA”、“ AAABC”的將被列舉出 彩,但是值為“ AA”或者“ AAB”將不會被查找。PID DEM0

38、 的值為 strValue 的例如下面的代碼示例就是簡單演示如何查找數(shù)據(jù)庫中字段 行有記錄。HANDLE hDatabase ; EDB數(shù)據(jù)庫旬柄,需傳入CString strValue=LnDEM0 ”;要查找的字段值,需要傳入/ 67270Windows CE嵌入式高級編程及其實例詳解 (用 c+實現(xiàn)CEOID ceOid ;DWORD dwIndex=0jCEPROPVAL seekPropVal ;ZeroMemory( seekPropVal , sizeof(seekPropVal ;seekPropVal propid=PID DEM;0 要查找的字段 IDseekPropVal

39、 val ipwstr=(LPWSTRstrValue ;要查找的字段值 查找第 1 個值ceOid=CeSeekDatabaseEx(hDatabase ,CEDB SEEK VALUEFIRSTEQU,AL(DWORD seekPropVal , 1,&dwIndex;if(ceOid!=0 查找下面符合條件的值while(trueceOid = CeSeekDatabaseEx(hDatabase,CEDB SEEKVALUENEXTEQUAL,(DWOf&seekPropVal , 1, &dwIndexjif(ceOid=0break ;f fl 。關(guān)于 CeSeekDatabase

40、Ex 函數(shù)就介紹到這里。讀者可以參考下面的數(shù)據(jù)庫操作綜合示例 取更多信息,加深對 CeSeekDatabaseEx 函數(shù)的理解。/ 678110 寫記錄Windows CE 提供了 CeWriteRecordProps 函數(shù)用于向數(shù)據(jù)庫中添加記錄或更改記錄, 數(shù)的聲明如下:CEOID CeWriteRecordProps(HANDLE hDatabase ,CEOID OidRecord ,WORD CPropID ,CEPROPVAL+prgPropVal;參數(shù) hDbase 表示要被寫入的數(shù)據(jù)庫句柄。此句柄將在打開數(shù)據(jù)庫時獲得。參數(shù) 0idRecord 表示要寫入記錄的標(biāo)識。如果參數(shù)值為0

41、,表示添加一條新的記否則表示更改記錄。參數(shù) cProplD 表示要寫入記錄的字段個數(shù),同時也表示 prgPropVal 數(shù)組的長度。 必須大于 0。參數(shù) prgPropVal 表示要寫入記錄的結(jié)構(gòu)體。/ 67-_ 。 _。 l 。 _ 。 l 。LPBYTE lplpBuffer ,LPDWORD lpcbBuffer ,HANDLE hHeap ; 參數(shù) hDbase 指向已打開的數(shù)據(jù)庫句柄。 參數(shù) dwFlags 為讀取標(biāo)識。如果它的值被設(shè)置為CEDB ALLOwREALL0,c那么系統(tǒng)將用 LocalAlloc 函數(shù)為參數(shù) lplpBuffer 分配內(nèi)存,同時如果已分配的緩沖區(qū)不夠 存儲

42、要讀取的記錄信息,則系統(tǒng)可重新為參數(shù) lplpBuffer 分配內(nèi)存。如果設(shè)置 0,系統(tǒng) 在讀數(shù)據(jù)中,不會對內(nèi)存進(jìn)行操作。 參數(shù) lpcProplD 表示參數(shù) rgProplD 指向 CEPROPID結(jié)構(gòu)的數(shù)量。如果 rgProplD 設(shè) 置為 NULL,那么該參數(shù)將返回讀取字段的數(shù)量。 參數(shù) rgProplD 指向 CEPROPID結(jié)構(gòu)的數(shù)組,表示需要讀取的字段。如果該參數(shù)被設(shè)置為 NULL,那么 CeReadRecordProps 函數(shù)將讀取數(shù)據(jù)庫所有字段。 參數(shù) lplpBuffer 表示緩沖區(qū),用于存儲讀取到的記錄信息。注意該參數(shù)不是指向 緩沖區(qū)的指針,而是指向緩沖區(qū)指針的指針。使用這

43、個指針將是個大膽的想法,因為結(jié)果緩沖區(qū)可以由函數(shù)重新分配。如果結(jié)果緩沖區(qū)被重新分配,那么它就可能移動,因此函數(shù)將會修改指向緩沖區(qū)的指針,因為該指針可能已經(jīng)被改變了。同樣,在每次使用 完緩沖區(qū)之后,都必須釋放緩沖區(qū)。 參數(shù) lpcbBuffer 表示參數(shù) lplpBuffer 緩沖區(qū)的大小。 參數(shù) hHeap 表示當(dāng)重新分配內(nèi)存時,指向應(yīng)用程序創(chuàng)建的堆旬柄。此參數(shù)只有當(dāng)參數(shù) dwFlags 被設(shè)置成 CEDB ALLOW黜認(rèn) LLOC標(biāo)識時才有意義。通??梢詫⒋藚?shù)設(shè)置 NULL。若函數(shù)執(zhí)行成功,將返回記錄對象標(biāo)識,反之則返回0,同樣可以使用 GetLastError 函數(shù) 夫取具體錯誤信息。如

44、果數(shù)據(jù)庫在打開時設(shè)置了 CEDB AUTOINC砌 MENT標(biāo)志,那么 CeReadRecordPropsEx/ 67272 Windows CE 嵌入式高級編程及其實例詳解 (用 C+實現(xiàn) 函數(shù)執(zhí)行成功后,數(shù)據(jù)庫指針將指向下一條記錄,以便繼續(xù)連續(xù)地讀取記錄。EDB 比 CEDB多了一個 CEVT STREAM字段。當(dāng)調(diào)用 CeReadRecordPropsEx 函數(shù)時, CEVT STREAM字段將被當(dāng)作 CEVT BLOB字段來對待。 CEVT STREAM字段中的數(shù)據(jù)將 被指向到 CEPRoPvA:L : val blob 成員。如果用 CeReadRecordPropsEx 函數(shù)讀取

45、Stream 字段,Stream 字段也許會非常大,此時系統(tǒng)就要分配很大一塊內(nèi)存以便去存儲此數(shù)據(jù)。相反,如 果Stream 流字段的數(shù)據(jù)非常大,可以使用CeOpenStream(EDB和 CeStreamRead(EDBi 函數(shù)讀取Stream 的字段數(shù)據(jù)。關(guān)于 CeReadRecordPropsEx 函數(shù)的具體使用,讀者可參考 8 2 節(jié)中的數(shù)據(jù)庫操作綜合 示例。8 112 刪除記錄Wmdows CE 提供了 CeDeleteRecord 方法用于刪除數(shù)據(jù)庫中的某條記錄,該函數(shù)的定 義如下:BOOL CeDeleteRecord(HANDLE hDatabase ,CEOID OidReco

46、rd/ 67 GENERIC READ 流對象只能執(zhí)行讀操作 GENERIC WRITE 流對象可以執(zhí)行讀操作和寫操作 若函數(shù)執(zhí)行成功,將返回流對象句柄,執(zhí)行失敗則返回INVALID HANDLE VALUE。成功打開流對象后,可以對流對象進(jìn)行讀取、寫入等操作。流對象使用完畢后,要使 用CloseHandle 函數(shù)關(guān)閉和釋放流對象。讀寫流數(shù)據(jù)在流對象被成功打開后就可以讀取和寫入數(shù)據(jù)了。可以使用 CeStreamRead 函數(shù)讀取流對 象中的數(shù)據(jù),該函數(shù)的定義如下:BOOL CeStreamRead(HANDLE hStream ,LPBYTE iprgbBuffer ,DWORD cbRead

47、 ,LPDWORD ipcbRead ; 參數(shù) hStream :要執(zhí)行讀操作的流對象旬柄,也就是之前打開的流對象旬柄。/ 67 參數(shù) lprgbBuffer :指向讀取之后的數(shù)據(jù)緩沖區(qū)。 參數(shù) cbRead:指定要從流中讀取多少字節(jié)的數(shù)據(jù)。 參數(shù) lpcbRead :表示從流中讀取的實際字節(jié)數(shù)。該值有可能小于cbRead。若流數(shù)據(jù)讀取成功,函數(shù)返回 TRUE,否則返回 FALSE。EDB 提供了 CeStreamWrite 函數(shù)用于寫入流數(shù)據(jù),該函數(shù)定義如下:BOOL CeStreamWrite(HANDLE hStream ,LPBYTE iprgbBuffer ,DWORD cbWrit

48、e ,LPDWORD lpcbWrittenj 參數(shù) hStream :要執(zhí)行寫操作的流對象句柄,也就是之前打開的流對象句柄。 參數(shù) lprgbBuffer :指向要寫入的數(shù)據(jù)緩沖區(qū)。 參數(shù) cbWrite 指向要寫入的數(shù)據(jù)大小。此值應(yīng)小于等于 lprgbBuffer 緩沖區(qū)的 大小。 參數(shù) lpcbWritten :表示往流中寫入的實際字節(jié)數(shù)。該值有可能小于 cbWrite 。 若流數(shù)據(jù)寫入成功,函數(shù)返回 TRUE,否則返回 FALSE。在往流中寫入數(shù)據(jù)后,還必須調(diào)用 CeStreamSaveChanges 函數(shù)來提交所做的修改。該 函數(shù)的定義如下:BOOL CeStreamSaVeChan

49、ges(HANDLE hStream;參數(shù) hStream :指向要操作的流句柄。若保存成功,則函數(shù)返回 TRUE,否則返回 FALSE。當(dāng)執(zhí)行 CeStreamSaveChanges 函數(shù) 保存流數(shù)據(jù)后,流對象將變成只讀,此時如果再調(diào)用 CeStreamWrite 函數(shù),將會失敗。設(shè)置流操作的位置指針 在描述流對象指針之前,再來回顧一下數(shù)據(jù)庫指針方面的知識。 EDB 記錄的讀取和寫 入都是針對當(dāng)前記錄指針的,例如,想要操作數(shù)據(jù)庫中默認(rèn)的第 5 條記錄,那么就必須用 CeSeekDatabaseEx 函數(shù)將當(dāng)前記錄指針移到第 5 條記錄上。同樣,如果要操作數(shù)據(jù)庫默認(rèn) 第5條記錄中某個流字段內(nèi)容

50、,那么首先需要使用 CeSeekDatabaseEx 函數(shù)將當(dāng)前記錄指針移到 第5 條記錄上,然后調(diào)用 CeOpenStream 函數(shù)打開流對象,這樣流對象就能訪問第 5 條記錄上 的 某個流字段流內(nèi)容。此時流對象的數(shù)據(jù)訪問指針指向緩沖區(qū)的首部。此時如果該緩沖區(qū)中 已經(jīng)有了數(shù)據(jù),就可以通過 CeStreamSeek 函數(shù)來改變當(dāng)前流對象數(shù)據(jù)訪問指針,接下來的讀取 操作都將針對當(dāng)前指針進(jìn)行。/ 67CeStreamSeek 函數(shù)的定義如下:BOOL CeStreamSeek f HANDLE hStream , DWORD cbMove , DWORD dwOrigin ,LPDWORD lDc

51、bNewoffset; 參數(shù) hStream 表示要訪問流對象句柄。參數(shù) cbMove 表示要移動指針的字節(jié)數(shù)。該值需參考dwOrigin 值。參數(shù) dwOrigin 表示移動的開始位置,有如下三種取值: STREAM SEEK SET :從緩沖區(qū)的首部開始移動 cbMove 個字節(jié)。 STREAM SEEK CU:R從緩沖區(qū)當(dāng)前指針位置移動cbMove 個字節(jié)。 ST !AM SEEK END:從緩沖區(qū)尾部向前移動 cbMove 個字節(jié)。 參數(shù) lpcbNewOffset :函數(shù)如果執(zhí)行成功,存儲當(dāng)前指針位置。該值表示的是從 緩沖區(qū)首部到當(dāng)前位置的字節(jié)數(shù),它也可被設(shè)置為NULL,表示忽略。若

52、函數(shù)執(zhí)行成功,則返回 TRUE,否則返回 NULL。關(guān)于 EDB中字段流的操作函數(shù)就簡要介紹到這里,讀者可以參考下面的數(shù)據(jù)庫操作綜合 示例獲取更多信息。8 2 數(shù)據(jù)庫操作綜合示例 在上節(jié)中介紹了許多操作數(shù)據(jù)庫的 APl 函數(shù),本節(jié)就應(yīng)用上節(jié)中所介紹的 APl 函數(shù)來 實 現(xiàn)一個小型數(shù)據(jù)庫的示例。這其中涉及到了數(shù)據(jù)庫的創(chuàng)建、打開、數(shù)據(jù)記錄的讀寫、數(shù)據(jù) 記錄 的查找、以及流字段的使用。相信讀者看完本示例,將會對EDB 有更為深入地了解。這個小 型數(shù)據(jù)庫將記錄學(xué)生的一些基本信息,數(shù)據(jù)庫中的字段如表8 10 所示。表 8 10 學(xué)生數(shù)據(jù)表結(jié)構(gòu)字段名稱宇段類型備注學(xué)生編號Char(7學(xué)生姓名Char(2

53、0學(xué)生生日FILETIME屬于日期類型學(xué)生身高Int學(xué)生照片Stream/ 67下面就分步驟詳細(xì)介紹該示例的實現(xiàn)過程。(1 建立新項目。使用 VS2005IVC+智能設(shè)備 IMFC 智能設(shè)備應(yīng)用程序向?qū)?chuàng)建一個基于對話框的應(yīng)用 程 序 EDBUse,編譯環(huán)境設(shè)置為Windows Mobile 6 Professional SDK(ARMV4I,設(shè)備選擇CHSWindows Mobile 6 Classic Emulator,把窗口字體改成宋體小五號。在第 l 節(jié)介紹 EDB 編程時提到過必須首先在預(yù)處理器中定義 EDB 標(biāo)識,因此選擇 VS2005 項目主菜單“項目 IEDB 屬性”打開 ED

54、B項目屬性頁,選擇“配置屬l 生 lc c+1 預(yù)處 理器”,在 預(yù)定義處理器中增加 EDB的定義,如圖 82 所示。圖 8-2 增加 EDB預(yù)處理器定義(2 創(chuàng)建 ClmageST 類,用于顯示學(xué)生照片。 該示例中的學(xué)生照片將支持 BMP、 JPG和 GIF 等系統(tǒng)支持的圖片格式。該步驟將 創(chuàng)建ClmageST 類用于顯示學(xué)生照片。 ClmageST 類繼承于 CStatic ,提供了 LoadlmageFromFile 和LoadlmageFromBuffer 兩個方法,分別用來從文件中加載圖像進(jìn)行顯示和從內(nèi)存緩沖區(qū)中 加載圖像進(jìn)行顯示。 ClmageST類的定義文件如程序清單 82 所示

55、。 + 程 序 清 單 8 2 7- - - - - - -+Copyright(C2008 Eric Wong+ 本版僅供讀者參考,不得用于任何商業(yè)行為文件名稱: ImageST h+文件標(biāo)識:+摘要:繼承 CStatic 控件,用于顯示圖像:* CImageST 提供了從文件中加載圖像和從內(nèi)存中加載圖像兩種方法/ 67* 當(dāng)前版本: 1 0+作者:汪兵 Eric Wong *完成日期: 2008 年 4月 10 日 virtual CImageST(;protected :WM PAINT處理方法,用于繪制圖像afx msg void OnPaint( ;DECLARE MESSAGE伍J

56、 P(public :從文件中加載圖像BOOL LoadImageFromFile(LPCTSTR strFileName 圖像文件名 + j 從內(nèi)存中加載圖像BOOL LoadImageFromBuffer(const DWORD dwBufLen , 緩沖區(qū)長度 const BYTE+pBuffer緩沖區(qū) + ;private : Image 工廠接口對象IImagingFactory m_pImagingFactory ; Image 接口對象IImage+m_pImage ; CImageST類的實現(xiàn)文件如程序清單 8 3 所示。/ 67 + 程 序 清 單 8 37 - - - -

57、- +Copyright(C2008 Eric Won9 *本版僅供讀者參考,不得用于任何商業(yè)行為 文件名稱: ImageST cpp +文件標(biāo)識: +摘要:繼承 CStatic 控件,用于顯示圖像; + CImageST 提供了從文件中加載圖像和從內(nèi)存中加載圖像兩種方法 當(dāng)前版本: 1 0 作者:汪兵 Eric Wong+完成日期: 2008 年 4月 10 日+取代版本:+原作者:+完成日期:#include ” stdafx , h”#include ” initguid h”#include ” ImageST h”IMPLEMENT DYNAMIC(CImageS,T CStatic

58、構(gòu)造函數(shù)CImageST: CImageST( m_pImagingFactory=NULL ; Image 工廠接口對象 m_pImage=NULL ; Image 接口對象HRESULT hr;初始化 COM環(huán)境if(FAILED(hr=CoInitializeEx(NULL ,COINIT MULTITHREADED TRACE(L”COINIT_MULTITHREADED ER”RO;Rreturn ; 得到 Image 工廠接口對象 hr=CoCreateInstance(CLSID ImagingFactory ,NULL ,CLSCTX INPROC SERVER,IID l工

59、magingFactory ,(v oid+ &m p 工 magingFactory ;/ 67析構(gòu)函數(shù)CImageST:一 CImageST(釋放 IImage 接口對象 if(m_pImage(m_pImage 一 Release(jm_pImage 2 NULL ;釋放 IImagingFact 。 ry 接口對象if(m pImagingFactorym_pImagingFactory 一 Release( ; m_pImagingFactory 。 NULL;釋放程序占用的 COM資源CoUninitialize( ;BEGIN MESSAGE MAP(CImageS,TCStat

60、icON WM PAINT(END MESSAGE MAP(IIWM PAINT 繪制圖片void CImageST : 0nPaint(CPaintDC dc(thiS ; device context for painting 定義繪制尺寸RECT rect ;GetClientRect( rect ; if(m pImage/ 67繪制圖片m_pImage 一 Draw(dc m_hDC, &rect , NULL;從文件中加載圖像+圖像文件名 + , &m_pImage;BOOL CImageST: LoadImageFromFile(LPCTSTR strFileName f fHR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論