/** * 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; }
/** * @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; }