⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xoledatabase.h

📁 通过oledb
💻 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 + -