crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Open в классе QSqlDatabase, смысл...
ht1515
  опции профиля:
сообщение 16.10.2015, 17:49
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 14.4.2012
Пользователь №: 3324

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




Репутация:   0  


В чем суть ?

Цитата
bool QSqlDatabase::open(const QString & user, const QString & password)

This is an overloaded function.

Opens the database connection using the given user name and password. Returns true on success; otherwise returns false. Error information can be retrieved using the lastError() function.

This function does not store the password it is given. Instead, the password is passed directly to the driver for opening the connection and it is then discarded.

See also lastError().


Либо он у меня не работает, либо я неправильно его трактую...

При инициализации забиваю все параметры (пароль, логин, драйвер, НАЗВАНИЕ БД, порт, айпишник).

И вызываю опен, затем делаю проверку
Цитата
bool QSqlDatabase::isOpen() const


всегда true....

О чем это true говорит? раньше я думал что это признак коннекта к БД, так как в мануале написано
Цитата
Opens the database connection using the given user name and password

Теперь мне кажется что это коннект к "сессии" работы с мусклом.

Просто я забиваю имена БД, которых нет вызываю этот open всегда он возвращает true.

Если я прав про теорию с сессиями, то как вы проверяете наличие БД тогда?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
At3iSt
  опции профиля:
сообщение 23.10.2015, 18:35
Сообщение #2


Новичок


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

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




Репутация:   0  


та же проблема.. специально на этом форуме зарегистрировался чтобы спросить )))
надо как-то проверить правильность подключения..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
At3iSt
  опции профиля:
сообщение 23.10.2015, 23:14
Сообщение #3


Новичок


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

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




Репутация:   0  


пока придумал костыль.. после:
db.open()

проверять количество таблиц в БД:
db.tables(QSql::Tables).length()

если 0, то связи с БД нет.. иначе всё в порядке..
конечно, у этого решения есть минусы, но для предварительной проверки сойдёт.. + ещё нужно проверять выполнение каждого запроса:
QSqlQuery::exec()

сей метод возвращает false если при выполнении запроса возникла ошибка.. ну и далее уже обрабатывать ошибки..

а так, насколько я понял, метод open() вернёт false в том случае, если есть проблемы с драйвером (например отсутствует библиотека).. если же с драйвером всё ок, то вернёт true.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.10.2015, 17:18
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


С MySQL не пробовал, возможно твоя догадка верна, всё-таки MySQL - стационарная БД.
В Firebird (не стационарная, т.е. файлы БД могут лежать в разных местах) функция open() вернёт ЛОЖЬ, если файла БД нет в указанном месте.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 15.10.2019, 1:50