Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt4] 2 и более соединения с БД 
:(
    Опции темы
stallman
Дата 13.10.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Необходимо осуществить одновременное соединение  с 2мя БД примерно в таком контексте

Код

AppContext *ac = new AppContext();
ac->init("file.ini");
AppContext::setContext(ac);
    
Cassa * cassa = new Cassa();
cassa->setConnection(ac->getConnection()); //передает QSQLDatabase
cassa->select();
    
while (cassa->next()) {
  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  db.setHostName(cassa->getHost());
  db.setDatabaseName(cassa->getDbname());
  db.setUserName(cassa->getUsername());
  db.setPassword(cassa->getPassword());
  if(!db.open()){
    qWarning()<<" DataBase don't open";
    exit(0);
  }
  Sale * sale = new Sale();  // соединение с другой БД
  sale->setConnection(db);
  sale->select();
  sale->next();

  /* ***** */

  Replicator * repl = new Replicator();
  repl->setConnection(ac->getConnection()); // соединение с первой БД
  repl->select();
  while (repl->next()) {
    int state = repl->getState();
    if ((state!=0) && (state!=10)) {
   qDebug() << " uncompleted operations found";
  }
} 


объектам repl sale и cassa для QSQLQuery передаются соответствующие QSqlDataBase (методом setConnection)

Делая как описано выше соединения остаются прежними тоесть не сменяются при выставлении через setConnection.

Может надо делать как то иначе ?

Код родителя repl sale и cassa

Код

void Storage::setConnection(QSqlDatabase con){
    connection = &con;
}

void Storage::exec(QString str){    
        if(query==NULL){
         if (connection == NULL) {
             query=new QSqlQuery(AppContext::getContext()->getConnection());
         } else {
             query=new QSqlQuery(*connection);
         }
            //query->setForwardOnly(1);
        }

        if (query->exec(str)==1)
            qDebug()<<" QUERY: "<<str;
        else
            qDebug()<<" ERROR IN QUERY: "<<str<<'\n'<<query->lastError().text();
}

PM MAIL   Вверх
stallman
Дата 13.10.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



возник еще вопрос
могут ли быть одновременно открытыми сразу несколько БД ? 
либо необходимо после использования каждой переоткрывать ее заново?
PM MAIL   Вверх
stallman
Дата 13.10.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



спасибо проблему решил)
PM MAIL   Вверх
aspirin2003
Дата 13.10.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.3.2007
Где: Саратов

Репутация: нет
Всего: нет



Напиши что-ли, как проблема то решилась, а то потом еще у кого-нибудь возникнет такой вопрос   smile 
PM MAIL   Вверх
stallman
Дата 14.10.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



просто в моем случае ac->getConnection оказывается возвращало &SqlDataBase а не SqlDataBase поэтому и не работало
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.