SErrorPackage PostgresErrorHandler::handle(const QSqlError &error)
{
// 	new row for relation "doms_persons" violates check constraint doms_persons_email_check
// 	insert or update on table "doms_pacients" violates foreign key constraint "doms_pacients_iddocument_fkey"
	
	QString text = error.databaseText().toLower();
	
	if ( text.contains("duplicate key") )
	{
		SErrorPackage package(error.number(), QObject::tr("Seems like pacients already exists"));
		
		return package;
	}
	else if ( text.contains("syntax error") )
	{
		SErrorPackage package(error.number(), QObject::tr("You're trying to do an invalid action"));
		
		return package;
	}
	
	SErrorPackage package(error.number(), QObject::tr("PostgresErrorHandler %1").arg(error.databaseText()));
	
	// TODO: Analizar los textos!
	return package;
}
Example #2
0
void DbFunc::openDatabaseOrDie(QSqlDatabase& db, const QString& filename)
{
    // Opens a database.
    QString dir = QStandardPaths::standardLocations(
        QStandardPaths::AppDataLocation).first();
    // Under Linux: ~/.local/share/camcops/
    if (!QDir(dir).exists()) {
        if (QDir().mkdir(dir)) {
            qDebug() << "Made directory:" << dir;
        } else {
            UiFunc::stopApp("DbFunc::openDatabaseOrDie: Failed to make "
                            "directory: " + dir);
        }
    }
    // http://stackoverflow.com/questions/3541529/is-there-qpathcombine-in-qt4
    QString fullpath = QDir::cleanPath(dir + "/" + filename);
    db.setDatabaseName(fullpath);
    if (db.open()) {
        qInfo() << "Opened database:" << fullpath;
    } else {
        QSqlError error = db.lastError();
        qCritical() << "Last database error:" << error;
        qCritical() << "Database:" << db;
        QString errmsg = QString(
            "DbFunc::openDatabaseOrDie: Error: connection to database failed. "
            "Database = %1; error number = %2; error text = %3"
        ).arg(fullpath, QString::number(error.number()), error.text());
        UiFunc::stopApp(errmsg);
    }
}
Example #3
0
bool DatabaseLogger::logqmsg(MSqlQuery &query, LoggingItem *item)
{
    char        timestamp[TIMESTAMP_MAX];
    char       *threadName = getThreadName(item);

    strftime( timestamp, TIMESTAMP_MAX-8, "%Y-%m-%d %H:%M:%S",
              (const struct tm *)&item->tm );

    query.bindValue(":THREAD",      threadName);
    query.bindValue(":MSGTIME",     timestamp);
    query.bindValue(":LEVEL",       item->level);
    query.bindValue(":MESSAGE",     item->message);

    if (!query.exec())
    {
        // Suppress Driver not loaded errors that occur at startup.
        // and suppress additional errors for one second after the
        // previous error (to avoid spamming the log).
        QSqlError err = query.lastError();
        if ((err.type() != 1 || err.number() != -1) &&
            (!m_errorLoggingTime.isValid() ||
             (m_errorLoggingTime.elapsed() > 1000)))
        {
            MythDB::DBError("DBLogging", query);
            m_errorLoggingTime.start();
        }
        return false;
    }

    deleteItem(item);

    return true;
}
Example #4
0
QT_BEGIN_NAMESPACE

#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QSqlError &s)
{
    dbg.nospace() << "QSqlError(" << s.number() << ", " << s.driverText() <<
                     ", " << s.databaseText() << ')';
    return dbg.space();
}
Example #5
0
void checkMySQLError(QSqlQuery& q) {
    QSqlError e = q.lastError();
    if(!e.isValid())
        return;//no error
    qDebug()<<"got MySQL-Error"<<e.number()<<e.text()<<"/"<<e.databaseText()<<"/"<<e.driverText();
    qDebug()<<"on query"<<q.lastQuery();
    qDebug()<<"Terminating Application";
    QCoreApplication::quit();
}
Example #6
0
/**
 * @brief Handle a SQL error if possible
 * @param err error object to be handled
 * @return true if the error was successfully handled, false if not
 */
