cdbf.h
来自「dbf文件的读写类。它直接对dbf文件进行文件级的操作」· C头文件 代码 · 共 194 行
H
194 行
// DBF.h: interface for the CFDBF class.
// writer: zhang kai jun
// last modify date:1999.05.26
//////////////////////////////////////////////////////////////////////
#ifndef _DBF_H_
#define _DBF_H_
#define MAX_FLD_NUM 50
#define MAX_RECORD_SIZE 400 //2002.12.10 300改为400 add by wjf 深交所为310
#define MAX_FLD_DATALEN 255
#define FILE_EOF_FLAG 0x1A
#define RECORD_BEGIN_FLAG 0x20
#define RECORD_DEL_FLAG 0x2A
#define STRUCT_EOF_FLAG 0x0D
#define BASE_LOCK_OFFSET 0x40000000L
#define LOCK_FILE_LEN 0x3FFFFFFFL
#define FILE_HEAD_LEN 32
#define DBF_SUCCESS 0
#define DBF_FAIL -1
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/locking.h>
#include <share.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
struct FIELD_INFO
{
char name[20];
char type;
int offset;
char width;
char dec_d;
};
struct RECORD_INFO
{
unsigned long rec_num;
unsigned short rec_size;
unsigned short fld_num;
char rec_data[MAX_RECORD_SIZE];
};
struct DBF_HEAD
{
char fileFlag;
char lastDate[3];
unsigned long recNum;
unsigned short structSize;
unsigned short recSize;
char other[20];
};
struct DBF_FIELD_INFO
{
char fieldName[10];
char standby;
char type;
unsigned long beginOffset;
char width;
char decWidth;
char other[14];
};
class CFDBF
{
protected:
FIELD_INFO fld_info[MAX_FLD_NUM];
RECORD_INFO recInfo;
unsigned long m_nRecBeginOffset;
unsigned short m_nStructSize;
unsigned char f_date[4];
int _dbfhandle;
bool _open;
unsigned long m_nCurrOffset;
unsigned long m_nCurrRecNo;
char errMessage[100];
int m_CurrLockType;
char m_FileName[256];
int m_OpenType;
int m_LockType;
public:
enum OpenType
{
_ReadOnly = O_RDONLY,
_ReadWrite = O_RDWR
};
enum LockType
{
_AutoLock = 0,
_NoLock = 1
};
protected:
int LockRecord();
int UnlockRecord();
int LockHead();
int UnlockHead();
int LockFile();
int UnlockFile();
int ModifyFileDate();
int Space(char *p);
void Ltrim(char *s);
void Rtrim(char *s);
void Alltrim(char *s);
int ReOpen();
int FindFld(const char *fldName);
int GoTo(long recNo);
char m_HeadLockType;
//create dbf use
DBF_FIELD_INFO *m_pField[255];
int m_FieldNum;
void ClearFieldInfo();
public:
CFDBF();
virtual ~CFDBF();
int Open(const char *filename, int opentype, int lockType);
char *GetErrorMsg();
char *GetFileName();
void Close();
bool IsDelete();
int Zap();
bool IsEof();
bool IsBof();
int GetRecordNum();//取得记录的总数
long GetCurrentRecNo(void);//取得当前的记录序号
int GetRecordSize(void);//取得一条记录的大小
int ReadRecord(void);//读取当前记录的内容到内部缓冲区
int ReadRecord(long recNo);//读取指定记录号的记录到内部缓冲区
int GetFldValue(const char *fldName,char *fldValue);
int GetFldValue(const char *fldName,char &fldValue);
int GetFldValue(const char *fldName,double &fldValue);
int GetFldValue(const char *fldName,int &fldValue);
int GetFldValue(const char *fldName,long &fldValue);
int UpdateFldValue(const char *, const char *);
int UpdateFldValue(const char *, int);
int UpdateFldValue(const char *, unsigned int);
int UpdateFldValue(const char *, long);
int UpdateFldValue(const char *, unsigned long);
int UpdateFldValue(const char *, double);
int ReplaceRecord(long recNo,char*);
int UpdateRecord();
long AddNewEmptyRecord();
int FillFldValue(const char *, const char *);
int FillFldValue(const char *, int);
int FillFldValue(const char *, char);
int FillFldValue(const char *, unsigned int);
int FillFldValue(const char *, long);
int FillFldValue(const char *, unsigned long);
int FillFldValue(const char *, double);
int UpdateNewRecord();
int AddField(const char *fieldName, char type, unsigned short width, unsigned short decWidth);
int Create(const char *fileName);
int MoveFirst();
int MoveNext();
int MoveLast();
int FindRecord(const char *fldName, const char *fldValue);
int DeleteRecord(long recNo);
int UnDeleteRecord(long recNo);
int GetColNum();
const FIELD_INFO * GetColInfo(int colNo);
};
#endif // !defined(AFX_DBF_H__6715E1B4_DB79_11D2_9193_00C0DFA002E9__INCLUDED_)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?