ЮрийСәуір 11, 2017, 12:02 Т.Қ.
Обновление модели по таймеру при изменении в БД
Как реализовать механизм обновления данных в QTableView при изменении в БД MySQL
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 10:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 4:20 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 11:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 11 Т.Ж.
BlinCTМамыр 5, 2024, 3:46 Т.Қ.
Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
Ну, если вопрос по реализации обновления от таймера, то по сигналу просто делайте select в модели данных. Если конечно используется какая-нибудь модель данных типа QSqlTableModel , QSqlRealtionalTableModel или модель наследованная от этих моделей.
В заголовочном файле добавьте объект QTimer, можно причём сохранить в стеке, а не в куче через оператор new .
А если учесть, что метод select() у модели данных QSqlTableModel является публичным слотом, то можно напрямую сигнал от таймера подключить к этому методу. Тогда с определённой периодичностью будут обновляться данные, если они изменялись.
Вот например обновление раз в минуту:
Модель данных должна быть установлена в QTableView . Чтобы узнать об изменениях в базе данных, нужно будет сделать выборку ( select() ). Сама БД никак не сообщит об этом.
Так я и сделал, но мне надо при изменении данных в таблице БД .
Когда происходит изменение данных в таблице БД? При каких действиях. Они же не на пустом месте происходят? При изменении данных сторонними средствами? Сторонней программой? Или вашей же программой? Поподробнее никак нельзя объяснить проблему? Серебряной пули не бывает.
А если проверять значения с помощью
и сравнивать с ранее сохраненным значением?Да. Это может сработать. Во всяком случае нагрузка может уменьшиться. Вместо того, чтобы тащить всю таблицу через select будете делать более экономичный запрос, но опять же по таймеру. Вообще у QSqlDriver есть возможность подписки на уведомления от базы данных. Метод subscribeToNotification , но вот тут уже проблема имеется в том, что MySQL не имеет механизма notify , то есть подписаться на уведомления от базы данных просто так не получится, вообще информации по MySQL на эту тему практически нет. А вот с PostgreSQL здесь в разы лучше ситуация. У него имеются уведомления, на которые можно подписаться, самые простые NOTIFY, LISTEN, UNLISTEN . Можно вроде как и на отдельные таблицы подписываться. Так что в случае с PostgreSQL это проще реализовать. Сама база данных будет этому способствовать. В случае же с MySQL - это таймеры и прочие костыли. Так что, если есть возможность сменить БД , то подумайте над этим.