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

📄 myrecord.h

📁 网络游戏魔域源代码 测试可以完整变异
💻 H
字号:
// myrecords.h 用于分解出myrecordset.h中的单个记录。
// 仙剑修,2002.9.12
//////////////////////////////////////////////////////////////////////

#ifndef	MYRECORD_H
#define	MYRECORD_H

class CCriticalSection;
class CMyDatabase;

class CMyRecord : public IRecord
{
protected: // interface
	virtual IRecord*	CreateNewRecord(DWORD idNewKey = 0);
	virtual	void	Release() { delete this; }

	virtual bool	InsertRecord();
	virtual bool	UpdateRecord();
	virtual bool	DeleteRecord();

	virtual int		LoadInt		(LPCTSTR szField)					{ return (int)Fields((char*)szField); }
	virtual void	SetInt		(LPCTSTR szField, int nData)		{ m_bEdit = true; Fields((char*)szField) = nData; }
	virtual UINT	LoadUInt	(LPCTSTR szField)					{ return (UINT)Fields((char*)szField); }
	virtual void	SetUInt		(LPCTSTR szField, UINT nData)		{ m_bEdit = true; Fields((char*)szField) = (DWORD)nData; }
	virtual void	LoadString	(char* szData, LPCTSTR szField, int nSize)		{ Fields((char*)szField).CopyTo(szData, nSize); }
	virtual void	SetString	(LPCTSTR szField, LPCTSTR szData, int nSize)	{ m_bEdit = true; Fields((char*)szField).CopyFrom(szData, nSize); }
	// 注:暂时还需要遵守“先取后写”的规则,待具体实现改变后可不按此规则。

	// 立即写库。如无共享冲突,可不提供该接口
	virtual bool	AddInt		(LPCTSTR szField, int nData)		{ return AddField(szField, nData); }

public: // Constructor
	CMyRecord(CMyDatabase  * pMyDatabase);
	virtual ~CMyRecord();
//	IRecord*	GetInterface() { return (IRecord*)this; }

public:
#ifdef	MULTITHREAD_SAFE
	static CCriticalSection	m_xCtrl;
#endif
	static HANDLE	s_hHeap;
	static UINT		s_uNumAllocsInHeap;

	static BOOL		IsValidPt(void* p);
	static CMyRecord* CreateNew(CMyDatabase  *pMyDatabase);

public:
	void*	operator new		(size_t size);
	void	operator delete		(void* p);

public:
	enum { modeEdit, modeAddNew, modeDelete };

	virtual bool Open( CMyRecordset* pRes, DWORD idNewKey = 0);
	virtual bool Spawn(CMyRecord  *pMyRecord, DWORD idNewKey = 0);
	virtual void Close();

	int FieldsCount();

	void AddNew();
	void Edit();
	bool Update();
	void Delete();

	bool IsOpen();

	bool CanUpdate() const;     // Can Edit/AddNew/Delete be called?
	void ClsEditFlag();

	bool AddField(LPCTSTR szField, int nData);

	void SetDatabase(CMyDatabase* pDb) { m_pMyDatabase = pDb; }
	bool SetTableName(LPCTSTR szName, DWORD idNewKey = 0);

	CMyField		Fields(char * szField);
	CMyField 		Fields(UINT	uiIndex );

	CMyDatabase	*	m_pMyDatabase;

protected: // inside function
	int				UpdateFieldsCount();

	void			BuildUpdateSQL();
	void			BuildUpdateCondition();
	void			BuildUpdateOpration();

	CMyField *		GetFieldRef(UINT uiIndex);

	bool			Query(char * szSQL, MYSQL_RES * * res);

	void			GetFieldValue(UINT uiIndex);
	bool			FormatField(char* szFormat, const CMyField& objField);

protected:
	MYSQL_FIELD*	m_Fields;				//? COPY的结构,table、def未复制,不可用

	unsigned int 	m_uiFieldsCount;

	char	  		m_szKey[16];
	unsigned int 	m_uiKeyIndex;
	char		 	m_szKeyData[256];		//paled add 可能有点大

	bool	*		m_pbDirty;

	bool 			m_bEdit;
	bool 			m_bIsOpen;

	int				m_nEditMode;

	CMyField	*	m_objFields;

	char 			m_szTableName[32];
	char 			m_szUpdateSQL[1024];
	char			m_szUpdateOpration[1024];
	char			m_szUpdateCondition[128];

	bool			m_bCanUpdate;
};

#endif // MYRECORD_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -