📄 xoledatabase.h
字号:
// OleDatabase.h: interface for the OleDatabase class
//////////////////////////////////////////////////////////
#ifndef XIN_OLEDATABASE_H_INCLUDE_
#define XIN_OLEDATABASE_H_INCLUDE_
/*
* Create on 2002-07-17 by xin
*/
// Include Header File
#include <OleDB.h>
#include <MSDASC.h>
#ifdef XDB_EXPORTS
#define XDB_EXT __declspec(dllexport)
#else
#define XDB_EXT __declspec(dllimport)
#endif
// 两种特殊的字段类型
#define DBTYPE_BLOB 0x8101
#define DBTYPE_FILE 0x8102
// 大对象字段内容
typedef struct
{
DWORD lpTemp[3];
// 读出的字节数
DWORD dwMaxSize;
// 数据存储位置
union {
HANDLE hFile;
void * lpBuffer;
};
// 数据库访问对象
DBOBJECT dbObject;
} XBLOBCOLUMN;
// 几个主要导出类
class XOleRowset;
class XOleDatabase;
// 数据表的字段信息
typedef struct tagColumnInfo
{
WORD wdType; // 字段类型
WORD wdPrec; // 字段精度
DWORD dwSize; // 字段大小
DWORD dwProp; // 字段性质
char lpName[20]; // 字段名
} XColumnInfo;
// 字段性质见 DBCOLUMNFLAGSENUM;
/********************************************/
/* * * * 基本数据库对象 * * * */
/********************************************/
class XDB_EXT XOleDatabase
{
public:
XOleDatabase();
virtual ~XOleDatabase();
protected:
IDBInitialize * m_lpInit;
IDBCreateSession * m_lpSession;
ITransaction * m_lpTrans;
IDBCreateCommand * m_lpCommand;
public:
// 断开数据库
void CloseConnect();
// 连接数据库
HRESULT Connect(LPCTSTR lpConnect);
HRESULT Connect( REFCLSID rcDriver,
LPCTSTR lpSource,
LPCTSTR lpDBName,
LPCTSTR lpUserID,
LPCTSTR lpUserKey
);
HRESULT Connect( LPCTSTR lpDriver,
LPCTSTR lpSource,
LPCTSTR lpDBName,
LPCTSTR lpUserID,
LPCTSTR lpUserKey
);
// 判断满足SQL语句的记录是否存在
HRESULT IsQueryExist(LPCTSTR lpQuery);
// 执行一条SQL语句
HRESULT ExecuteCommand(LPCTSTR lpQuery);
// 事务提交处理支持
HRESULT StartTransaction();
HRESULT AbortTransaction();
HRESULT CommitTransaction();
/* 获得数据库中的表、视
注意:strType可能为:"TABLE", "SYSTEM TABLE", "TABLE,SYSTEM TABLE"
返回的字段有:TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
TABLE_TYPE, TABLE_GUID, TABLE_DESCRIB, TABLE_PROPID,
DATE_CREATED, DATE_MODIDIED
TABLE_TYPE的值可能有:"TABLE", "SYSTEM TABLE", "VIEW"
*/
HRESULT GetSchemaRowset(LPCTSTR strType, XOleRowset * lpRowset);
// 获取表的字段信息
int GetTableColumnInfo(LPCTSTR strTable, XColumnInfo * lpDesc);
// 单独打开一个数据表
HRESULT OpenRowset( LPCTSTR strTable,
XOleRowset * lpRowset,
BOOL bModify = FALSE,
void * lpBuffer = NULL,
long nColCount = 0x0000,
const WORD * lpType = NULL,
const int * lpSize = NULL
);
// 查询数据库记录
HRESULT QueryRowset( LPCTSTR strQuery,
XOleRowset * lpRowset,
BOOL bModify = FALSE,
void * lpBuffer = NULL,
long nColCount = 0x0000,
const WORD * lpType = NULL,
const int * lpSize = NULL
);
};
/********************************************/
/* * * * 基本数据集对象 * * * */
/********************************************/
class XDB_EXT XOleRowset
{
public:
XOleRowset();
virtual ~XOleRowset();
public:
// 字段的总个数
int m_nColumnCount;
// 字段描述信息
struct tagColumnDesc
{
WORD wdType; // 数据类型
WORD wdPrec; // 数据精度
DWORD dwSize; // 字段大小
DWORD dwOffset; // 起始位置
TCHAR lpName[20]; // 字段名称
} m_lpColumnInfo[256];
protected:
// 记录数据缓冲区
DWORD m_dwBuffer;
LPBYTE m_lpBuffer;
LPBYTE m_lpMalloc;
// 当前记录的信息
HROW m_hCurrent;
HACCESSOR m_hAccessor;
// 记录集基本信息
IRowset * m_lpRowset;
IRowsetChange * m_lpChange;
public:
// 关闭记录集
void CloseRowset();
// 载入当前记录
HRESULT LoadCurrent();
HRESULT ReleaseCurrent();
// 重新载出数据
HRESULT LoadData(void * lpNewBuffer = NULL);
// 依附与记录集
HRESULT Attach(IRowset * lpRowset);
HRESULT Attach( IRowset * lpRowset,
void * lpBuffer,
int nColumnCount,
const WORD * lpType,
const int * lpSize
);
// 几个辅助性操作
BOOL IsRowExist();
int GetRowCount();
// 移动当前记录的位置
HRESULT MoveNext(BOOL bLoadData = TRUE);
HRESULT MovePrev(BOOL bLoadData = TRUE);
HRESULT MoveLast(BOOL bLoadData = TRUE);
HRESULT MoveFirst(BOOL bLoadData = TRUE);
HRESULT MoveOffset(int nOffset, BOOL bLoadData = TRUE);
// 读取当前记录的状态
HRESULT GetRowInfo(DWORD * lpState);
// 记录的新增删除修改
HRESULT InsertRow();
HRESULT DeleteRow();
HRESULT ModifyRow();
// 获取当前记录的值
int GetColumnIndex(LPCTSTR strName);
int GetColumnValue(int nIdx, void * lpBuffer);
int SetColumnValue(int nIdx, void * lpBuffer, int nSize);
void GetColumnString(int nIdx, LPTSTR lpBuffer);
void SetColumnString(int nIdx, LPCTSTR lpBuffer);
void FillStruct(void * lpStruct, const int * lpSize);
void LoadStruct(void * lpStruct, const int * lpSize);
protected:
void ZeroDataBuffer();
void HandleDataBuffer();
HRESULT InitializeChange();
// XOleDatabase 需要访问
friend class XOleDatabase;
};
/********************************************/
/* * * * 几个非常有用的函数 * * * */
/********************************************/
// Get Select data source
XDB_EXT BOOL XSelectDataSource(HWND hWnd, LPTSTR lpConnStr);
#endif // XIN_OLEDATABASE_H_INCLUDE_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -