Dear All,
I've created a database class in my project and I'm opening a db connection with that class whenever I need to query Db. However, it's very inefficient creata new database object in every function call and open a connection to database. For that reason I'm trying to change my implementation and create a static protected db object and open a connection once and close it when I finish all my queries.
So far, it sounds reasonable and easy
However, when I call "open" method of my database class from another class, I'm getting this error:
How can I solve this problem?error C2662: 'Database::Open' : cannot convert 'this' pointer from 'const Database' to 'Database &'
My db header:
Trying to call it from this class:Code:#define CATCHERROR(ptr,a) catch(_com_error &e)\ {\ ErrorHandler(e,m_ErrStr);\ ptr=NULL;\ return a;\ } #define CATCHERRGET catch(_com_error &e)\ {\ ErrorHandler(e,m_ErrStr);\ sprintf(m_ErrStr,"%s\n**For Field Name:%s",m_ErrStr,FieldName);\ return 0;\ } #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ rename("EOF", "EndOfFile") typedef ADODB::_RecordsetPtr RecPtr; typedef ADODB::_ConnectionPtr CnnPtr; class Database; class Table; class Database { public: CnnPtr m_Cnn; char m_ErrStr[500]; Database(); bool Open(char* UserName, char* Pwd,char* CnnStr); bool Close(); bool OpenTbl(int Mode, char* CmdStr, Table& Tbl); bool Execute(const char* CmdStr); bool Execute(const char* CmdStr, Table& Tbl); void GetErrorErrStr(char* ErrStr); }; class Table{ public: RecPtr m_Rec; char m_ErrStr[500]; Table(); void GetErrorErrStr(char* ErrStr); int ISEOF(); HRESULT MoveNext(); HRESULT MovePrevious(); HRESULT MoveFirst(); HRESULT MoveLast(); int AddNew(); int Update(); int Add(char* FieldName, char* FieldValue); int Add(char* FieldName,int FieldValue); int Add(char* FieldName,float FieldValue); int Add(char* FieldName,double FieldValue); int Add(char* FieldName,long FieldValue); bool Get(char* FieldName, char* FieldValue); bool Get(char* FieldName, std::string& FieldValue); int GetInt(char* FieldName); bool Get(char* FieldName,float& FieldValue); bool Get(char* FieldName,double& FieldValue); bool Get(char* FieldName,double& FieldValue,int Scale); bool Get(char* FieldName,long& FieldValue); };
And implementation:Code:#include "Database.h" namespace Myclass { class Myclass { protected: static const Database* dbObj; } }
Thanks in advanceCode:if(!dbObj->Open(userIdValue, passwordValue, CnnStr)){}





Reply With Quote