dbfile.h
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C头文件 代码 · 共 440 行
H
440 行
/* dbase 数据库 */
#if !defined _DBFILE_H
#define _DBFILE_H
#define DISPFIELDWIDTH 16 // 数据库每个字段显示的宽度(数据库定义每个字段为 11Byte)
typedef struct // 数据库文件头 (32 Byte)
{
BYTE FileFlag; // 0 dbase数据库=03
BYTE Year; // 1
BYTE Month; // 2
BYTE Day; // 3
DWORD RecordNum; // 4 记录个数
WORD HeaderLen; // 8 文件头长度
WORD RecordLen; // 10 每个记录长度
BYTE Reserved[20];
} DBFILEHEAD;
typedef struct // 字段定义 (32 Byte)
{
char FieldName[11]; // 字段名
BYTE FieldType; // 字段类型 'C','N','B','D'
DWORD FieldOffset; // 字段在记录中的偏移位置
BYTE FieldWidth; // 字段宽度
BYTE DecimalPoint; // 小数位数
BYTE Reserved[14];
} DBFIELD;
//----------------------------------------------------
// 站索引
typedef struct {
WORD YxStart;
WORD YcStart;
WORD KwhStart;
WORD EvidentNum;
} RTUINDEX;
typedef struct {
} PYXPARAM;
typedef struct {
} PYCPARAM;
typedef struct {
} PDDPARAM;
// 遥测线性变换参数
typedef struct {
DWORD x1,x2,y1,y2;
} YCLINECOE;
//-----------------------------------------------------------
class TDbFileHead
{
protected:
DBFILEHEAD DbFileHead;
public:
DBFILEHEAD *GetDbFileHead() { return (DBFILEHEAD *)&DbFileHead; }
BYTE GetFileFlag() { return DbFileHead.FileFlag; }
BYTE GetFileYear() { return DbFileHead.Year; }
BYTE GetFileMonth() { return DbFileHead.Month; }
BYTE GetFileDay() { return DbFileHead.Day; }
DWORD GetRecordNum() { return DbFileHead.RecordNum; }
WORD GetHeaderLen() { return DbFileHead.HeaderLen; }
WORD GetRecordLen() { return DbFileHead.RecordLen; }
WORD GetFieldNum() { return (DbFileHead.HeaderLen-sizeof(DBFILEHEAD))/sizeof(DBFIELD); }
};
class TDbField
{
protected:
DBFIELD DbField;
public:
DBFIELD *GetDbField() { return (DBFIELD *)&DbField; }
char *GetFieldName() { return DbField.FieldName; }
BYTE GetFieldType() { return DbField.FieldType; }
DWORD GetFieldOffset() { return DbField.FieldOffset; }
WORD GetFieldWidth() { return DbField.FieldWidth; }
WORD GetDecimalPoint() { return DbField.DecimalPoint; }
};
class TDbFile : public TDbFileHead,public TDbField
{
HFILE hFile;
char DbName[40];
public:
TDbFile(char *Name);
~TDbFile();
int dbOpenFile();
int dbCloseFile();
void dbSetDbName(char *Name);
int dbGetARcd(long lRcdNo,LPSTR RcdBuf);
int dbGetARcdStr(long lRcdNo,LPSTR RcdStringBuf);
};
//-----------------------------------------------------------------------
// 实时数据库类定义
//_CLASSDEF(TRealDB)
class TRealDB
{
// char DbName[40];
char huge *lpDbf;
DBFILEHEAD huge *dbfhead;
DBFIELD huge *dbfield;
char huge *dbrecord;
int FieldNum;
int dbno;
BOOL dbGetAField(char *FieldName, DBFIELD *DBField);
public:
TRealDB(char *Name);
TRealDB(int DbNo);
~TRealDB();
long dbGetRcdNum();
BOOL dbGetFileHead(DBFILEHEAD huge *);
void dbGetStrField(DWORD rcdno, int fieldID, char *str);
void dbGetStrField(DWORD rcdno, char *fieldname, char *str);
char dbGetCharField(DWORD rcdno, int fieldID);
char dbGetCharField(DWORD rcdno, char * fieldname);
float dbGetNumField(DWORD rcdno, int fieldID);
float dbGetNumField(DWORD rcdno, char * fieldname);
int dbGetIntField(DWORD rcdno, int fieldID);
int dbGetIntField(DWORD rcdno, char * fieldname);
long dbGetLongField(DWORD rcdno, int fieldID);
long dbGetLongField(DWORD rcdno, char *fieldname);
void dbSetCharField(DWORD rcdno, int fieldID, char cvalue);
void dbSetCharField(DWORD rcdno, char *fieldname, char cvalue);
void dbSetNumField(DWORD rcdno, int fieldID, float nvalue);
void dbSetNumField(DWORD rcdno, char *fieldname, float nvalue);
void dbSetIntField(DWORD rcdno, int fieldID, int ivalue);
void dbSetIntField(DWORD rcdno, char *fieldname, int ivalue);
void dbSetLongField(DWORD rcdno, int fieldID, long lvalue);
void dbSetLongField(DWORD rcdno, char *fieldname, long lvalue);
};
class TRtuDB : public TRealDB
{
public:
RTUINDEX huge *lpRtuInx;
TRtuDB();
~TRtuDB();
void GetStaName(WORD stano, char *staname);
int GetStaYxNum(WORD stano);
int GetStaYcNum(WORD stano);
int GetStaKwhNum(WORD stano);
int GetStaYxStart(WORD stano);
int GetStaYcStart(WORD stano);
int GetStaKwhStart(WORD stano);
void SetEvidentTimer(WORD stano, int SecondNum);
int GetEvidentTimer(WORD stano);
void DecEvidentTimer(WORD stano);
};
class CALC : public TRealDB
{
public:
RTUINDEX huge *zflpRtuInx;
CALC();
~CALC();
int GetSStation(WORD Record,BYTE SymNo);
int GetDStation(WORD Record,BYTE SymNo);
BYTE GetSymbol(WORD Record,BYTE SymNo);
int GetSOrder(WORD Record,BYTE SymNo);
int GetDOrder(WORD Record,BYTE SymNo);
};
class ZFDB : public TRealDB
{
public:
RTUINDEX huge *zflpRtuInx;
ZFDB();
~ZFDB();
WORD GetStation(WORD stano);
int GetStaYxNum(WORD stano);
int GetStaYcNum(WORD stano);
int GetStaKwhNum(WORD stano);
int GetStaYxStart(WORD stano);
int GetStaYcStart(WORD stano);
int GetStaKwhStart(WORD stano);
};
class ZFYxDB: public TRealDB
{
public:
ZFYxDB();
~ZFYxDB();
int GetStation(WORD stano, WORD ycno);
int GetOrder(WORD stano, WORD ycno);
};
class ZFYcDB: public TRealDB
{
public:
ZFYcDB();
~ZFYcDB();
int GetStation(WORD stano, WORD ycno);
int GetOrder(WORD stano, WORD ycno);
};
class ZFKwhDB: public TRealDB
{
public:
ZFKwhDB();
~ZFKwhDB();
int GetStation(WORD stano, WORD ycno);
int GetOrder(WORD stano, WORD ycno);
};
class TYxDB : public TRealDB
{
void CreateSoe(WORD stano, WORD yxno, BYTE yxtype, BYTE yxv);
public:
TYxDB();
~TYxDB();
int GetStation(WORD stano, WORD yxno);
int GetOrder(WORD stano, WORD yxno);
void GetYxName(WORD stano, WORD yxno, char *yxname);
DWORD GetYxAttr(WORD stano, WORD yxno);
BYTE GetYxType(WORD stano, WORD yxno);
BYTE GetYxValue(WORD stano, WORD ycno);
void SetYxAttr(WORD stano, WORD yxno, DWORD attr);
void SetYxValue(WORD stano, WORD yxno, BYTE value);
void SetYxValue(WORD stano, WORD startyx, BYTE yxvalue, BYTE yxmask);
};
class TYcDB : public TRealDB
{
public:
TYcDB();
~TYcDB();
int GetStation(WORD stano, WORD ycno);
int GetOrder(WORD stano, WORD ycno);
void GetYcName(WORD stano, WORD ycno, char *ycname);
DWORD GetYcAttr(WORD stano, WORD ycno);
int GetYcValue(WORD stano, WORD ycno);
BYTE GetYcPoint(WORD stano, WORD ycno);
void GetYcLineCoe(WORD stano, WORD ycno, YCLINECOE *yclinear);
void SetYcAttr(WORD stano, WORD ycno, DWORD attr);
void SetYcValue(WORD stano, WORD ycno, WORD ycvalue);
void SetYcPoint(WORD stano, WORD ycno, BYTE ycpoint);
};
class TKwhDB : public TRealDB
{
public:
TKwhDB();
~TKwhDB();
int GetStation(WORD stano, WORD kwhno);
int GetOrder(WORD stano, WORD kwhno);
void GetKwhName(WORD stano, WORD kwhno, char *kwhname);
DWORD GetKwhAttr(WORD stano, WORD kwhno);
DWORD GetKwhValue(WORD stano, WORD kwhno);
BYTE GetKwhPoint(WORD stano, WORD kwhno);
void SetKwhAttr(WORD stano, WORD kwhno, DWORD attr);
void SetKwhValue(WORD stano, WORD kwhno, DWORD kwhvalue);
void SetKwhPoint(WORD stano, WORD kwhno, BYTE kwhpoint);
};
//-----------------------------------------------------------------------
// 事项类定义
/*
typedef struct
{
BYTE EventType;
BYTE EventAttr;
WORD Station;
WORD Order;
BYTE Status;
WORD Year;
BYTE Mon;
BYTE Day;
BYTE Hour;
BYTE Min;
BYTE Sec;
WORD Ms;
} EVENT;
*/
typedef struct
{
BYTE EventAttr;
BYTE EventType;
BYTE Station;
WORD Order;
BYTE Status;
BYTE Hour;
BYTE Min;
BYTE Sec;
WORD Ms;
BYTE data[5];
// WORD Year;
// BYTE Mon;
// BYTE Day;
// BYTE Rsv;
} EVENT;
class TEventDB
{
EVENT huge *lpEvent;
static BOOL UsedFlag[EVEHANDLEMAXNUM];
static BYTE EventRP[EVEHANDLEMAXNUM];
static BYTE EventWP;
public:
TEventDB();
~TEventDB();
void InitRWPointer();
WORD GetReadHandle();
void FreeReadHandle(WORD hdl);
void WriteAEvent(EVENT *event);
BOOL ReadAEvent(WORD heve, EVENT *event);
void huge * GetEventBuf(void);
BYTE GetEventWP();
};
//-----------------------------------------------------------------------
// 命令类定义
typedef struct
{
BYTE DestType;
BYTE DestName;
BYTE SourceType;
BYTE SourceName;
BYTE CmdType;
BYTE SubCmdType;
BYTE CmdContent[22];
BYTE XBFXDATA[512];
WORD DataLen;
WORD DataPt;
} COMMAND;
class TCommandDB
{
COMMAND huge *lpRecCmd;
COMMAND huge *lpSendCmd;
/*
BYTE far *lpNetDatar;
BYTE far *lpNetDataw;
COMMAND far *lpNetCmdr;
COMMAND far *lpNetCmdw
*/
BYTE huge *lpRecData;
BYTE huge *lpSendData;
static BOOL UsedFlag[CMDHANDLEMAXNUM];
static BYTE RecCmdRP[CMDHANDLEMAXNUM];
static BYTE RecCmdWP;
static BYTE SendCmdRP[CMDHANDLEMAXNUM];
static BYTE SendCmdWP;
BYTE RecDataRP;
static BYTE RecDataWP;
BYTE SendDataRP;
static BYTE SendDataWP;
public:
TCommandDB();
~TCommandDB();
void InitRWPointer();
WORD GetReadHandle();
void FreeReadHandle(WORD hdl);
//
void WriteACmdToSend(COMMAND *cmd, char *cmddatap);
void WriteACmdToRec(COMMAND *cmd, char *cmddatap);
BOOL ReadACmdFromRec(WORD hcmd,COMMAND *cmd, char *cmddatap);
BOOL ReadACmdFromSend(WORD hcmd, COMMAND *cmd, char *cmddatap);
void huge * GetNetReadDataBuf(void);
void huge * GetNetWriteDataBuf(void);
void huge * GetNetCmdReadBuf(void);
void huge * GetNetCmdWriteBuf(void);
void huge * GetRecCmdBuf(void);
void huge * GetRecDataBuf(void);
BYTE GetRecCmdWP();
void huge * GetSendCmdBuf(void);
void huge * GetSendDataBuf(void);
BYTE GetSendCmdWP();
};
//----------------------------------------------------
// 用发送消息的方式存取实时数据库,消息类型的定义
typedef struct {
BOOL RetFlag; // 返回消息正确与否标志 F:错误 / T:正确
BYTE Bak;
WORD MsgType; // 消息类型
WORD DbNo; // 数据库号
WORD MsgDataLen; // 消息数据长度(字节数)
char Reserved[8];
char huge *ptr1;
char MsgData[RDBMSGDATAMAXLEN-16-sizeof(char huge *)];
} RDBMESSAGE;
extern int LoadAllDBFile(void);
extern int FreeAllDBFile(void);
extern void FAR PASCAL GetName(WORD dbn, WORD stano, WORD ord, char *name);
extern WORD FAR PASCAL GetRcdNum(WORD dbn, WORD stano);
extern DWORD FAR PASCAL GetValue(WORD dbn, WORD stano, WORD ord);
extern BOOL FAR PASCAL GetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void huge *vbuf);
extern DWORD FAR PASCAL GetAttr(WORD dbn, WORD stano, WORD ord);
extern BYTE FAR PASCAL GetPoint(WORD dbn, WORD stano, WORD ord);
extern WORD FAR PASCAL GetType(WORD dbn, WORD stano, WORD ord);
extern WORD FAR PASCAL GetTimerValue(WORD dbn, WORD stano);
extern WORD FAR PASCAL GetReadHandle(WORD dbn);
extern BOOL FAR PASCAL FreeReadHandle(WORD dbn, WORD hdl);
extern char huge *FAR PASCAL GetBuffer(WORD dbn, BYTE tp);
extern WORD FAR PASCAL GetWritePtr(WORD dbn, BYTE tp);
extern BOOL FAR PASCAL ReadAEvent(WORD dbn, WORD hdl, EVENT *eve);
extern BOOL FAR PASCAL ReadACommand(WORD dbn, WORD hdl, BYTE tp, COMMAND *cmd, char *cmddata);
extern void FAR PASCAL WriteAEvent(WORD dbn, EVENT *eve);
extern void FAR PASCAL WriteACommand(WORD dbn, BYTE tp, COMMAND *cmd, char *cmddata);
extern void FAR PASCAL SetTimerValue(WORD dbn, WORD stano, WORD timer);
extern void FAR PASCAL SetPoint(WORD dbn, WORD stano, WORD ord, BYTE pnt);
extern void FAR PASCAL SetAttr(WORD dbn, WORD stano, WORD ord, DWORD attr);
extern void FAR PASCAL SetValue(WORD dbn, WORD stano, WORD ord, DWORD val);
extern void FAR PASCAL SetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void huge *vbuf);
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?