crossplatform.ru

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


  Ответ в Open в классе QSqlDatabase
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 24.10.2015, 17:18
  С MySQL не пробовал, возможно твоя догадка верна, всё-таки MySQL - стационарная БД.
В Firebird (не стационарная, т.е. файлы БД могут лежать в разных местах) функция open() вернёт ЛОЖЬ, если файла БД нет в указанном месте.
At3iSt Дата 23.10.2015, 23:14
  пока придумал костыль.. после:
db.open()

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

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

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

а так, насколько я понял, метод open() вернёт false в том случае, если есть проблемы с драйвером (например отсутствует библиотека).. если же с драйвером всё ок, то вернёт true.
At3iSt Дата 23.10.2015, 18:35
  та же проблема.. специально на этом форуме зарегистрировался чтобы спросить )))
надо как-то проверить правильность подключения..
ht1515 Дата 16.10.2015, 17:49
  В чем суть ?

Цитата
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.

Если я прав про теорию с сессиями, то как вы проверяете наличие БД тогда?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 12:29