📄 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 + -