Ejemplo n.º 1
0
void SQLManager::runQuery(const QString &text, const QString &connection)
{
  kDebug() << "connection:" << connection;
  kDebug() << "text:"       << text;

  if (text.isEmpty())
    return;

  if (!isValidAndOpen(connection))
    return;

  QSqlDatabase db = QSqlDatabase::database(connection);
  QSqlQuery query(db);

  if (!query.prepare(text))
  {
    QSqlError err = query.lastError();

    if (err.type() == QSqlError::ConnectionError)
      m_model->setStatus(connection, Connection::OFFLINE);

    emit error(err.text());
    return;
  }

  if (!query.exec())
  {
    QSqlError err = query.lastError();

    if (err.type() == QSqlError::ConnectionError)
      m_model->setStatus(connection, Connection::OFFLINE);

    emit error(err.text());
    return;
  }

  QString message;

  /// TODO: improve messages
  if (query.isSelect())
  {
    if (!query.driver()->hasFeature(QSqlDriver::QuerySize))
      message = i18nc("@info/plain", "Query completed successfully");
    else
    {
      int nRowsSelected = query.size();
      message = i18ncp("@info/plain", "%1 record selected", "%1 records selected", nRowsSelected);
    }
  }
  else
  {
    int nRowsAffected = query.numRowsAffected();
    message = i18ncp("@info/plain", "%1 row affected", "%1 rows affected", nRowsAffected);
  }

  emit success(message);
  emit queryActivated(query, connection);
}
Ejemplo n.º 2
0
void tableTemplateWidget::deleteTemplate(void)
{
  if (templateId == 0)
    return;

  QMessageBox delTmp(QMessageBox::Question,
                     tr("Deleting template!"),
                     tr("Do you want delete template ?"),
                     QMessageBox::Yes | QMessageBox::No);

  int code = delTmp.exec();

  if (code == QMessageBox::No)
    return;

  QSqlQuery query;
  QSqlError le;

  query.prepare("DELETE FROM crossword.private_data WHERE _template = ?;");
    query.addBindValue(QVariant(templateId));
  query.exec();

  le = query.lastError();
  if (le.type() != QSqlError::NoError)
    qDebug() << "1. deleteTemplate: " << le.text();

  query.prepare("DELETE FROM crossword.grids WHERE _template = ?;");
    query.addBindValue(QVariant(templateId));
  query.exec();

  le = query.lastError();
  if (le.type() != QSqlError::NoError)
    qDebug() << "2. deleteTemplate: " << le.text();

  query.prepare("DELETE FROM crossword.templates WHERE _id = ?;");
    query.addBindValue(QVariant(templateId));
  query.exec();

  le = query.lastError();
  if (le.type() != QSqlError::NoError)
    qDebug() << "3. deleteTemplate: " << le.text();

  for (int i = 0; i < numCol; i++)
    removeColumn(0);

  setRowCount(0);

  sb->showMessage(tr("Template deleted"), 2000);

  // need for templateListWidget
  emit deletedFromDB(templateId);

  numCol = numRow = 0;
  templateId = 0;
  countWords = 0;
  wi.clear();
}
Ejemplo n.º 3
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());
}
Ejemplo n.º 4
0
void plumaje::insertColor ()
{
	if (!nombrePluma->text().isEmpty() && !descripcionPluma->text().isEmpty())
	{
		if (modificando) 
		{
			QString consulta = "UPDATE plumaje SET nombre = \"" + nombrePluma->text() + "\", \
			descripcion = \"" + descripcionPluma->text() + "\" \
			WHERE plumajeID = " + tablaPlumaje->currentRecord()->value(0).toString();
			qWarning (consulta);
			QSqlQuery queryUpdate (consulta, QSqlDatabase::database("palomar" ));
			QSqlError error = queryUpdate.lastError();
			if (error.type() != QSqlError::None)
				KMessageBox::error (this, i18n("Error actualizando el color de pluma. El error devuelto por la base de datos es:\n") +
					error.databaseText(),
						i18n ("Error actualizando color de pluma"));
			else
			{
				tablaPlumaje->refresh();
				InsertButton->setText(i18n("Insertar"));
				modificando = FALSE;
				descripcionPluma->clear();
				nombrePluma->clear();
			}
		}
		else
		{
			QString consulta = "INSERT INTO plumaje (nombre, descripcion) VALUES ('";
			consulta += nombrePluma->text() + "', '" + descripcionPluma->text() + "');";
			qWarning (consulta);
			QSqlQuery queryInsert (consulta, QSqlDatabase::database("palomar" ));
			QSqlError error = queryInsert.lastError();
			if (error.type() != QSqlError::None)
				KMessageBox::error (this, i18n("Error insertantdo el color de pluma.El error devuelto por la base de datos es:\n") +
													error.databaseText(),
													i18n ("Error añadiendo el color de pluma"));
			else
			{
				tablaPlumaje->refresh();
				descripcionPluma->clear();
				nombrePluma->clear();
			}
		}
	}
	else
		KMessageBox::error (this, i18n("Debe rellenar el nombre y la descripción."),
												i18n ("Error añadiendo tipo de suelta"));
}
void ConnDlg::on_okButton_clicked()
{
    if (ui.comboDriver->currentText().isEmpty())
    {
        ui.status_label->setText(tr("请选择一个数据库驱动!"));
        ui.comboDriver->setFocus();
    }
    else if(ui.comboDriver->currentText() =="QSQLITE")
    {
        addSqliteConnection();
        //创建数据库表,如已存在则无须执行
        creatDB();
        accept();
    }
    else
    {
        QSqlError err = addConnection(driverName(), databaseName(), hostName(),userName(), password(), port());
        if (err.type() != QSqlError::NoError)
            ui.status_label->setText(err.text());
        else
            ui.status_label->setText(tr("连接数据库成功!"));
        //创建数据库表,如已存在则无须执行
        accept();
        }
}
Ejemplo n.º 6
0
/*!
 * \brief SqlQuery::exec Execute a existing query with capability to throw SqlException
 * if necessary.
 * \return true if successfully executed, false otherwise.
 */
