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