bool dbcontroller::handleError(QSqlError err) {
    switch (err.number()) {
    case CR_SERVER_GONE_ERROR:
    case CR_SERVER_LOST:
        db.close();
        db.open();
        BOOSTER_INFO("scoreboard") << "Reopening connection to database.";
        return true;

    case -1:
        BOOSTER_ERROR("scoreboard") << "Unknown DB error";
        return false;

    default:
        BOOSTER_ERROR("scoreboard") << "Error from database: " << err.number() << " - " << err.text().toStdString();
        return false;
    }
}
void checkDatabaseError(const QSqlDatabase &db) {
    QSqlError lastError = db.lastError();
    if (lastError.type() != QSqlError::NoError) {
#if QT_VERSION >= 0x050300
        throw Exception { lastError.nativeErrorCode().toInt(), lastError.text().toStdString() };
#else
        throw Exception { lastError.number(), lastError.text().toStdString() };
#endif
    }
}
Example #8
0
QVariantMap ScriptQuery::lastError()
{
  QVariantMap m;
  QSqlError err = _query.lastError();
  m.insert("databaseText", err.databaseText());
  m.insert("driverText", err.driverText());
  m.insert("text", err.text());
  m.insert("number", err.number());
  m.insert("type", err.type());
  m.insert("isValid", QVariant(err.isValid(), 0));

  return m;
}
Example #9
0
QString MythDB::DBErrorMessage(const QSqlError& err)
{
    if (!err.type())
        return "No error type from QSqlError?  Strange...";

    return QString("Driver error was [%1/%2]:\n"
                   "%3\n"
                   "Database error was:\n"
                   "%4\n")
        .arg(err.type())
        .arg(err.number())
        .arg(err.driverText())
        .arg(err.databaseText());
}
//------------------------------------------------------------------------------
bool ResearchCreationDialog::createResearch()
{
    mResearchModel->insertRow(mResearchModel->rowCount());
    qint32 row = mResearchModel->rowCount() - 1;
    if (!mResearchModel->setData(mResearchModel->index(row, 1),
                                  mUi->nameLineEdit->text())) {
        QSqlError lastError = mResearchModel->lastError();
        QString text(tr("Cannot insert the values in the model!\nError code: %1\nError text: %2")
                    .arg(QString::number(lastError.number()), lastError.text()));
        QMessageBox::warning(this, tr("Error"), text);
        return false;
    }
    mResearchModel->submitAll();

    return true;
}
Example #11
0
QVariantMap XSqlQueryProto::lastError()
{
  QVariantMap m;

  XSqlQuery *item = qscriptvalue_cast<XSqlQuery*>(thisObject());
  if (item)
  {
    QSqlError err = item->lastError();
    m.insert("databaseText", err.databaseText());
    m.insert("driverText", err.driverText());
    m.insert("text", err.text());
    m.insert("number", err.number());
    m.insert("type", err.type());
    m.insert("isValid", QVariant(err.isValid()));
  }

  return m;
}
Example #12
0
/// \brief Actually insert a log message from the queue into the database
/// \param query    The database insert query to use
/// \param item     LoggingItem containing the log message to insert
bool DatabaseLogger::logqmsg(MSqlQuery &query, LoggingItem *item)
{
    char        timestamp[TIMESTAMP_MAX];

    time_t epoch = item->epoch();
    struct tm tm;
    localtime_r(&epoch, &tm);

    strftime(timestamp, TIMESTAMP_MAX-8, "%Y-%m-%d %H:%M:%S",
             (const struct tm *)&tm);

    query.bindValue(":TID",         item->tid());
    query.bindValue(":THREAD",      item->threadName());
    query.bindValue(":FILENAME",    item->file());
    query.bindValue(":LINE",        item->line());
    query.bindValue(":FUNCTION",    item->function());
    query.bindValue(":MSGTIME",     timestamp);
    query.bindValue(":LEVEL",       item->level());
    query.bindValue(":MESSAGE",     item->message());
    query.bindValue(":APP",         item->appName());
    query.bindValue(":PID",         item->pid());

    if (!query.exec())
    {
        // Suppress Driver not loaded errors that occur at startup.
        // and suppress additional errors for one second after the
        // previous error (to avoid spamming the log).
        QSqlError err = query.lastError();
        if ((err.type() != 1 || err.number() != -1) &&
            (!m_errorLoggingTime.isValid() ||
             (m_errorLoggingTime.elapsed() > 1000)))
        {
            MythDB::DBError("DBLogging", query);
            m_errorLoggingTime.start();
        }
        return false;
    }

    return true;
}
SErrorPackage PostgresErrorHandler::handle(const QSqlError &error)
{
	
	dDebug() << error.databaseText();
	
	QString mensaje;
// 	if("ERROR:  llave duplicada viola restricción unique \"aduser_pke\"" ==error.databaseText())
// 	{
// 	   	mensaje = "El usuario que usted ha intentado ingresar ya existe";
// 	}
// 	
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adspace_pkey\""==error.databaseText())
// 	{
// 	   	mensaje = "El espacio que usted ha intentado ingresar ya existe";
// 	}
// 	
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adaudiovisual_pkey\""==error.databaseText())
// 	{
// 		mensaje = "La ayuda audiovisual que usted ha intentado ingresar ya existe";
// 	}
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adaudiovisual\" viola la llave for ánea \"$1\""==error.databaseText())
// 	{
// 		mensaje = "El espacio especificado no existe";
// 	}
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adscheduleav\" viola la llave foránea \"$2\""==error.databaseText())
// 	{
// 		mensaje = "La ayuda audiovisual no existe";
// 	}
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adscheduleav_pkey\""==error.databaseText())
// 	{
// 		mensaje = "El horario que usted ha intentado ingresar ya existe";
// 	}
// 
// 
// 	if("ERROR:  el nuevo registro para la relación \"adscheduleav\" viola la restricción check \"$1\""==error.databaseText())
// 	{
// 		mensaje = "La fecha no es congruente";
// 	}
// 	
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adschedulespace\" viola la llave foránea \"$2\""==error.databaseText())
// 	{
// 		mensaje = "El espacio no existe";
// 	}
// 	
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adschedulespace_pkey\""==error.databaseText())
// 	{
// 		mensaje = "El horario que usted ha intentado ingresar ya existe";
// 	}
// 	
// 	
// 	if("ERROR:  el nuevo registro para la relación \"adschedulespace\" viola la restricción check \"$1\""==error.databaseText())
// 	{
// 		mensaje = "La fecha no es congruente";
// 	}
// 	
// 	
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adspacereserve\" viola la llave foránea \"$1\""==error.databaseText())
// 	{
// 		mensaje = "El usuario no existe";
// 	}
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adspacereserve\" viola la llave foránea \"$2\""==error.databaseText())
// 	{
// 		mensaje = "El espacio no existe";
// 	}
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adspacereserve\" viola la llave foránea \"$3\""==error.databaseText())
// 	{
// 		mensaje = "El horario asociado al espacio no existe";
// 	}
// 	
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adspacereserve_pkey\""==error.databaseText())
// 	{
// 		mensaje = "La reserva ya existe";
// 	}
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adavreserve\" viola la llave foránea \"$1\""==error.databaseText())
// 	{
// 		mensaje = "El usuario no existe";
// 	}
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adavreserve\" viola la llave foránea \"$2\""==error.databaseText())
// 	{
// 		mensaje = "La ayuda audiovisual no existe";
// 	}
// 	
// 	
// 	if("ERROR:  inserción o actualización en la tabla \"adavreserve\" viola la llave foránea \"$3\""==error.databaseText())
// 	{
// 		mensaje = "El horario asociado a la ayuda audiovisual no existe";
// 	}
// 
// 	
// 	if("ERROR:  llave duplicada viola restricción unique \"adavreserve_pkey\""==error.databaseText())
// 	{
// 		mensaje = "La reserva ya existe";
// 	}
// 	
// 	QRegExp rg;
// 	
// 	
// 	rg.setPattern ( "ERROR:  la sintaxis de entrada no es válida para integer: \"*\"" );
// 	if(rg.exactMatch ( error.databaseText() ))
// 	{
// 	QStringList list = error.databaseText().split( '\"' );
// 		mensaje = "El valor "+list[1]+" debe ser numerico";
// 	}
// 	
	
	// TODO: Analizar los textos!
	
	
	SErrorPackage package(error.number(), QObject::tr("PostgresErrorHandler %1").arg(error.databaseText()));
