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

📄 database.h

📁 一个微型的数据库系统
💻 H
字号:
#ifndef   _DATABASE_H
#define   _DATABASE_H

#define DEBUG_DATABASE	1

// 返回值定义
#define _DB_CORRECT        1		// 操作正确
#define _DB_NAME_ERROR     -1		// 数据库文件名错误
#define _DB_INIT_ERROR     -2		// 数据库初始化错误
#define _DB_ID_ERROR       -3		// 数据库ID错误
#define _REC_NO_ERROR      -5		// 记录号错误
#define _KEY_ID_ERROR      -6		// 关键字ID错误
#define _DB_EMPTY          -7		// 数据库为空
#define _DB_NOT_FOUND      -11		// 记录没有找到
#define _DB_FIELD_ID_ERROR -12		// 字段ID错误
#define _DB_ELSE_ERROR     -13		// 其它错误
#define _DB_TOO_MUCH       -14		// 打开的数据库太多
#define _DB_MEMORY		   -15		// 内存空间不足

#define _FS_ERROR          -13		// 文件系统错误

// 起始位置
#define _DB_SET				0		// 从第一条记录开始
#define _DB_END				1		// 从最后一条记录开始
#define _DB_CUR				2		// 从当前记录开始,内部使用

#define _DB_FALSE			0		// 操作失败
#define _DB_OK				1		// 操作成功

#define _DB_FIELD_MAX		128		// 最大字段数
#define _DB_DBD_MAX			32		// 最大数据库文件数

#define DB_REC_NORMAL		0x7e	// 正常记录
#define DB_REC_DELETE		0x3c	// 已删除记录
#define DB_REC_REMOVE		0x3a	// 已移去记录  // by zhangxp  2003/07/02

                                                   
// by zhangxp  2003/07/02
#define SYNCATTR_NEW        0xff    // 新增记录
#define SYNCATTR_SYNCED     0xfe    // 已同步记录
#define SYNCATTR_MODI       0xfc    // 已同步后,以被修改记录
#define SYNCATTR_DEL        0xf8    // 同步后被删除


// 字段类型
enum {
	TY_CHAR=1,	// 字符型
	TY_SHORT,	// 短整型
	TY_INT,		// 整型
	TY_LONG,	// 长整型

	TY_UCHAR,	// 无符号字符型
	TY_USHORT,	// 无符号短整型
	TY_UINT,	// 无符号整型
	TY_ULONG,	// 无符号长整型

	TY_FLOAT,	// 符点型
	TY_DOUBLE,	// 双精度型
	TY_LONG_FLOAT,//from db_create.h
	TY_LONG_DOUBLE,//from db_create.h
	TY_VARBYTE=14,//0x0E---
	TY_VARCHAR=15, //0x0B//0x0F--不定长字符串myh2002-08-19

	TY_END		// 结束标志
};

// by zhangxp  2003/07/02                     
typedef struct tagRecordHead
{
    unsigned int		SyncID  ;			//同步ID
    unsigned char		SyncAttr;			//同步属性
	unsigned char		Mark;			    //加密

}TRecordHead;


// 数据库文件头结构
typedef struct tagHead
{
    unsigned short flag;	// 标志符
    unsigned short version;	// 版本信息
    int   recordSize;		// 记录长度
    int   fieldNum;			// 字段数
	char  reserve[20];		// 保留
} DB_Head;

// 字段定义结构
typedef struct tagField
{
	unsigned short type;	// 字段类型
	unsigned short offset;	// 字段位置
    unsigned short size;	// 字段长度
	unsigned short other;   // 保留信息
} DB_Field;


// 数据库结构
typedef struct tagDatabase
{
    int  hFile;					// 数据库文件句柄

	//myh 2002-08-19
	int		bexist;				//if exist the .mem file
	int		hmem;				//.mem file handle

	DB_Field *pField;			// 字段信息
	unsigned char *pRecord;		// 存储缓冲区
	unsigned char *pDelete;		// 删除标记缓冲区

    int  curRecord;				// 当前记录
	int  curPosition;			// 当前记录的物理记录号

    int  recordNum;				// 有效记录数
	int  recordTotal;			// 物理记录数
	int  recordSize;			// 每条记录长度
	int	 fieldNum;				// 字段数
    int  offset;				// 数据区开始位置
	int  error;					// 最后一次错误信息
} DB_Database;

#define PACK_BUF_SIZE	(1024*32)	// 数据库整理时所用的缓冲区大小
#define PACK_REC_NUM	(PACK_BUF_SIZE/(gDatabase[databaseID].Head->recordSize)	// 缓冲区中的记录数

// 基本操作
/* 初始化数据库系统 成功时返回_DB_OK,失败时返回_DB_FALSE */
DLL_EXP(int) db_initDatabaseSys(void);

/* 打开一个数据库文件 成功时返回数据库ID dbdPath和dbfPath无效 */
DLL_EXP(int) db_open(char * dbdFileName, char *dbdPath, char * dbfPath);

/* 关闭一个数据库文件 */
DLL_EXP(int) db_close(int databaseID);

// 取得数据库操作的最后一次错误号码
DLL_EXP(int) db_getLastError(int databaseID,int *errorCode);

// 整理数据库,清除置删除标记的记录
//DLL_EXP(int) db_pack(int databaseID);

// 取得指定数据库的总有效记录数量,
DLL_EXP(int) db_getRecordNumber(int databaseID,int *num);

