kexi
object.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <kexidb/object.h>
00021 #include <kexidb/error.h>
00022 #include <kexidb/msghandler.h>
00023
00024 #include <klocale.h>
00025 #include <kdebug.h>
00026
00027 using namespace KexiDB;
00028
00029 #define ERRMSG(a) \
00030 { if (m_msgHandler) m_msgHandler->showErrorMessage(a); }
00031
00032 Object::Object(MessageHandler* handler)
00033 : m_previousServerResultNum(0)
00034 , m_previousServerResultNum2(0)
00035 , m_msgHandler(handler)
00036 , d(0)
00037 {
00038 clearError();
00039 }
00040
00041 Object::~Object()
00042 {
00043 }
00044
00045 #define STORE_PREV_ERR \
00046 m_previousServerResultNum = m_previousServerResultNum2; \
00047 m_previousServerResultName = m_previousServerResultName2; \
00048 m_previousServerResultNum2 = serverResult(); \
00049 m_previousServerResultName2 = serverResultName(); \
00050 KexiDBDbg << "Object ERROR: " << m_previousServerResultNum2 << ": " \
00051 << m_previousServerResultName2 <<endl
00052
00053 void Object::setError( int code, const QString &msg )
00054 {
00055 STORE_PREV_ERR;
00056
00057 m_errno=code;
00058 m_errorSql = m_sql;
00059 if (m_errno==ERR_OTHER && msg.isEmpty())
00060 m_errMsg = i18n("Unspecified error encountered");
00061 else
00062 m_errMsg = msg;
00063 m_hasError = code!=ERR_NONE;
00064
00065 if (m_hasError)
00066 ERRMSG(this);
00067 }
00068
00069 void Object::setError( const QString &msg )
00070 {
00071 setError( ERR_OTHER, msg );
00072 }
00073
00074 void Object::setError( const QString& title, const QString &msg )
00075 {
00076 STORE_PREV_ERR;
00077
00078 m_errno=ERR_OTHER;
00079 QString origMsgTitle( m_msgTitle );
00080
00081 m_msgTitle += title;
00082 m_errMsg = msg;
00083 m_errorSql = m_sql;
00084 m_hasError = true;
00085 if (m_hasError)
00086 ERRMSG(this);
00087
00088 m_msgTitle = origMsgTitle;
00089 }
00090
00091 void Object::setError( KexiDB::Object *obj, const QString& prependMessage )
00092 {
00093 setError( obj, obj ? obj->errorNum() : ERR_OTHER, prependMessage );
00094 }
00095
00096 void Object::setError( KexiDB::Object *obj, int code, const QString& prependMessage )
00097 {
00098 if (obj && (obj->errorNum()!=0 || !obj->serverErrorMsg().isEmpty())) {
00099 STORE_PREV_ERR;
00100
00101 m_errno = obj->errorNum();
00102 m_hasError = obj->error();
00103 if (m_errno==0) {
00104 m_errno = code;
00105 m_hasError = true;
00106 }
00107 m_errMsg = (prependMessage.isEmpty() ? QString::null : (prependMessage + " "))
00108 + obj->errorMsg();
00109 m_sql = obj->m_sql;
00110 m_errorSql = obj->m_errorSql;
00111 m_serverResult = obj->serverResult();
00112 if (m_serverResult==0)
00113 m_serverResult = obj->m_serverResult;
00114 m_serverResultName = obj->serverResultName();
00115 if (m_serverResultName.isEmpty())
00116 m_serverResultName = obj->m_serverResultName;
00117 m_serverErrorMsg = obj->serverErrorMsg();
00118 if (m_serverErrorMsg.isEmpty())
00119 m_serverErrorMsg = obj->m_serverErrorMsg;
00120
00121 if (code!=0 && code!=ERR_OTHER)
00122 m_errno = code;
00123 if (m_hasError)
00124 ERRMSG(this);
00125 }
00126 else {
00127 setError( code!=0 ? code : ERR_OTHER, prependMessage );
00128 }
00129 }
00130
00131 void Object::clearError()
00132 {
00133 m_errno = 0;
00134 m_hasError = false;
00135 m_errMsg = QString::null;
00136 m_sql = QString::null;
00137 m_errorSql = QString::null;
00138 m_serverResult = 0;
00139 m_serverResultName = QString::null;
00140 m_serverErrorMsg = QString::null;
00141 drv_clearServerResult();
00142 }
00143
00144 QString Object::serverErrorMsg()
00145 {
00146 return m_serverErrorMsg;
00147 }
00148
00149 int Object::serverResult()
00150 {
00151 return m_serverResult;
00152 }
00153
00154 QString Object::serverResultName()
00155 {
00156 return m_serverResultName;
00157 }
00158
00159 void Object::debugError()
00160 {
00161 if (error()) {
00162 KexiDBDbg << "KEXIDB ERROR: " << errorMsg() << endl;
00163 QString s = serverErrorMsg(), sn = serverResultName();
00164 if (!s.isEmpty())
00165 KexiDBDbg << "KEXIDB SERVER ERRMSG: " << s << endl;
00166 if (!sn.isEmpty())
00167 KexiDBDbg << "KEXIDB SERVER RESULT NAME: " << sn << endl;
00168 if (serverResult()!=0)
00169 KexiDBDbg << "KEXIDB SERVER RESULT #: " << serverResult() << endl;
00170 } else
00171 KexiDBDbg << "KEXIDB OK." << endl;
00172 }
00173
00174 int Object::askQuestion( const QString& message,
00175 KMessageBox::DialogType dlgType, KMessageBox::ButtonCode defaultResult,
00176 const KGuiItem &buttonYes,
00177 const KGuiItem &buttonNo,
00178 const QString &dontShowAskAgainName,
00179 int options,
00180 MessageHandler* msgHandler )
00181 {
00182 if (msgHandler)
00183 return msgHandler->askQuestion(message, dlgType, defaultResult, buttonYes, buttonNo,
00184 dontShowAskAgainName, options);
00185
00186 if (m_msgHandler)
00187 return m_msgHandler->askQuestion(message, dlgType, defaultResult, buttonYes, buttonNo,
00188 dontShowAskAgainName, options);
00189
00190 return defaultResult;
00191 }
|