// 	SErrorPackage package(error.number(), QObject::tr("PostgresErrorHandler %1").arg(mensaje));
	
	
	
	return package;
}
Example #14
0
static void logSQLError(const QSqlQuery &query) {
	const QSqlError error(query.lastQuery());
	qWarning() << "SQL Query failed" << query.lastQuery();
	qWarning() << error.number() << query.lastError().text();
}
Example #15
0
void LeechCraft::Util::DBLock::DumpError (const QSqlError& lastError)
{
	qWarning () << lastError.text () << "|"
		<< lastError.type () << "|"
		<< lastError.number ();
}
Example #16
0
void IndexDialog::create()
{
    if(!create_flag){
        close();
        return;
    }
    QString unique;
    if(ckUnique->isChecked())
    {
        unique = QString("unique");
    }
    else
    {
        unique = QString();
    }
    QString iname = txtName->text();
    QString collist;

    int row_count = tbColumnList->rowCount();
    int selected_count=0;
    for(int i=0;i<row_count;i++){
        QTableWidgetItem *item = tbColumnList->item(i,0);
        bool isSelected = item->data(Qt::EditRole).toBool();
        if(isSelected){
            QString col;
            if(tbColumnList->item(i,2)->text().isEmpty()){
                col = QString("%1 %3")
                        .arg(tbColumnList->item(i,1)->text())
                        .arg(tbColumnList->item(i,3)->text());
            }else{
                col = QString("%1 Collate%2 %3")
                    .arg(tbColumnList->item(i,1)->text())
                    .arg(tbColumnList->item(i,2)->text())
                    .arg(tbColumnList->item(i,3)->text());
            }
            collist.append(col.trimmed());
            collist.append(",");
            selected_count ++;
        }
    }
    if(selected_count>0){
        collist = collist.left(collist.length()-1);
    }

    QString sql = QString("create %1 index if not exists %2 on %3(%4)")
            .arg(unique).arg(iname).arg(tbname).arg(collist);

    qDebug()<<sql;
    QSqlDatabase db = QSqlDatabase::database(conname);
    QSqlQuery q(db);
    if(q.exec(sql)){
        MainWindow *mw = qobject_cast<MainWindow*>(qApp->activeWindow());
        if(mw!=0)mw->refresh(conname);
    }else{
        QSqlError se = q.lastError();
        QString err = QString(
           "database:%1\ndriver:%2\nerror number:%3"
           "\nerror type:%4\nerror text:%5")
                .arg(se.databaseText())
                .arg(se.driverText())
                .arg(se.number())
                .arg(se.type()).arg(se.text());
        QMessageBox::warning(this,QString("创建错误"),err);
    }
    close();
}