Files
envi-code/SourceCode/Code2026/tg_shs/inc/dbf/DbfTools.h
T
2026-09-28 15:28:50 +08:00

195 lines
4.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __DBF_TOOLS_H
#define __DBF_TOOLS_H
#include "DBFRecordset.h "
//////////////////////////////////////////////////////////////////////////////
// sg modify 090922,整体修改了DbfTool.h、DbfTool.cpp文件
// 用新的头文件、库文件,替换掉CODE_BASE
//////////////////////////////////////////////////////////////////////////////
#define CMP_SENSITIVE 0
#define CMP_INSENSITIVE 1
#define CMP_MATCH 2
void xh1cpy(char *to, const char *src);
class DbfTable;
// 表列信息(DBFField:name、type、len、dec)
class TDBFUTILITY_IMPEXP FieldInfo: public DBFField
{
public:
FieldInfo(const TCHAR *n = NULL, int t = 0, int l = 0, int d = 0);
FieldInfo(const FieldInfo &src) {
InitClear();
*this = src;
}
~FieldInfo() {}
FieldInfo & operator= (const FieldInfo &src);
void InitClear();
int operator !() { return m_strName.IsEmpty(); }
static void ReleaseArray(FieldInfo *p);
};
// 单元格,结构+内容
// 移植后,该类的部分内容,找不到完全对应的接口;不推荐使用
class TDBFUTILITY_IMPEXP FieldContent: public FIELD_REC
{
private:
static CString csValue;
public:
FieldContent() {}
// 数据类型
TCHAR GetFieldType() const;
operator int () const;
operator float () const; // Add on 2002/9/20
operator double () const;
operator const TCHAR * () const;
FieldContent & operator = (int i);
FieldContent & operator = (double d);
FieldContent & operator = (const TCHAR *str);
int CompareTo(const FieldContent &otherOne) const;
#ifdef __AFXDISP_H__
COleVariant AsVariant() const;
FieldContent & operator = (const COleVariant &src);
#endif
};
// 数据库
class TDBFUTILITY_IMPEXP CodeBase
{
public:
CodeBase();
~CodeBase();
DbfTable *Open(const TCHAR *szFile);
DbfTable *Create(const TCHAR *szFile, const FieldInfo *pFieldArray,
int nCount); // sg modify 090927,增加了数组长度的参数
public:
DbfTable* m_pDbfTable; // sg add 090922,数据表指针
int read_only; // sg add 091013,是否只读
};
// 数据表
class TDBFUTILITY_IMPEXP DbfTable: public CDBFRecordset
{
public:
DbfTable() : m_bIsAdd(false) {}
// 列数
int GetFieldNum();
// 获取列信息集合,调用FieldInfo::ReleaseArray释放
FieldInfo* GetFieldInfo();
// 获取指定列,n=0,1,2,......
FieldContent* GetFieldContent(int n);
FieldContent* GetFieldContent(const TCHAR *szFieldName);
// 记录数,bSkipDeleted控制是否计算被删除的记录
long GetRecordCount(int bSkipDeleted);
long GetPosition();
// 判断记录是否被delete
BOOL IsDeleted();
BOOL IsEOF();
BOOL IsBOF();
BOOL operator !() {
return (IsEOF() || IsBOF());
}
// 增加记录,成对使用,中间设置单元格内容
void AppendBegin();
void AppendEnd();
// 首先增加EDIT标记,然后更新记录
BOOL Pack();
void Close();
void Delete();
// 未实现,无法找到对应的移植方法。应用层也未使用
void Recall() {}
// Iteration
BOOL MoveFirst(int bSkipDeleted = 1);
BOOL MoveLast(int bSkipDeleted = 1);
BOOL MoveNext(int bSkipDeleted = 1);
BOOL MovePrev(int bSkipDeleted = 1);
// nRecNo=0,1,2,......
BOOL MoveTo(long nRecNo);
BOOL MoveTo(const TCHAR *szKey, const TCHAR *szValue,
int nMethod = CMP_SENSITIVE, int bSkipDeleted = 1);
BOOL MoveFirst(const TCHAR *szKey, const TCHAR *szValue,
int nMethod = CMP_SENSITIVE, int bSkipDeleted = 1);
BOOL MoveNext(const TCHAR *szKey, const TCHAR *szValue,
int nMethod = CMP_SENSITIVE, int bSkipDeleted = 1);
void Move(long offset, int bSkipDeleted = 1);
void EditMode();
void EditUpdate();
private:
bool m_bIsAdd; // 插入标记
};
#define GET_FIELD(table, fname, fvalue) (table)->GetFieldValue(fname, fvalue)
#define SET_FIELD(table, fname, fvalue)\
(table)->EditMode();\
(table)->SetFieldValue(fname, fvalue);\
(table)->EditUpdate()
//////////////////////////////////////////////////////////////////////////////
/*
#define FLAG_READ 0
#define FLAG_WRITE 1
#define FLAG_APPEND 2
#define FLAG_DELETE 3
#define FLAG_PACK 4
struct TDBFUTILITY_IMPEXP DbfAccess
{
TCHAR dbfname[256]; // 数据库名称
int flag; // 读写标志
int keynum; // 关键字段数
char **keyFieldName; // 关键字的序号
char **keyinfo; // 关键字段的内容
int datanum; // 查询或更新的字段数
char **dataFieldName; // 数据字段的名称(1,2,...)
union {
char *resFileName; // 数据字段的内容 read result
char **dataIn;
};
DbfAccess(const TCHAR *tabName, int isWrite, int kn, int dn);
~DbfAccess();
};
int TDBFUTILITY_IMPEXP DBFFUN(DbfAccess &kz);*/
#endif