Название: Соединение с БД Отправлено: QCasper от Июль 25, 2006, 10:19 У меня есть дллка, которая экспортирует класс, в котором происходит соединение с БД (mysql), и с помощью определенных методов тянуться данные. Пользователь имеет возможность настроить прием данных, например указать таблицу. Класс из дллки экспортируется следующим образом:
Код: extern "C" Connection* Instance() { т.е. пользователь может наплодить кучу инстанций, вызовом этой ф-ции, каждую инстанцию настроить на определенную таблицу. Проблема заключается в том, что при попытке установки соединения с БД скажем во второй инстанции, соединение, установленное до этого в первой, теряется. Собсно вопрос, как сделать чтобы все инстанции могли одновременно поддерживать соединение и тянуть данные? Название: Соединение с БД Отправлено: QCasper от Июль 26, 2006, 08:36 Зададим вопрос по другому. Реально ли к одной и той же базе данных mysql установить одновременно несколько соединений и тянуть данные?
Название: Соединение с БД Отправлено: BaltikS от Июль 26, 2006, 09:39 можно и это работает, тока что проверил
Название: Соединение с БД Отправлено: QCasper от Июль 26, 2006, 13:09 Цитата: "BaltikS" можно и это работает, тока что проверил будь любезен, зашли пожалуйста рабочие исходники куда нить - посмотреть, и желательно дамп таблицы, с которой тестил. добавлено спустя 23 минуты: Цитата: "BaltikS" можно и это работает, тока что проверил вот такой код: Код: QSqlDatabase *m_DB = new QSqlDatabase; на последней строчке (*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 от Июль 26, 2006, 13:37 к mysql базе реально до 200 соединений установить
а код instance выглядит странновато если так Код: extern "C" Connection* Instance() { Название: Соединение с БД Отправлено: BaltikS от Июль 26, 2006, 13:44 QCasper, а где твой обещанный мануал по сборке драйвера Мускула?
Я проверял на Постргресе - работает! Строчки моего кода, почти идентичны твоему! Название: Соединение с БД Отправлено: QCasper от Июль 26, 2006, 14:01 Цитата: "BaltikS" QCasper, а где твой обещанный мануал по сборке драйвера Мускула? Я проверял на Постргресе - работает! Строчки моего кода, почти идентичны твоему! обещал не я, а crocus :) кстати он скинул http://source.foliant.net.ru/plugin.zip блин, а у меня не пашет... может мускл не разрешает одновременные соединения.... или драйвер тупит... добавлено спустя 2 минуты: Цитата: "Admin" к mysql базе реально до 200 соединений установить а код instance выглядит странновато если так Код: extern "C" Connection* Instance() { да дело уже даже не в Instance, смотри код выше, вообще отдельное приложение из 4х строк... короче вот приложение: Код: #include <QtGui/QApplication> вот выдержка из аутпута: 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 от Июль 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 от Июль 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 от Июль 26, 2006, 15:24 и снова в доку :)
QStringList QSqlDatabase::connectionNames () Название: Соединение с БД Отправлено: QCasper от Июль 26, 2006, 15:28 Цитата: "alexis" и снова в доку :) QStringList QSqlDatabase::connectionNames () а цукко, тороплюсь все время, до статических мемберов не нашел, и решил что нет :) спасибо :) Название: Соединение с БД Отправлено: alexis от Июль 26, 2006, 16:29 дык не за что
внимательнее в доку(оочень грамотную) глядим. |