Russian Qt Forum

Qt => Базы данных => Тема начата: LamerDrv от Август 01, 2005, 13:43



Название: Как обработать ошибку подключения к БД
Отправлено: LamerDrv от Август 01, 2005, 13:43
Подскажите, пожалуйста, как при работе с MS SQL Server через QT-шный TDS-драйвер правильно обрабатывать ошибку подключения к базе данных?

Например, такой простой сценарий:
программа при запуске выдает диалог в котором пользователь должен ввести имя и пароль для подключения к базе. Если пользователь ввел неправильное имя и/или пароль, как корректно обработать эту ситуацию? Т.е. как перехватить ошибку от SQL-сервера чтобы вывести сообщение обо ошибке, не прибегая к вызову функций самого MS SQL?


Название: Как обработать ошибку подключения к БД
Отправлено: alexis от Август 01, 2005, 21:46
if ( !db->open() )
   qDebug( db->lastError().text() );

??


Название: Как обработать ошибку подключения к БД
Отправлено: LamerDrv от Август 01, 2005, 22:24
Цитата: "alexis"
if ( !db->open() )
   qDebug( db->lastError().text() );

??


Увы, в случае с TDS-драйвером не пашет.
Вызов lastError() дает результат NoError.
Хотя с другими вроде все нормально работает (например, с PostgreSQL).
После просмотра исходного текста TDS-драйвера (qsql_tds.cpp) сложилось впечатление, что троли очень сильно не взлюбили MS SQL Server. Одни только методы beginTransaction(), commitTransaction() и rollbackTransaction() чего стоят  :cry:


Название: Как обработать ошибку подключения к БД
Отправлено: alexandrl от Август 02, 2005, 08:44
Похоже они вообще работу с SQL не взлюбили.
Это у всех серверов одна транзакция на одно соединение ?


Название: Как обработать ошибку подключения к БД
Отправлено: LamerDrv от Август 02, 2005, 14:47
Цитата: "alexandrl"
Похоже они вообще работу с SQL не взлюбили.


Ну, вообще-то, действительно работа с SQL сделана так себе. Может быть  делали на скорую руку, просто чтобы можно было заявить что она есть?

Цитата: "alexandrl"
Это у всех серверов одна транзакция на одно соединение ?


Нет, похоже одному MS SQL Server так не повезло  :)  (уж уделали так уделали). По крайней мере для драйверов ODBC и PostgreSQL методы поддержки транзакций содержат какой-то код, а не просто "return false;".
И по-крайней мере для PostgreSQL метод db->open() реализован нормально.

P.S: Я несколько озадачен. Столько хвалебных отзывов было о QT. Может это не относилось к работе с БД :?: