crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в не могу понять принципа работы
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
PAFOS Дата 24.3.2011, 17:52
  А еще можно держать подключения к нескольких серверам

QSqlDatabase::addDatabase("QSQLITE",QLatin1String("OneConnection"));
QSqlDatabase::addDatabase("QSQLITE",QLatin1String("TwoConnection"));

...
...

QSqlDatabase db1 = QSqlDatabase::database("OneConnection");
QSqlDatabase db2 = QSqlDatabase::database("TwoConnection");

если при QSqlDatabase::addDatabase мы не указываем имя соединения, то оно будет носить имя по умолчанию и соответствнно QSqlDatabase::database() вернет это самое подключение по умолчанию.
Kagami Дата 18.3.2011, 23:31
 
Цитата(Litkevich Yuriy @ 18.3.2011, 22:50) *
Цитата(Kagami @ 16.3.2011, 23:03) *
он сохраняется где-то в памяти компьютера
:)
класс QSqlDatabase - именованный одиночка (в оригинале - "Value class"). поэтому соединение создаётся через статическую функцию-член, и получают соединение по имени также через статическиую функцию-член.

Это я чтобы попроще объяснить :) и не пугать страшными словами.
Litkevich Yuriy Дата 18.3.2011, 22:50
 
Цитата(Kagami @ 16.3.2011, 23:03) *
он сохраняется где-то в памяти компьютера
:)
класс QSqlDatabase - именованный одиночка (в оригинале - "Value class"). поэтому соединение создаётся через статическую функцию-член, и получают соединение по имени также через статическиую функцию-член.
FantasyOr Дата 17.3.2011, 10:19
  да, красиво.

QSqlDatabase::database().driver()->beginTransaction();
Kagami Дата 16.3.2011, 21:03
  После того как ты создаешь объект QSqlDatabase с помощью функции QSqlDatabase::addDatabase(), он сохраняется где-то в памяти компьютера. Чтобы снова получить его не создавая новое соединение нужно использовать QSqlDatabase::database().
Например, в main создаем подключение:
     QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
     db.setHostName("acidalia");
     db.setDatabaseName("customdb");
     db.setUserName("mojito");
     db.setPassword("J0a1m8");
     bool ok = db.open();

А затем где нам нужно получаем его снова (в другой функции):
  QSqlDatabase db = QSqlDatabase::database();

FantasyOr Дата 16.3.2011, 15:34
  Здравствуйте. Начал работать с базами данных.
Пример в книге гласит - создайте подключение к базе в отдельной функции в main.cpp, а потом можете по всему приложению где угодно выполнять запросы, заполнять модели и прочее.

Не понятен собственно момент подключения QSqlQuery к QSqlDatabase, сначала думал что в QApplication хранится соединение и оттуда подключается, но его там нет. А вопрос возник в следствии надобности делать коммиты и роллбеки, а эти функции запускаются у конкретных экземпляров QSqlDatabase.

Подскажите пожалуйста: где брать объект QSqlDatabase в описанной выше схеме, для вызова у него функций commitTransaction ...
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 30.7.2025, 7:44