?? cdatamanage.h
字號:
/*
*Copyright (c)2001,北京恒基偉業
*All rights reserved.
*
*文件名稱:CDataManage.h
*文件標識:見配置管理計劃書
*摘 要:WinCE數據管理模塊類的聲明,主要實現WinCE數據庫通用的
* 數據存儲、讀取、檢索的功能
*
*當前版本:1.1
*作 者:鐘元歡
*完成日期:2002 年 1月11 日
*
*取代版本:1.0
*原 作 者:鐘元歡
*完成日期:2001 年12 月16 日
*/
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SELFCIG_H__A7860CA4_D6A2_492A_B9EB_1A6BE34F22D4__INCLUDED_)
#define AFX_SELFCIG_H__A7860CA4_D6A2_492A_B9EB_1A6BE34F22D4__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CEdbase.h" // Added by ClassView
#include "RetCodeInfo.h"
//設計參數
#define MAX_PROP_NUM 70 //每條記錄的最大字段數
#define MAX_RECORD_NUM 65535 //最大記錄數
//CDataManage支持的字段類型
#define FIELD_TYPE_STR 1 //字符串
#define FIELD_TYPE_LONG 2 //長整型
#define FIELD_TYPE_DOT 3 //兩位小數
#define FIELD_TYPE_DATE 4 //時間型
//匹配方式,用于SeekByPropID中的compType
#define CDM_FIND_SMALLER 1 //小于
#define CDM_FIND_EQU 2 //等于
#define CDM_FIND_GREATER 3 //大于
#define CDM_FIND_NEAR 4 //用于字符數據時為子串匹配,用于時間數據為近似等于(同一天)
#define CDM_FIND_YEAR_MONTH_EQU 5 //判斷年份和月份是否相等
#define CDM_FIND_YEAR_EQU 6 //年份相同
//構成時的初始化數據
struct FieldType {
LPTSTR strVolName; //數據卷名稱
LPTSTR strDBName; //數據庫名稱
WORD wFieldNum; //字段總數
WORD wFieldType[MAX_PROP_NUM]; //字段類型列表
};
//FUNCTION:
// 查找對象中所有匹配的記錄
//PARAMETERS:
// a 對象名: CDataManage類的指針變量名
// b 屬性ID 對象中的某一字段的標識宏
// c 查找內容 查找的內容(可以為CString,長整數,浮點數,CTime變量名)
// f 匹配方式 見CDM_FIND_ 宏
// d 數組名 整型數組變量名,該數組存放查找結果的列表,-1表示列表結尾
// e 最大查找個數 查找符合條件的記錄的最大個數
#define SEARCH_ALL(a, b, c, f, d, e) \
do{ \
WORD wRetCode, i = 0; \
wRetCode = a->Seek(CEDB_SEEK_BEGINNING, 0); \
if(wRetCode == ID_SUCCESSFULLY) \
{ \
wRetCode = a->SeekByPropID(b, c, FALSE, f); \
while(wRetCode == ID_SUCCESSFULLY && i < e) \
{ \
d[i++] = a->GetCurIndex(); \
wRetCode = a->SeekByPropID(b, c, TRUE, f); \
} \
} \
d[i] = -1; \
}while(0)
//在原有查詢結果的基礎上進一步查詢符合條件的記錄
#define SEARCH_CON(a, b, c, f, d) \
do{ \
WORD wRetCode, i = 0, j = 0; \
while(d[i] != -1) \
{ \
wRetCode = a->Seek(CEDB_SEEK_BEGINNING, d[i]); \
if(wRetCode != ID_SUCCESSFULLY) \
{ \
break; \
} \
if(a->CompareVal(b, f, c)) \
{ \
d[j++] = d[i]; \
} \
i++; \
} \
d[j] = -1; \
}while(0)
//CDataManage類聲明
class CDataManage
{
public:
//指定字段與指定的數據是否和指定的條件匹配
BOOL CompareVal(WORD propid, WORD compType, const CTime &tVal);
BOOL CompareVal(WORD propid, WORD compType, FLOAT fVal);
BOOL CompareVal(WORD propid, WORD compType, LONG lVal);
BOOL CompareVal(WORD propid, WORD compType, const CString &strVal);
//數據存儲格式轉換*.cdb <--> *.txt (unicode)
WORD LoadFromCsv(const CString &strFileName);
WORD SaveToCsv(const CString &strFileName);
//初始化數據庫
WORD Init(const struct FieldType &fieldType);
//設置當前記錄指定屬性的內容(字符串/整數/兩位小數/時間)
WORD SetPropData(WORD propid, const CString &strData);
WORD SetPropData(WORD propid, LONG lData);
WORD SetPropData(WORD propid, FLOAT fData);
WORD SetPropData(WORD propid, const CTime &time);
//得到當前記錄指定屬性的內容(字符串/整數/兩位小數/時間)
WORD GetPropData(WORD propid, CString &strData);
WORD GetPropData(WORD propid, LONG *lData);
WORD GetPropData(WORD propid, FLOAT *fData);
WORD GetPropData(WORD propid, CTime &time);
//查找記錄(字符串/整數/兩位小數/時間)
WORD SeekByPropID(WORD propid, const CString &strVal, BOOL bFindNext, WORD compType);
WORD SeekByPropID(WORD propid, LONG lVal, BOOL bFindNext, WORD compType);
WORD SeekByPropID(WORD propid, FLOAT fVal, BOOL bFindNext, WORD compType);
WORD SeekByPropID(WORD propid, const CTime &time, BOOL bFindNext, WORD compType);
//移動記錄指針,并將其設為當前記錄,如果失敗則當前記錄不變
WORD Seek(DWORD dwSeekType, DWORD dwValue);
//新增空記錄追加到數據庫結尾
WORD AddNewRecord(void);
//刪除當前記錄
WORD DelCurRecord(void);
//得到當前記錄總數
DWORD GetCurRecrodNum(void);
//得到當前記錄索引
DWORD GetCurIndex(void);
//得到字段數
WORD GetPropNum(void);
//得到某一字段類型
WORD GetPropType(WORD propid);
//數據顯示是否需要更新
BOOL IsReload(void);
//////////////////////////////////////////////////////////
CDataManage(const struct FieldType &fieldType);
virtual ~CDataManage();
private:
BOOL m_bReloadFlag; //數據更新標志
DWORD m_wNextRecordNum; //下一條新增記錄的內部索引號[0, MAX_RECORD_NUM]
void ClearRamData(void); //清空m_propData記錄緩沖區的數據
WORD RamToDisk(BOOL newFlag); //記錄緩沖區的數據寫入數據庫
WORD DiskToRam(void); //讀取數據到記錄緩沖區
WORD TransferData(BOOL direction); //數據傳送
//屬性ID檢測
////////////////////////////////////////////////////////
CCEdbase m_selfCigdata; //數據庫成員
BOOL m_modifyFlag; //記錄緩沖區被修改標志
////////////////////////////////////////////////////////
WORD m_propNum; //屬性個數
WORD m_propidList[MAX_PROP_NUM]; //記錄屬性列表
CString m_propData[MAX_PROP_NUM]; //記錄內容緩沖區
CString m_volName; //數據卷的名稱
CString m_dbName; //數據庫的名稱
};
#endif // !defined(AFX_SELFCIG_H__A7860CA4_D6A2_492A_B9EB_1A6BE34F22D4__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -