WinCE內嵌數據庫使用---小問題

用WinCE內嵌的數據庫做個存儲短信的程序,犯了許多錯誤,

 

小記下:

 

1:定義屬性

#define pidPhoneNo MAKELONG(CEVT_LPWSTR,2)

或者

const CEPROPID pidPhoneNo = MAKELONG(CEVT_LPWSTR,2);

 

2:創建數據庫

CEDBASEINFO結構體的wNumSortOrder最大爲4

 

windbase.h 頭文件中

#define __CEDB_MAXSORTORDER 4

CEDBASEINFO結構中wNumSortOrder定義

WORD     wNumSortOrder;     //@field Number of sort orders active in the database

                                // Maximum is CEDB_MAXSORTORDER.

 

個人理解是需要進行排序的屬性數,最多4個屬性進行排序,不是指一個記錄只能有4個屬性

個人程序中只用一個屬性進行排序,其他屬性不排序,貌似不超過最大屬性字節限制,可以任意多個屬性。

ceDBinfo.rgSortSpecs[0].propid=pidTime;

ceDBinfo.rgSortSpecs[0].dwFlags=CEDB_SORT_DESCENDING|CEDB_SORT_CASEINSENSITIVE; //降序,忽略大小寫

 

3:輸出記錄時屬性的輸出次序

CEOID ceOid;

WORD wProps;

DWORD dwRecSize;

PBYTE pBuff =0;

PCEPROPVAL pRecord;

ceOid = CeSeekDatabase(m_hDB,CEDB_SEEK_BEGINNING,k,NULL);

ceOid = CeReadRecordProps(m_hDB,CEDB_ALLOWREALLOC,&wProps,NULL,&(LPBYTE)pBuff,&dwRecSize);

pRecord=(PCEPROPVAL)pBuff;

for(int i=0;i<wProps;i++)

{

//以本人程序例子,wProps=4,4個屬性 輸出的順序與寫入註冊表時一樣

//如果某條記錄寫入的時候是:姓名、號碼、內容、時間,則輸出這條記錄的時候是:姓名、號碼、內容、時間

//如果某條記錄寫入的時候是:時間、號碼、姓名、內容,則輸出這條記錄的時候是:時間、號碼、姓名、內容

//在同一個數據庫中,可以混着用任意順序

}

 

4:返回數據庫記錄數

CEOIDINFO oidInfo;

if (!CeOidGetInfoEx(&m_ceGuid,m_ceOid,&oidInfo))

{

TRACE(_T("獲取數據庫記錄數失敗 err/n"));

}

現在看多麼順利的一句話,因爲在if那句後面多寫了個分號,折騰了小一天,悲催!

 

5:記錄中屬性的數據類型

所有屬性均用

CEVT_LPWSTR類型

程序中用CString

存儲的時候轉化:例 內容屬性

TCHAR content[256];

lstrcpy(content,sm.szContent);//szContent是CString類型

pProps->val.lpwstr=content;

輸出時轉爲CString:pSM->szContent=pRecord->val.lpwstr;

 

發佈了47 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章