// 取得指定数据库的总记录数量,包括删除记录
DLL_EXP(int) db_getRecordTotal(int databaseID,int *num);

/* 按记录号操作的函数 */
// 将第n条记录设置为当前记录
int _db_recSet(int databaseID,int nth,int type);
DLL_EXP(int) db_recSet(int databaseID,int nth,int type);

// 获取当前记录的记录号
DLL_EXP(int) db_recGet(int databaseID,int *n);

// 将缓冲区中的数据写进当前记录
int _db_recWrite(int databaseID);

// 将当前记录置上删除标记
int _db_recDelete(int databaseID);

/* 往数据库中增加一条记录 recordID无效 */
DLL_EXP(int) db_addRecord(int databaseID, unsigned long recordID,void * buffer);

/* 读第n条记录 recordID无效 */
DLL_EXP(int) db_readNthRecord(int databaseID, unsigned long recordID, void * buffer,int nth, int type);

/* 写第n条记录 recordID无效 */
DLL_EXP(int) db_writeNthRecord(int databaseID, unsigned long recordID, void * buffer,int nth, int type);

/* 删除第n条记录 recordID无效 */
DLL_EXP(int) db_deleteNthRecord(int databaseID, unsigned long recordID,	int nth, int type);


// 当前记录操作
// 指针移到第一条记录
DLL_EXP(int) db_recFirst(int databaseID);

// 指针移到最后一条记录
DLL_EXP(int) db_recLast(int databaseID);

// 指针移到下一条记录
DLL_EXP(int) db_recNext(int databaseID);

// 指针移到前一条记录
DLL_EXP(int) db_recPrev(int databaseID);

// 读取当前记录内容
DLL_EXP(int) db_recRead(int databaseID,void *buffer);

// 写入当前记录内容
DLL_EXP(int) db_recWrite(int databaseID,void *buffer);

// 删除当前记录
DLL_EXP(int) db_recDelete(int databaseID);


// 按关键字排序操作记录
// 读第n条记录
//DLL_EXP(int) db_readNthRecordByKey(int databaseID,unsigned long keyID,void *buffer,int nth,int type);

// 写第n条记录
//DLL_EXP(int) db_writeNthRecordByKey(int databaseID,unsigned long keyID,void *buffer,int nth,int type);

// 删除第n条记录
//DLL_EXP(int) db_deleteNthRecordByKey(int databaseID,unsigned long keyID,int nth,int type);

// 根据关键字查找记录
//DLL_EXP(int) db_findRecordByKey(int databaseID, unsigned long keyID, void *keyValue, void *buffer);

// 查找与指定关键字内容相同的第n条记录
DLL_EXP(int) db_findNthRecordByKey(int databaseID,unsigned long keyID,int nth,void *keyValue, void *buffer);

DLL_EXP(int) db_getHeadSize(char *dbdFileName);
DLL_EXP(int) db_getHeader(char *dbdFileName, unsigned char *buffer);
DLL_EXP(int) db_pack(char *dbName);
// 取得与指定关键内容相同的记录数量
//DLL_EXP(int) db_getRecordNumberWithGivenKey(int databaseID,unsigned long keyID,int *num,void *keyValue);


/*====================================================================
// 新定义的API接口
#define DB_InitDatabase									db_initDatabaseSys
#define DB_Open(dbdFileName)							db_open(dbdFileName,0, 0)
#define DB_Close(databaseID)							db_open(databaseID)
#define DB_Pack											db_pack
#define DB_GetRecordNumber								db_getRecordNumber

#define DB_AddRecord(databaseID,buffer)					db_addRecord(databaseID,0,buffer,nth,type)
#define DB_ReadNthRecord(databaseID,buffer,nth,type)	db_readNthRecord(databaseID,0,buffer,nth,type)
#define DB_WriteNthRecord(databaseID,buffer,nth,type)	db_writeNthRecord(databaseID,0,buffer,nth,type)
#define DB_DeleteNthRecord(databaseID,nth,type)			db_deleteNthRecord(databaseID,0,nth,type)

#define DB_RecRead						db_recRead
#define DB_RecWrite						db_recWrite
#define DB_RecDelete					db_recDelete
#define DB_RecFirst						db_recFirst
#define DB_RecLast						db_recLast
#define DB_RecNext						db_recNext
#define DB_RecPrev						db_recPrev
#define DB_RecGetNo						db_recGetNo

#define DB_FindRecordByKey				db_findRecordByKey
#define DB_FindNthRecordByKey			db_findNthRecordByKey
#define DB_GetRecordCountWithGivenKey	db_getRecordNumberWithGivenKey

#define DB_ReadNthRecordByKey			db_readNthRecordByKey
#define DB_WriteNthRecordByKey			db_writeNthRecordByKey
#define DB_DeleteNthRecordByKey			db_deleteNthRecordByKey
//================================================================== */
#endif
/*-------------------------------------------------------------------
	数据库文件结构说明
文件头:32Bytes
	00-01:	unsigned short		数据库标志符,目前为:1228H
	02-03:	unsigned short		版本标志,目前版本为: 0101H
	04-07:	int					记录长度,包括删除标记
	08-0B:	int					字段数
	0C-1F:	char				保留

字段说明:	8*字段数 Bytes
	0-1:	字段类型
	2-3:	字段位置
	4-5:	字段长度
	6-7:	保留信息

说明区结束标志:	1Byte
	7EH		与记录有效标志相同

数据区:
	第条记录的结尾为删除标记
--------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -