Russian Qt Forum

Qt => Базы данных => Тема начата: Sacha от Декабрь 21, 2009, 11:39



Название: ODBC + MSSQL?
Отправлено: Sacha от Декабрь 21, 2009, 11:39
При попытке подсоедениться к базе:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("C:\......\Library.mdf");

     db.setUserName("...");
     db.setPassword("...");

   if (!db.open()) {
         QLabel *label = new QLabel(db.lastError().databaseText());
   label -> show();

выдает ошибку
[Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию.


Название: Re: ODBC + MSSQL?
Отправлено: Пантер от Декабрь 21, 2009, 12:34
Дык для ODBC нужно в setDatabaseName не путь к базе указывать, а строку подключения. Это совершенно разные вещи.


Название: Re: ODBC + MSSQL?
Отправлено: lit-uriy от Декабрь 21, 2009, 14:26
либо писать туда длиннющую строчку с параметрами, синтаксис не помню, по инету искать нужно.


Название: Re: ODBC + MSSQL?
Отправлено: Пантер от Декабрь 21, 2009, 17:27
либо писать туда длиннющую строчку с параметрами, синтаксис не помню, по инету искать нужно.
Это и есть строка подключения. :)


Название: Re: ODBC + MSSQL?
Отправлено: Sacha от Декабрь 21, 2009, 19:02
Изменил. Теперь сообщение об ошибке пустое, но к базе не присоединился

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={SQL Server}Server=127.0.0.1;Database=Library");
db.setUserName("username");
db.setPassword("pasword");
   if (!db.open()) {
         QLabel *label = new QLabel(db.lastError().databaseText());
   label -> show();

   }


Название: Re: ODBC + MSSQL?
Отправлено: Пантер от Декабрь 21, 2009, 19:14
Это что? Драйвер не понятный, где путь к базе?
Вот тут можешь глянуть пример строки подключения: http://www.prog.org.ru/topic_10362_0.html

===========================
Вот на этом сайте ты найдешь помощь. http://connectionstrings.com/


Название: Re: ODBC + MSSQL?
Отправлено: GraninAS от Декабрь 24, 2009, 05:19
Я подключаюсь к MS SQL Server 2000 через источники данных, в db.setDatabaseName() прописывая только имя источника данных. Делается это следующим образом:

1. Панель управления->Администрирование->Источники данных (ODBC)
2. Добавляем новый источник данных, выбираем для него SQL Server (последняя строка в списке).
3. Вводим имя источника данных (которое потом будет указываться для setDatabaseName()), на той же вкладке выбираем SQL Server (если их несколько).
4. На следующем шаге указываем, как этот источник данных будет входить на сервер (проверка подлинности): через учетку пользователя или со своим логин-паролем. Я через учетку не пробовал, вводил ему нужного пользователя SQL-сервака, и вбивал пароль.
5. К следующему шагу можно перейти, если проверка подлинности прошла успешно. Выбираем базу данных по умолчанию. НЕ выбирать не пробовал, не знаю, что получится.
6. Есть еще окно настроек, но там менять не особо когда что нужно. Завершаем создание источника данных и тестируем подключение в последнем окне.

Теперь пробуем источник данных. В setDatabaseName() пишем имя источника данных; в setHostName() передаем пустую строку; в setUserName() и setPassword() передаем логин-пароль пользователя. Причем, замечу, что это может быть и другой логин-пароль, а не тот, который мы прописывали для источника данных.

По идее, это все. Должно подключиться.

Кстати, мы с напарником сами долго бились с этим ODBC. Ну не подключался, и все...

Еще кстати. Можете попробовать QST (http://www.prog.org.ru/topic_11637_0.html (http://www.prog.org.ru/topic_11637_0.html)), там есть класс для подключения к ODBC. Простой и не требует лишних телодвижений.


Название: Re: ODBC + MSSQL?
Отправлено: GraninAS от Декабрь 24, 2009, 05:26
И еще. Когда вы скомпилируете программу на релиз, у вас должны быть файлы драйверов где-то рядом. Лучше всего делать так: в main.cpp прописать путь к плагинам:

a.addLibraryPath(a.applicationDirPath() + "/plugins");

Затем в папке с exe-шником создать plugins, куда поместить sqldrivers из %QTDIR%\plugins. Так же делается, если вы используете иконки. Вам тогда понадобятся плагины для разных форматов картинок.


Название: Re: ODBC + MSSQL?
Отправлено: GraninAS от Декабрь 24, 2009, 05:29
Наконец, последнее. Меня и напарника совершенно озадачивала "картина маслом" после того, как мы уже подключились-таки к SQL Server. Запросы выполнялись, а в таблицах ничего не отображалось, и модели были пустыми. Как, почему?.. Оказалось, у логин-пароля, под которым мы входили, не было прав то на одно, то на другое. Советую так: для разработки дать права владельца, а потом уже, если понадобится, тонко настраивать отдельные разрешения.