crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 19.4.2024, 1:10