Здравствуйте, гость ( Вход | Регистрация )
| Гость_Sterr_* |
12.4.2009, 12:51
Сообщение
#1
|
|
Гости |
Есть gui приложение работающее с базой. Пытаюсь сделать так, чтобы вся работа с базой была выделена в отдельном потоке. После того как поток запущен ему будет передаваться через сигнал-слот указатель на класс Command, который наследуется остальными классами инкапсулирующими специфику команды. Набросал макет:
CODE CODE CODE Вопросов 2: 1) db =new QSqlDatabase::addDatabase("QPSQL"); не работает =(( Я так понимаю что надо или разименование, или создавать объект? Но ведь для того чтобы он выполнялся в отдельном потоке он должен создаваться в секции run ?? 2) Реально ли реализовать то что здесь описанно, в смысле.. правильном ли путём иду? Тоесть ещё раз если в кратце: два потока - главный gui и поток работы с бд. Например при щелчке по форме с поиском вызывается слот который задаёт в соответствующий класс наследованный от Command нужные значения и высылает сигнал с указателем на этот класс. Этот сигнал соединяется со слотом из потока по работе бд sqlExex, в котором потом вызывается Command.startCommand(QSqlDatabase *db) внутри которого создаётся QSqlQuery и идёт вся работа запроса с базой. |
|
|
|
![]() |
|
padla |
21.4.2009, 17:52
Сообщение
#2
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 17.11.2008 Пользователь №: 424 Спасибо сказали: 0 раз(а) Репутация: 0
|
Небольшой вопрос. А что произойдет если во время работы программы соединение с БД разорвется?
|
|
|
|
|
SABROG |
21.4.2009, 21:59
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Цитата(padla @ 21.4.2009, 18:52) Link Небольшой вопрос. А что произойдет если во время работы программы соединение с БД разорвется? Это риторический вопрос или он адресован к конкретной реализации взаимодействия с базой данных через разные потоки? Если первое, то зависит от того написал ли ты проверку на возвращение ошибок при работе с запросами. Если не написал, то возможен любой исход от продолжения нормальной работы программы до AV. А вот с поделками на Delphi обычно это заканчивается выведением окна (иногда бесконечное их создание) о разрыве соединения без дальнейшей возможности к переподключению до перезагрузки программы. Если вопрос с подтекстом типа, что будет если в этот момент передавались данные, то обычно происходит откат и это никак не влияет на целостность базы данных. Но она должна поддерживать команды BEGIN TRANSACTION ... END TRANSACTION. Сообщение отредактировал SABROG - 21.4.2009, 22:02 |
|
|
|
Sterr QSqlDatabase в отдельном потоке 12.4.2009, 12:51
Litkevich Yuriy Цитата(Гость_Sterr_* @ 12.4.2009, 16:51) ... 12.4.2009, 13:05
Sterr Цитатаdb = new QSqlDatabase();
db->addDatabase(... 12.4.2009, 13:08
Sterr Фразу
"Соединение может использоваться только... 12.4.2009, 13:12
Litkevich Yuriy QSqlDatabase::addDatabase("QPSQL"); не в... 12.4.2009, 13:21
Sterr Если правильно вас понял то в run() создаю соедине... 12.4.2009, 13:36
Litkevich Yuriy Цитата(Гость_Sterr_* @ 12.4.2009, 17:36) ... 12.4.2009, 14:25
defnull Добрый день. Столкнулся с такой проблемой.. Есть п... 18.4.2009, 21:12
Litkevich Yuriy Цитата(defnull @ 19.4.2009, 1:12) Есть по... 18.4.2009, 21:27
defnull Цитата(Litkevich Yuriy @ 18.4.2009, 22:27... 18.4.2009, 21:38
Litkevich Yuriy defnull, я к тому, что может быть лучше утяжелить ... 18.4.2009, 21:43
defnull Цитатаdefnull, я к тому, что может быть лучше утяж... 21.4.2009, 23:55
padla То-есть мне придется ручками опять устанавливать с... 22.4.2009, 17:02![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 15.12.2025, 14:27 |