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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: события от БД  (Прочитано 10858 раз)
vasasol
Гость
« : Февраль 11, 2010, 22:21 »

Здравствуйте!
вот захотелось от MySql 5.1 получать события об изменениях в БД
пробую так:

Код:
int main(int argc, char *argv[])
{
      Q_INIT_RESOURCE(application);
      QApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL", "mconn" );
    db.setDatabaseName( "xxxxx" );
    db.setUserName( "xxxxx" );
    db.setPassword( "xxxxx" );
    db.setHostName( "xxxxxxx" );
    if ( !db.open() ) {
        QMessageBox::critical(NULL,"Error connect",db.lastError().text());
        return FALSE;
    };

QSqlDriver *driver = db.database().driver();
if (driver->hasFeature(QSqlDriver::EventNotifications))
{
       app.connect(db.driver(), SIGNAL(notification(const QString&)), &app, SLOT(slotRefresh()));
} else QMessageBox::critical(0,"notify","Банан!!!!!!!");

Получаю "Банан!!!!!!"
Что я не дописал?
Записан
KADABRA
Гость
« Ответ #1 : Февраль 11, 2010, 22:24 »

вот захотелось от MySql 5.1 получать события об изменениях в БД
С какой версией клиентской библиотеки mysql собрана Qt?
Записан
vasasol
Гость
« Ответ #2 : Февраль 11, 2010, 22:36 »

вот захотелось от MySql 5.1 получать события об изменениях в БД
С какой версией клиентской библиотеки mysql собрана Qt?

4.5.3
Записан
KADABRA
Гость
« Ответ #3 : Февраль 11, 2010, 23:30 »

вот захотелось от MySql 5.1 получать события об изменениях в БД
С какой версией клиентской библиотеки mysql собрана Qt?
4.5.3
Я не версию Qt спрашиваю, а версию клиентской библиотеки mysql, с которой Qt скомпилирован.
Qt самосборная? Если нет, то скорее всего она собрана с библиотекой версии 5.0.x, тогда надо пересобрать плагин sqldrivers/qsqlmysql4 со свежей версией библиотеки, которая идёт в комплекте с MySQL.
« Последнее редактирование: Февраль 11, 2010, 23:32 от KADABRA » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Февраль 12, 2010, 00:15 »

vasasol, по моему ни один из SQL-драйверов Qt не имеет поддержки уведомлений (событий)
« Последнее редактирование: Февраль 12, 2010, 00:24 от lit-uriy » Записан

Юра.
vasasol
Гость
« Ответ #5 : Февраль 12, 2010, 00:23 »

вот захотелось от MySql 5.1 получать события об изменениях в БД
С какой версией клиентской библиотеки mysql собрана Qt?
4.5.3
Я не версию Qt спрашиваю, а версию клиентской библиотеки mysql, с которой Qt скомпилирован.
Qt самосборная? Если нет, то скорее всего она собрана с библиотекой версии 5.0.x, тогда надо пересобрать плагин sqldrivers/qsqlmysql4 со свежей версией библиотеки, которая идёт в комплекте с MySQL.
все библиотеки имеют 5.1, Qt не самосборная. И как тогда правильно пересобрать qsqlmysql4?
« Последнее редактирование: Февраль 12, 2010, 00:46 от vasasol » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Февраль 12, 2010, 00:24 »

, вот от драйвера мускуля, Qt 4.6.0
Код
C++ (Qt)
bool QMYSQLDriver::hasFeature(DriverFeature f) const
{
   switch (f) {
   case Transactions:
// CLIENT_TRANSACTION should be defined in all recent mysql client libs > 3.23.34
#ifdef CLIENT_TRANSACTIONS
       if (d->mysql) {
           if ((d->mysql->server_capabilities & CLIENT_TRANSACTIONS) == CLIENT_TRANSACTIONS)
               return true;
       }
#endif
       return false;
   case NamedPlaceholders:
   case BatchOperations:
   case SimpleLocking:
   case EventNotifications: // <-----------
   case FinishQuery:
       return false;
   case QuerySize:
   case BLOB:
   case LastInsertId:
   case Unicode:
   case LowPrecisionNumbers:
       return true;
   case PreparedQueries:
   case PositionalPlaceholders:
#if MYSQL_VERSION_ID >= 40108
       return d->preparedQuerysEnabled;
#else
       return false;
#endif
   case MultipleResultSets:
#if MYSQL_VERSION_ID >= 40100
       return true;
#else
       return false;
#endif
   }
   return false;
}
Записан

Юра.
vasasol
Гость
« Ответ #7 : Февраль 12, 2010, 01:12 »

vasasol, по моему ни один из SQL-драйверов Qt не имеет поддержки уведомлений (событий)
А как решить тогда задачу?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Февраль 12, 2010, 01:36 »

1) использовать клиентскую библиотеку СУБД
2) по таймеру проверять какую-либо таблицу в БД
Записан

Юра.
vasasol
Гость
« Ответ #9 : Февраль 12, 2010, 02:06 »

таймер не привлекает - это понятно как и неинтересно ..... а первый вариант как реализуется?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Февраль 12, 2010, 05:16 »

Что-то подобное обсуждалось здесь http://www.prog.org.ru/topic_11523_0.html и здесь http://www.prog.org.ru/topic_4577_0.html
Кстати там есть ссылка http://labs.trolltech.com/blogs/2007/11/02/asynchronous-database-event-notifications/ в которой говорится что события от БД работают в драйвере Postgress и Firebird
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Февраль 12, 2010, 07:32 »

В Postgress работает, проверено.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Февраль 12, 2010, 15:01 »

>>а первый вариант как реализуется?
Ну используя API СУБД. Например для Firebirda обычно пользуют библиотеку ibpp, не знаю почему, может родное API не очень удобное.
Я с мускулем не знаком, поэтому конкретно сказать не могу.

>>...в которой говорится что события от БД работают в драйвере Postgress и Firebird
Да, в исходниках драйвера Firebird'а я видел, что возвращается true, но работу не проверял.
Записан

Юра.
KADABRA
Гость
« Ответ #13 : Февраль 12, 2010, 18:11 »

1) использовать клиентскую библиотеку СУБД
2) по таймеру проверять какую-либо таблицу в БД
Ещё можно дописать драйвер Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Февраль 12, 2010, 21:04 »

>>Ещё можно дописать драйвер
угу
Записан

Юра.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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