//-------------------------------------------------------------------------------- // = 版权 // Copyright(c) 2000 // All rights reserved // = 作者(S) // 李夫银 // = 版本 // Version1.0 // = 日期 // 2002.7.20 // = 修改日志 // //-------------------------------------------------------------------------------- #if !defined(AFX_CUIIImpADORXServer_H__4D6F6C94_62E5_4193_9077_F9CCD4076D0F__INCLUDED_) #define AFX_CUIIImpADORXServer_H__4D6F6C94_62E5_4193_9077_F9CCD4076D0F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif #ifndef __UIIVALUETABLE_H__ #include "UIIValueTable.h" #endif #ifdef _WIN64 #import "msado60_Backcompat_x64.tlb" no_namespace rename("EOF", "EndOfFile") rename("EOS", "EndOfStream") #else #import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") rename("EOS", "EndOfString") #endif #include "UIIADORXServer.h" #include #include class CUIIImpADORXServer { public: CUIIImpADORXServer(); virtual ~CUIIImpADORXServer(); public: //建立连接、连接数据库,打开数据库[access本地] BOOL InitADOServer(LPCTSTR pszDbFileName); //建立连接、连接数据库,打开数据库 BOOL InitADOServer(LPCTSTR pszConnection,bool bDisplayException,ConnectOptionEnum OptionEnum = adConnectUnspecified); //建立连接、连接数据库,打开数据库 BOOL InitADOServer(LPCTSTR pszDSN,LPCTSTR pszUserID,LPCTSTR pszPassword,ConnectModeEnum eMode = adModeUnknown,CursorTypeEnum eCursor = adOpenUnspecified); BOOL GetConnection(CString& sConntion){sConntion = m_sConnection;return m_bSuccessState;} void SetDatabase(LPCTSTR pszDatabase){if (pszDatabase != NULL) m_sDatabase = pszDatabase;} LPCTSTR GetDatabase(){return (LPCTSTR)m_sDatabase;} void AppendAssocDatabase(LPCTSTR pszKey,LPCTSTR pszAssocDb); BOOL AssocDatabase(LPCTSTR pszKey,CString& sAssocDb); //设置登录者的ID void SetLoginID(LPCTSTR pszLoginName){ if (pszLoginName != NULL) m_sEmployeeID = pszLoginName;} //获取登录者的ID LPCTSTR GetLoginID(){return m_sEmployeeID;} //设置登录的组ID void SetGroupID(LPCTSTR pszGroup){ if (pszGroup != NULL) m_sGroupID = pszGroup;} //获取登录的组ID LPCTSTR GetGroupID(){return m_sGroupID;} BOOL CreateOLEDBTable(LPCTSTR pszTableName,Ttable& arFields,LPCTSTR pszDbName = _T("")); //创建表及表的字段名 BOOL CreateSQLSrvTable(LPCTSTR pszTableName,Ttable& arFields,LPCTSTR pszDbName = _T("uii_unknown")); BOOL IsSQLSrvTableExist(LPCTSTR pszTableName,LPCTSTR pszDbName); //获取表的结构信息 BOOL GetSQLSrvTableStru(LPCTSTR pszTableName,Ttable &arFields,LPCTSTR pszDbName = _T("")); //获取表的结构信息 BOOL GetSQLSrvTableStru(LPCTSTR pszTableName,CStringList &listField,LPCTSTR pszDbName = _T("")); //获取表的结构信息 BOOL GetTableStructInfoEx(LPCTSTR pszTableName,Ttable& arFields); //删除数据库中的表 BOOL DeleteTable(LPCTSTR pszTableName); //删除数据库中的若干表 BOOL DeleteTable(CStringArray &arTableNames); //删除表中若干字段名 BOOL DeleteTableFields(LPCTSTR pszTableName,CStringArray &arFields,LPCTSTR pszDbName); //删除表中字段 BOOL DeleteTableFields(LPCTSTR pszTableName,LPCTSTR pszFields,LPCTSTR pszDbName); //向表中增加若干字段名 BOOL AppendTableFields(LPCTSTR pszTableName,Ttable &arFields,LPCTSTR pszDbName); //向表中增加字段 BOOL AppendTableFields(LPCTSTR pszTableName, CUIITableField& arFields,LPCTSTR pszDbName); //获得一个数值 int GetSelData(LPCTSTR psztrSQL,CString& sValue); //把获得相应的信息填到数组中 int GetSelData(LPCTSTR psztrSQL,CStringArray &arStrValue); int GetSelData(LPCTSTR psztrSQL,CStringArray &arStrValue,int nFr,int nTo); int GetSelData(LPCTSTR psztrSQL, std::vector &arStrValue); //是否是空选择集 BOOL IsSelEmpty(LPCTSTR psztrSQL); //把获得相应的信息填到链表中 int GetSelData(LPCTSTR psztrSQL,CStringList &listStrValue,BOOL bMakeLower= TRUE); int GetSelData(LPCTSTR psztrSQL,CStringList &listStrValue,int nFr,int nTo,BOOL bMakeLower= TRUE); //选取多个字段,把获得相应的信息填到'表'对象中 int GetSelData(LPCTSTR psztrSQL,CUIIValueTable &valueTable,BOOL bUpdateLable = TRUE); int GetSelData(LPCTSTR psztrSQL,CUIIValueTable &valueTable,int nFr,int nTo,BOOL bUpdateLable = TRUE); //选取一个作为Key,和一个作为Value的SQL,取的记录添到map中 int GetSelData(LPCTSTR pszKey_ValueSQL,CMapStringToString &mapKey_Value); int GetSelData(LPCTSTR pszKey_ValueSQL, std::map &mapKey_Value); //选取一行,获得Field到对应数据的映射 int GetSelDataEx(LPCTSTR pszSelectSQL,CMapStringToString &mapFieldToValue); int GetSelDataEx(LPCTSTR pszSelectSQL, std::map &mapFieldToValue); int GetSelDataEx(LPCTSTR pszSelectSQL, std::vector>& datas); int GetSelDataEx(LPCTSTR pszSelectSQL, std::vector>& datas); //把获得相应的信息填到vResults中 int GetSelData(LPCTSTR psztrSQL,_variant_t &vResults,long &lAdoRow,long &lAdoCol); //获得数据库中所有的表名 void GetSQLSrvTableNames(CStringList &listTables,LPCTSTR pszDbName); //获得数据库中所有的表名 void GetSQLSrvTableNames(CStringArray &arTables,LPCTSTR pszDbName); //获得数据库中所有的表名 void GetTableNameArray(CStringArray &arTables,LPCTSTR pszTableType = _T("TABLE")); //获得数据库中所有的表名 void GetOLDBTableNameList(CStringList &listTables,LPCTSTR pszTableType = _T("TABLE")); //获得数据库中所有的表名 void GetOLDBTableNameArray(CStringArray &arTables,LPCTSTR pszTableType = _T("TABLE")); //blob 操作 //insert into table (id,name,picture) values (0,'namestr',?) //table 对应 id,name 的数据 int InsertBlob(LPCTSTR pszSQL,void* pData,int nSize); int InsertBlob(LPCTSTR pszSQL,LPCTSTR pszFile); //update table set id=,name='namestr',picture=? where ... int UpdateBlob(LPCTSTR pszSQL,void* pData,int nSize); int UpdateBlob(LPCTSTR pszSQL,LPCTSTR pszFile); //select picture from table where id=... int GetSelBlob(LPCTSTR pszSQL,void*& pData,int& nSize); int GetSelBlob(LPCTSTR pszSQL,LPCTSTR pszFilePath); //执行SQL语句[如 删除,追加,更新] BOOL ExecuteSQL(LPCTSTR psztrSQL); //判断数据库是否成功打开 BOOL IsDatabaseOpen(); public: //取得连接数据库指针 _ConnectionPtr GetConnectionPtr(); void FromConnectionPtr(_ConnectionPtr pConPtr); //出错显示 void DisplayADOException(_com_error &e,bool bDisplay = false); CString GetFieldType(int propType); int ConverToSQLType(LPCTSTR pszType,int nDefSize,CString& sSQLType); private: //关闭连接及数据库 void CloseAll(); private: BOOL m_bSuccessState; //连接及数据库打开成功状态 _ConnectionPtr m_ConPtr; //连接指针 CString m_sConnection; CString m_sEmployeeID; //连结系统的真实登录者 CString m_sGroupID; //连结系统的登录者的组 CString m_sDatabase; //数据库名 CMapStringToString m_mapAssocDb; //关联数据库 }; #endif