⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdatamanage.h

📁 在WinCe平台上开发的数据库管理程序,里面有一个可排序列表控件的实现和Excel的CVS文件的读写类
💻 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 + -