Esempio n. 1
0
/**
 * Ajoute une base au pool de connexions.
 *
 * @param driver
 *    Voir doc Qt
 * @param host
 *    Hôte distant ou local
 * @param user
 *    Nom d'utilisateur
 * @param pswd
 *    Mot de passe
 * @param dbnm
 *    Base de données
 * @param save
 *    Déclenche l'enregistrement de la liste ou non
 */
int DbManagerPrivate::addDatabase(QString driver, QString host, QString user,
                            QString pswd, QString dbnm, bool save)
{
  QSqlDatabase db = QSqlDatabase::addDatabase(driver, genConnectionName());
  db.setHostName(host);
  db.setUserName(user);
  db.setPassword(pswd);
  db.setDatabaseName(dbnm);

  foreach(QSqlDatabase *d, dbList)
  {
    // on contrôle les éventuels doublons
    if (d->hostName() == db.hostName() &&
            d->userName() == db.userName() &&
            d->password() == db.password() &&
            d->databaseName() == db.databaseName())
    {
      LogDialog::instance()->append(
              QObject::tr("Attempting to add an existing connection."));
      return indexOf(d);
    }
  }

  QSqlDatabase *newDb = new QSqlDatabase(db);
  dbList.append(newDb);
  dbMap[newDb] = new QStandardItem(dbTitle(newDb));
  dbMap[newDb]->setEditable(false);

  dbMap[newDb]->setData(DbManager::DbItem, Qt::UserRole);
  dbMap[newDb]->setIcon(IconManager::get("connect_no"));
  dbMap[newDb]->setToolTip(dbToolTip(newDb));

//  if(!isRunning())
//    start();

  m_model->appendRow(dbMap[newDb]);
  if(save)
  {
    saveList();
    LogDialog::instance()->append(QObject::tr("Database %1 on %2 added")
            .arg(dbnm)
            .arg(host));
  }

  return dbList.size() - 1;
}
Esempio n. 2
0
/**
 * @brief DbManager::addDatabase
 * @param driver
 * @param host
 * @param user
 * @param pswd
 * @param dbnm
 * @param alias
 * @param wrapperName
 * @param save
 * @return the index of the added db OR if the db already exists, its index
 */
int DbManager::addDatabase(QString driver, QString host, QString user,
                           QString pswd, QString dbnm, QString alias,
                           QString wrapperName, bool save) {
    QSqlDatabase db = QSqlDatabase::addDatabase(driver, genConnectionName());
    db.setHostName(host);
    db.setUserName(user);
    db.setPassword(pswd);
    db.setDatabaseName(dbnm);

    for (int i=0; i<m_connections.length(); i++) {
        Connection* c = m_connections[i];
        // checking for doubles
        if (c->db()->hostName() == db.hostName() &&
                c->db()->userName() == db.userName() &&
                c->db()->password() == db.password() &&
                c->db()->databaseName() == db.databaseName()) {
            return i;
        }
    }

    QSqlDatabase* newDb = new QSqlDatabase(db);
    Connection* connection = new Connection(newDb, alias, this);
    connect(connection, SIGNAL(changed()), this, SLOT(refreshModelItem()));
    m_connections.append(connection);

    QString title;
    if (alias.isEmpty()) {
        title = dbTitle(newDb);
    } else {
        title = alias;
    }

    dbMap[newDb] = new QStandardItem(title);
    dbMap[newDb]->setEditable(false);

    dbMap[newDb]->setData(DbManager::DbItem, Qt::UserRole);
    dbMap[newDb]->setIcon(IconManager::get("database_connect"));
    dbMap[newDb]->setToolTip(dbToolTip(newDb));

    QList<QStandardItem*> uiItemList;
    // name
    uiItemList << dbMap[newDb];
    // icon (= DBMS icon)
    uiItemList << new QStandardItem(driverIcon[driver], "");
    uiItemList[1]->setSelectable(false);

    m_model->appendRow(uiItemList);

    SqlWrapper *wrapper = NULL;
    if (wrapperName.length() > 0) {
        wrapper = PluginManager::wrapper(wrapperName);
    } else if (!driver.startsWith("QODBC")) {
        wrapper = PluginManager::availableWrapper(driver);
    }

    if (wrapper) {
        dbWrappers[newDb] = wrapper->newInstance(newDb);
    }

    if (save) {
        saveList();
    }

    return m_connections.size() - 1;
}