не могу понять принципа работы |
Здравствуйте, гость ( Вход | Регистрация )
не могу понять принципа работы |
FantasyOr |
16.3.2011, 15:34
Сообщение
#1
|
Студент Группа: Участник Сообщений: 75 Регистрация: 13.8.2010 Пользователь №: 1956 Спасибо сказали: 4 раз(а) Репутация: 0 |
Здравствуйте. Начал работать с базами данных.
Пример в книге гласит - создайте подключение к базе в отдельной функции в main.cpp, а потом можете по всему приложению где угодно выполнять запросы, заполнять модели и прочее. Не понятен собственно момент подключения QSqlQuery к QSqlDatabase, сначала думал что в QApplication хранится соединение и оттуда подключается, но его там нет. А вопрос возник в следствии надобности делать коммиты и роллбеки, а эти функции запускаются у конкретных экземпляров QSqlDatabase. Подскажите пожалуйста: где брать объект QSqlDatabase в описанной выше схеме, для вызова у него функций commitTransaction ... |
|
|
Kagami |
16.3.2011, 21:03
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
После того как ты создаешь объект QSqlDatabase с помощью функции QSqlDatabase::addDatabase(), он сохраняется где-то в памяти компьютера. Чтобы снова получить его не создавая новое соединение нужно использовать QSqlDatabase::database().
Например, в main создаем подключение:
А затем где нам нужно получаем его снова (в другой функции):
|
|
|
FantasyOr |
17.3.2011, 10:19
Сообщение
#3
|
Студент Группа: Участник Сообщений: 75 Регистрация: 13.8.2010 Пользователь №: 1956 Спасибо сказали: 4 раз(а) Репутация: 0 |
да, красиво.
QSqlDatabase::database().driver()->beginTransaction(); |
|
|
Litkevich Yuriy |
18.3.2011, 22:50
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Kagami |
18.3.2011, 23:31
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
он сохраняется где-то в памяти компьютера класс QSqlDatabase - именованный одиночка (в оригинале - "Value class"). поэтому соединение создаётся через статическую функцию-член, и получают соединение по имени также через статическиую функцию-член. Это я чтобы попроще объяснить и не пугать страшными словами. |
|
|
PAFOS |
24.3.2011, 17:52
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
А еще можно держать подключения к нескольких серверам
QSqlDatabase::addDatabase("QSQLITE",QLatin1String("OneConnection")); QSqlDatabase::addDatabase("QSQLITE",QLatin1String("TwoConnection")); ... ... QSqlDatabase db1 = QSqlDatabase::database("OneConnection"); QSqlDatabase db2 = QSqlDatabase::database("TwoConnection"); если при QSqlDatabase::addDatabase мы не указываем имя соединения, то оно будет носить имя по умолчанию и соответствнно QSqlDatabase::database() вернет это самое подключение по умолчанию. |
|
|
Текстовая версия | Сейчас: 22.11.2024, 16:10 |