Russian Qt Forum
Сентябрь 30, 2024, 08:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Соединение с БД  (Прочитано 8738 раз)
QCasper
Гость
« : Июль 25, 2006, 10:19 »

У меня есть дллка, которая экспортирует класс, в котором происходит соединение с БД (mysql), и с помощью определенных методов тянуться данные. Пользователь имеет возможность настроить прием данных, например указать таблицу. Класс из дллки экспортируется следующим образом:

Код:
extern "C" Connection* Instance() {
    return new Connection;
}


т.е. пользователь может наплодить кучу инстанций, вызовом этой ф-ции, каждую инстанцию настроить на определенную таблицу.

Проблема заключается в том, что при попытке установки соединения с БД скажем во второй инстанции, соединение, установленное до этого в первой, теряется. Собсно вопрос, как сделать чтобы все инстанции могли одновременно поддерживать соединение и тянуть данные?
Записан
QCasper
Гость
« Ответ #1 : Июль 26, 2006, 08:36 »

Зададим вопрос по другому. Реально ли к одной и той же базе данных mysql установить одновременно несколько соединений и тянуть данные?
Записан
BaltikS
Гость
« Ответ #2 : Июль 26, 2006, 09:39 »

можно и это работает, тока что проверил
Записан
QCasper
Гость
« Ответ #3 : Июль 26, 2006, 13:09 »

Цитата: "BaltikS"
можно и это работает, тока что проверил


будь любезен, зашли пожалуйста рабочие исходники куда нить - посмотреть, и желательно дамп таблицы, с которой тестил.

добавлено спустя 23 минуты:

 
Цитата: "BaltikS"
можно и это работает, тока что проверил


вот такой код:

Код:
QSqlDatabase  *m_DB = new QSqlDatabase;
(*m_DB) = QSqlDatabase::addDatabase("QMYSQL");

QSqlDatabase *m_DB1 = new QSqlDatabase;
(*m_DB1) = QSqlDatabase::addDatabase("QMYSQL");


на последней строчке
(*m_DB1) = QSqlDatabase::addDatabase("QMYSQL");

выдает в output вот такие варнинги:

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

вследствие чего попытка выполнить запрос относительно m_DB выдает в output:

QSqlQuery::exec: database not open
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Июль 26, 2006, 13:37 »

к mysql базе реально до 200 соединений установить

а код instance выглядит странновато
если так

Код:
extern "C" Connection* Instance() {
    // тут не хватает проверки, на уже созданное соединение
    return new Connection;
}
Записан
BaltikS
Гость
« Ответ #5 : Июль 26, 2006, 13:44 »

QCasper, а где твой обещанный мануал по сборке драйвера Мускула?

Я проверял на Постргресе - работает! Строчки моего кода, почти идентичны твоему!
Записан
QCasper
Гость
« Ответ #6 : Июль 26, 2006, 14:01 »

Цитата: "BaltikS"
QCasper, а где твой обещанный мануал по сборке драйвера Мускула?

Я проверял на Постргресе - работает! Строчки моего кода, почти идентичны твоему!


обещал не я, а crocus Улыбающийся
кстати он скинул http://source.foliant.net.ru/plugin.zip

блин, а у меня не пашет... может мускл не разрешает одновременные соединения.... или драйвер тупит...

добавлено спустя 2 минуты:

 
Цитата: "Admin"
к mysql базе реально до 200 соединений установить

а код instance выглядит странновато
если так

Код:
extern "C" Connection* Instance() {
    // тут не хватает проверки, на уже созданное соединение
    return new Connection;
}


да дело уже даже не в Instance, смотри код выше, вообще отдельное приложение из 4х строк...

короче вот приложение:

Код:
#include <QtGui/QApplication>
#include <qsqldatabase.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL");
    return 0;
}


вот выдержка из аутпута:

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed
Записан
alexis
Гость
« Ответ #7 : Июль 26, 2006, 14:26 »

млин
опять пошлю в доки Улыбающийся
----------------
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) )
Adds a database to the list of database connections using the driver type and the connection name connectionName. If there already exists a database connection called connectionName, that connection is removed.
----------------
укажите разные имена коннектам и все
Записан
QCasper
Гость
« Ответ #8 : Июль 26, 2006, 15:09 »

Цитата: "alexis"
млин
опять пошлю в доки Улыбающийся
----------------
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) )
Adds a database to the list of database connections using the driver type and the connection name connectionName. If there already exists a database connection called connectionName, that connection is removed.
----------------
укажите разные имена коннектам и все


я тоже сообразил в последний момент, вернее прочитал Улыбающийся
теперь один вопрос, а можно как-то узнать имена соединений, которые уже есть?
Записан
alexis
Гость
« Ответ #9 : Июль 26, 2006, 15:24 »

и снова в доку Улыбающийся
QStringList QSqlDatabase::connectionNames ()
Записан
QCasper
Гость
« Ответ #10 : Июль 26, 2006, 15:28 »

Цитата: "alexis"
и снова в доку Улыбающийся
QStringList QSqlDatabase::connectionNames ()


а цукко, тороплюсь все время, до статических мемберов не нашел, и решил что нет Улыбающийся
спасибо Улыбающийся
Записан
alexis
Гость
« Ответ #11 : Июль 26, 2006, 16:29 »

дык не за что
внимательнее в доку(оочень грамотную) глядим.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.