bool SqlQuery::exec() throw(SqlException)
{
    bool b = m_sqlQuery.exec();

    QSqlError sqlError = m_sqlQuery.lastError();
    switch(sqlError.type ())
    {
    case QSqlError::NoError:
        return b;
    case QSqlError::ConnectionError:

    case QSqlError::StatementError:
        if(sqlError.databaseText() == "MySQL server has gone away"){
            throw SqlConnectionException(sqlError);
        }else{
            throw SqlStatementException(sqlError);
        }
    case QSqlError::TransactionError:
        throw SqlTransactionException(sqlError);
    case QSqlError::UnknownError:
        throw SqlUnknownException(sqlError);
    default:
        throw SqlException(sqlError);
    }
}
Ejemplo n.º 7
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;
}
Ejemplo n.º 8
0
bool SvDeviceEditor::loadKTSs()
{
  QSqlQuery* q = new QSqlQuery(SQLITE->db);
  QSqlError serr = SQLITE->execSQL(QString(SQL_SELECT_KTSS_LIST), q); 
  if(QSqlError::NoError != serr.type()) {
    
    _last_error = serr.text();
    delete q;
    return false;
  }

  while(q->next())
    ui->cbDeviceType->addItem(q->value("kts_name").toString(), q->value("kts_id").toUInt());
  
  q->finish();
  delete q;
  
  if(ui->cbDeviceType->count()) ui->cbDeviceType->setCurrentIndex(0);
  ui->bnSave->setEnabled(!ui->cbDeviceType->currentData().isNull());
  
  connect(ui->cbDeviceType, SIGNAL(currentIndexChanged(int)), this, SLOT(updateKTSInfo(int)));
  
  return true;
  
}
Ejemplo n.º 9
0
void MainWindow::updateCurrencies() {
    QList<Currency> list;
    market->getCurrenciesList(list);
    QSqlError err = db_helper->updateCurrenciesTable(list);
    if (err.type() != QSqlError::NoError) {
        showError(err);
        return;
    }
}
Ejemplo n.º 10
0
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
    }
}
Ejemplo n.º 11
0
TestMarketData::TestMarketData(QObject *parent) :
    QObject(parent), db_helper(NULL), market(NULL)
{
    db_helper = new DBHelper(":memory:");
    QSqlError err = db_helper->initDb();
    if (err.type() != QSqlError::NoError) {
        qDebug() << "Error: " << err;
    }
    market = new CryptocoinChartsMDP();
}
Ejemplo n.º 12
0
void plumaje::eliminarColor()
{
	QString consulta = "DELETE FROM plumaje WHERE plumajeID = " + tablaPlumaje->currentRecord()->value(0).toString();
	QSqlQuery queryDelete (consulta, QSqlDatabase::database("palomar" ));
	QSqlError error = queryDelete.lastError();
	if (error.type() != QSqlError::None)
			KMessageBox::error (this, i18n("Error eliminando el color de pluma. El error devuelto por la base de datos es:\n") +
				error.databaseText(),
				i18n ("Error eliminando el color de pluma"));
	tablaPlumaje->refresh();
}
Ejemplo n.º 13
0
bool SqlUtils::isLockError(const QSqlError& error)
{
    if (error.type() == QSqlError::StatementError &&
        ( error.text().contains(QLatin1String("(55P03)")) || //the actual error code, not translated. needs patched QPSQL driver
          error.text().contains(QLatin1String("could not obtain lock")) )
       )
    {
        return true;
    }
    return false;
}
Ejemplo n.º 14
0
void ojo::eliminarTipo()
{
	QString consulta = "DELETE FROM ojo WHERE ojoID = " + tablaOjos->currentRecord()->value(0).toString();
	QSqlQuery queryDelete (consulta, QSqlDatabase::database("palomar" ));
	QSqlError error = queryDelete.lastError();
	if (error.type() != QSqlError::None)
			KMessageBox::error (this, i18n("Error eliminando el tipo de ojo. El error devuelto por la base de datos es:\n") +
				error.databaseText(),
				i18n ("Error eliminando el tipo de ojo"));
	tablaOjos->refresh();

}
Ejemplo n.º 15
0
SQLconnector::SQLconnector()
{
    if (!QSqlDatabase::drivers().contains("QSQLITE"));

        // initialize the database
        QSqlError err = this->initDb();
        if (err.type() != QSqlError::NoError) {
            showError(err);
            return;
        }

}
Ejemplo n.º 16
0
void SvSerialEditor::accept()
{
  params.name = ui->cbPortName->currentData().toString();
  params.description = ui->cbPortName->currentText();
  params.baudrate = ui->cbBaudrate->currentData().toUInt();
  params.databits = QSerialPort::DataBits(ui->cbDataBits->currentData().toInt());
  params.flowcontrol = QSerialPort::FlowControl(ui->cbFlowControl->currentData().toInt());
  params.parity = QSerialPort::Parity(ui->cbParity->currentData().toInt());
  params.stopbits = QSerialPort::StopBits(ui->cbStopBits->currentData().toInt());
  
  try {
    
    QSqlError err = check_params_exists(params.dev_type);
    if(QSqlError::NoError != err.type()) _exception.raise(err.databaseText());

    err = SQLITE->execSQL(QString(SQL_UPDATE_DEVICES_SERIAL_PARAMS_WHERE)
                          .arg(params.name)
                          .arg(params.baudrate)
                          .arg(params.parity)
                          .arg(params.stopbits)
                          .arg(params.databits)
                          .arg(params.flowcontrol)
                          .arg(params.description)
                          .arg(params.dev_type));
    
    if(QSqlError::NoError != err.type()) _exception.raise(err.databaseText());
  
    QDialog::accept();
  
  }
  
  catch(SvException e) {
    
    _last_error = e.err;
//        qDebug() << _last_error;
    QDialog::reject();
    
  }
  
}
Ejemplo n.º 17
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;
}
Ejemplo n.º 18
0
void addConnectionsFromCommandline(const QStringList &args, Browser *browser)
{
    for (int i = 1; i < args.count(); ++i) {
        QUrl url(args.at(i), QUrl::TolerantMode);
        if (!url.isValid()) {
            qWarning("Invalid URL: %s", qPrintable(args.at(i)));
            continue;
        }
        QSqlError err = browser->addConnection(url.scheme(), url.path().mid(1), url.host(),
                                               url.userName(), url.password(), url.port(-1));
        if (err.type() != QSqlError::NoError)
            qDebug() << "Unable to open connection:" << err;
    }
}
Ejemplo n.º 19
0
void OrganizerCalendarDatabaseAccess::sqliteErrorMapper(const QSqlError &sqlError, int& errorCode)
{
    switch (sqlError.type()) {
        case QSqlError::NoError:
            errorCode = CALENDAR_OPERATION_SUCCESSFUL;
            break;
        case QSqlError::ConnectionError:
        case QSqlError::StatementError:
        case QSqlError::TransactionError:
        case QSqlError::UnknownError:
        default :
            errorCode = CALENDAR_DATABASE_ERROR;
            break;
    }
}
Ejemplo n.º 20
0
void TestMarketData::TestUpdateCurrencies() {
    QList<Currency> list;
    market->getCurrenciesList(list);
    QVERIFY( list.size() > 100 );
    QSqlError err = db_helper->updateCurrenciesTable(list);
    if (err.type() != QSqlError::NoError) {
        qDebug() << "Error: " << err;
        QFAIL ( err.text().toStdString().c_str() );
    }
    QSqlQuery q;
    q.exec("select count(*) from currencies");
    if(!q.next()) QFAIL("currencies table is empty in TestUpdateCurrencies");
    int count = q.value(0).toInt();
    QCOMPARE(list.size(), count);
}
Ejemplo n.º 21
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;
}
Ejemplo n.º 22
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;
}
Ejemplo n.º 23
0
void ActivityWizard::setVisible(bool visible) {
    if (visible) {
        DBManager manager;
        QSqlError error;
        if (mRecord.contains("id") && mRecord.value("id").toULongLong() != 0) {
            mActivity =
                manager.getActivity(mRecord.value("id").toULongLong(), error);
            if (error.type() != QSqlError::NoError) {
                QMessageBox msgBox;
                msgBox.setIcon(QMessageBox::Warning);
                msgBox.setText(
                    tr("There was an error while loading activity from the "
                       "database."));
                msgBox.setDetailedText(error.text());
                msgBox.setStandardButtons(QMessageBox::Ok);
                msgBox.setDefaultButton(QMessageBox::Ok);
                msgBox.exec();
                reject();
                return;
            }
            if (!mActivity) {
                QMessageBox msgBox;
                msgBox.setIcon(QMessageBox::Information);
                msgBox.setText(tr("The requested activity does not exist."));
                msgBox.setInformativeText(tr("Maybe someone or system clean up "
                                             "job deleted the activity. "
                                             "Try refreshing the data."));
                msgBox.setStandardButtons(QMessageBox::Ok);
                msgBox.setDefaultButton(QMessageBox::Ok);
                msgBox.exec();
                reject();
                return;
            }
        } else {
            mActivity = make_shared<Activity>();
        }
    }
    QWizard::setVisible(visible);
}
Ejemplo n.º 24
0
/*
 * Створюємо новий пустий шаблон кросворду
 */
