crossplatform.ru

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

dexter_man
  опции профиля:
сообщение 17.5.2008, 21:04
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.5.2008
Пользователь №: 173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Тут такая проблема организовалась: есть две базы данных, одна создается в памяти, вторая берется из файла.
QSqlDatabase db_mem = QSqlDatabase::addDatabase("QSQLITE");
QSqlDatabase db_file = QSqlDatabase::addDatabase("QSQLITE");
db_mem.setDatabaseName(":memory:");
db_file.setDatabaseName("file_db");

Доступ к этим базам нужен во всех классах программы.
Каким образом такое можно организовать?
Мож их нужно как-то глобально объявить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 26.5.2008, 20:16
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Arceny @ 26.5.2008, 19:37) *
db = QSqlDatabase::addDatabase(cnf.dbType);
Ты немного не правильно это делаешь, можно добавлять несколько БД, и одновременно с ними работать:
Цитата
Первый аргумент QSqlDatabase::addDatabase() - это имя драйвера. Для получения списка драйверов, см. документацию addDatabase(). Для инициализации данных соединения мы вызываем setHostName(), setDatabaseName(), setUserName() и setPassword().

Так как имя соединения не определено, соединение становится соединением по умолчанию. Для определения имени, передайте его в качестве второго аргумента в QSqlDatabase::addDatabase(). Например:
        QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
        QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");
Как только соединение инициализировано, мы должны вызвать QSqlDatabase::open() для открытия бызы данных и получения доступа к данным. Если запрос соединения потерпит неудачу, функция возвратит false; информацию об ошибке можно получить из QSqlDatabase::lastError().

Как только соединение установлено, мы можем получить указатель на него из любого места прораммы, вызвав статическую функцию QSqlDatabase::database(). Если мы вызываем данную функцию без параметра, она возвратит указатель на соединение по умолчанию. Если функция вызывается с идентификатором, использованным при установке соединения, она возвратит ссылку на указанное соединение. Например:
        QSqlDatabase defaultDB = QSqlDatabase::database();
        QSqlDatabase firstDB = QSqlDatabase::database("first");
        QSqlDatabase secondDB = QSqlDatabase::database("second");

Для удаления соединения с базой данных, сначала закройте базу данных с помощью QSqlDatabase::close(), а затем, удалите ее с помощью статического метода QSqlDatabase::removeDatabase().
Читаем: Модуль QtSql ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- dexter_man   Базы данных   17.5.2008, 21:04
- - Litkevich Yuriy   Цитата(dexter_man @ 18.5.2008, 1:04) Мож ...   17.5.2008, 21:18
- - dexter_man   получается, что в любой части программы (в любом к...   17.5.2008, 21:24
- - Litkevich Yuriy   Цитата(dexter_man @ 18.5.2008, 1:21) Я пр...   17.5.2008, 21:31
- - dexter_man   Не, то что надо открывать эт я уже понял, а как то...   17.5.2008, 21:34
- - Litkevich Yuriy   close() , я предпочитаю закрывать, может Qt и сама...   17.5.2008, 21:47
- - Arceny   А как быть, если я в процессе работы программы хоч...   26.5.2008, 18:37
- - Litkevich Yuriy   Цитатаvoid QSqlDatabase::removeDatabase ( const QS...   26.5.2008, 19:04
- - Arceny   У меня нет отпкрытых запросов. У меня вообще в моё...   26.5.2008, 19:17
- - ViGOur   Цитата(Arceny @ 26.5.2008, 19:37) db = QS...   26.5.2008, 20:16
- - Litkevich Yuriy   ViGOur, да можно и так как он, открывать/закрывать...   26.5.2008, 20:24
- - Arceny   В общем всё понятно. В моей переменной cnf.dbType ...   26.5.2008, 20:25
- - Litkevich Yuriy   Цитата(Arceny @ 27.5.2008, 0:25) Таким об...   26.5.2008, 20:27
- - ViGOur   Угу, именно так. Просто в данном случае QSqlDataba...   26.5.2008, 20:31
- - Litkevich Yuriy   На счет этого сообщения:Цитата(Litkevich Yuriy ...   27.5.2008, 22:50


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 10:16