void tableTemplateWidget::createNew(void)
{
  QDialog *dialog = new QDialog();
  sizeOfTemplate = new Ui::SizeOfTemplate();
  sizeOfTemplate->setupUi(dialog);

  dialog->setModal(true);
  dialog->exec();

  if (dialog->result() == QDialog::Accepted)
    {
      numRow = sizeOfTemplate->spinRows->value();
      numCol = sizeOfTemplate->spinColumns->value();

      QSqlQuery query;
      query.prepare("INSERT INTO crossword.templates (_rows, _columns) VALUES (?, ?);");
      query.addBindValue(QVariant(numRow));
      query.addBindValue(QVariant(numCol));
      query.exec();

      QSqlError le = query.lastError();
      if (le.type() == QSqlError::NoError)
        templateId = query.lastInsertId().toInt();
      else
        qDebug() << "createNew: " << le.text();

      wi.clear();
      setRowCount(numRow);
      setColumnCount(numCol);

      for (int i = 0; i < numRow; i++)
        for (int j = 0; j < numCol; j++)
          newCell(i, j, 0);

      isDirty = true;
    }

  delete dialog;
}
Ejemplo n.º 25
0
void Browser::addConnection()
{
    QSqlConnectionDialog dialog(this);
    if (dialog.exec() != QDialog::Accepted)
        return;

    if (dialog.useInMemoryDatabase()) {
        QSqlDatabase::database("in_mem_db", false).close();
        QSqlDatabase::removeDatabase("in_mem_db");
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "in_mem_db");
        db.setDatabaseName(":memory:");
        if (!db.open())
            QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
                                                                         "opening the connection: ") + db.lastError().text());
        QSqlQuery q("", db);
        q.exec("drop table Movies");
        q.exec("drop table Names");
        q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)");
        q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')");
        q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')");
        q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')");
        q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')");
        q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')");
        q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)");
        q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')");
        q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')");
        q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')");
        q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')");
        q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')");
        connectionWidget->refresh();
    } else {
        QSqlError err = addConnection(dialog.driverName(), dialog.databaseName(), dialog.hostName(),
                           dialog.userName(), dialog.password(), dialog.port());
        if (err.type() != QSqlError::NoError)
            QMessageBox::warning(this, tr("Unable to open database"), tr("An error occurred while "
                                       "opening the connection: ") + err.text());
    }
}
Ejemplo n.º 26
0
ProvidersDialog::ProvidersDialog(QWidget *parent, LkSettingsManager *settings, QSqlDatabase *db) :
    QDialog(parent),
    ui(new Ui::ProvidersDialog)
{
    ui->setupUi(this);

    m_settings = settings;
    connect(ui->checkBox, SIGNAL(toggled(bool)), m_settings, SLOT(setShowAllProvs(bool)));

    m_model = new LkSqlTableModel(this, *db);
    m_model->setTable("Providers");
    m_model->setFilter("is_deleted = 0");

    QSqlError er = m_model->lastError();

    if(er.type() != QSqlError::NoError) {
        QMessageBox::critical(this, tr("Ошибка открытия таблицы"), tr("Ошибка %1\n%2").arg( QString::number(er.type()), er.text()), QMessageBox::Close);
    }

    connect(this, SIGNAL(accepted()), m_model, SLOT(submitAll()));

    initModel();
}
Ejemplo n.º 27
0
QSqlError DetaDoc::connectToDb()
{
    db = QSqlDatabase::addDatabase("QMYSQL3");
    db.setDatabaseName(dbName);
    db.setHostName(dbHost);
    db.setPort(dbPort);
    db.setUserName(dbUser);
    db.setPassword(dbPass);

    QSqlError err;
    if(!db.open())
    {
        err = db.lastError();
        db = QSqlDatabase();
    }

    if(err.type() != QSqlError::NoError)
    {
        QMessageBox::warning(this, tr("Unable to open database"),
                             err.text());
    }
    return err;
}
Ejemplo n.º 28
0
SvDeviceEditor::SvDeviceEditor(QWidget *parent, int deviceId) :
  QDialog(parent),
  ui(new Ui::SvDeviceDialog)
{
  ui->setupUi(this); 

  showMode = deviceId == -1 ? smNew : smEdit;
  
  if(!loadKTSs())
    QMessageBox::critical(this, "Error", _last_error, QMessageBox::Ok);
  
  loadPorts();
  
  if(showMode == smEdit) {
    
    QSqlQuery* q = new QSqlQuery(SQLITE->db);
    QSqlError serr = SQLITE->execSQL(QString(SQL_SELECT_ONE_DEVICE).arg(deviceId), q);
    
    if(QSqlError::NoError != serr.type()) {  

      delete q;
      
      _last_error = serr.text();
      QDialog::done(Error);
      return;
      
    }
    
    q->first();
    
    _id = q->value("device_id").toInt();
    _device_name = q->value("device_name").toString();
    _device_kts_id = q->value("device_kts_id").toInt();
    _device_ifc_name = q->value("device_ifc_name").toString();
    _device_protocol_name = q->value("device_protocol_name").toString();
    _device_connection_params = q->value("connection_params").toString();
    _device_data_type_name = q->value("device_data_type_name").toString();
    _device_data_length = q->value("device_data_length").toString(); 
    _device_driver_path = q->value("device_driver_lib_path").toString();
    _device_description = q->value("device_description").toString(); 
    
    q->finish();
    delete q;
    
    ui->cbDeviceType->setCurrentIndex(ui->cbDeviceType->findData(_device_kts_id));
    
  }
   
  
  if(showMode == smNew) this->setWindowTitle("Новое устройство");
  else this->setWindowTitle(QString("Устройство: %1").arg(_device_name));
  
  if(showMode == smNew) ui->editID->setText("<Новый>");
  else  ui->editID->setText(QString::number(_id));
  
  ui->editDeviceName->setText(_device_name);
//  ui->cbDevicePortName->setCurrentIndex(ui->cbDevicePortName->findText(_device_port_name));
  ui->editDeviceIfc->setText(_device_ifc_name);
  ui->editDeviceProtocol->setText(_device_protocol_name);
  ui->editDeviceDataType->setText(_device_data_type_name);
  ui->editDeviceDataLength->setText(_device_data_length);
  ui->editDeviceDriverPath->setText(_device_driver_path);
  ui->textDeviceDescription->setText(_device_description);
  
  connect(ui->bnSave, &QPushButton::clicked, this, &QDialog::accept);
  connect(ui->bnCancel, &QPushButton::clicked, this, &QDialog::reject);
  connect(ui->bnNewDeviceType, &QPushButton::clicked, this, &SvDeviceEditor::newKTS);
  connect(ui->bnEditDeviceType, &QPushButton::clicked, this, &SvDeviceEditor::editKTS);
//  connect(ui->bnConfig, SIGNAL(clicked()), this, SLOT(config()));
  
  this->setModal(true);
  this->show();
}
Ejemplo n.º 29
0
void SvDeviceEditor::accept()
{
  try {
    
    /* делаем всякие проверки вводимых данных */
    if(ui->editDeviceName->text() == "") {
      
      QMessageBox::critical(0, "Ошибка", "Имя устройства не указано");
      ui->editDeviceName->setFocus();
      return;
    }
  
  if(ui->cbDevicePortName->currentText().isEmpty() | (ui->cbDevicePortName->currentIndex() == -1)) {
    
    QMessageBox::critical(0, "Ошибка", "Необходимо указать порт");
    ui->cbDevicePortName->setFocus();
    return;
  }
  
//  /* конец проверок */
  
    _device_name = ui->editDeviceName->text();
    _device_kts_id = ui->cbDeviceType->currentData().toInt();
//    _device_connection_params = ui->cbDevicePortName->currentText();
    _device_description = ui->textDeviceDescription->toPlainText();
  
    switch (this->showMode) {
      
      case smNew: {
        
        QSqlError serr = SQLITE->execSQL(QString(SQL_NEW_DEVICE)
                                         .arg(_device_name)
                                         .arg(_device_kts_id)
                                         .arg(_device_connection_params)
                                         .arg(_device_description));
        
        if(QSqlError::NoError != serr.type()) _exception.raise(serr.text());
        
        break;
      }
        
      case smEdit: {
        
        QSqlError serr = SQLITE->execSQL(QString(SQL_UPDATE_DEVICE)
                                         .arg(_device_name)
                                         .arg(_device_kts_id)
                                         .arg(_device_connection_params)
                                         .arg(_device_description)
                                         .arg(_id));
        
        if(QSqlError::NoError != serr.type()) _exception.raise(serr.text());
  
        break;
      }
    }
  
    QDialog::done(Accepted);
  
  }
  
  catch(SvException& e) {
    
    _last_error = e.error;
    QDialog::done(Error);
  }
  
}
Ejemplo n.º 30
0
 void dbError(const QSqlError & dbe) {
     QMessageBox::critical(this, tr("Cannot open database"),
                           tr("Error") + ":\n" + castError(dbe.type()) + "\n\n" + dbe.text(), QMessageBox::Ok);
 }