Russian Qt Forum
Ноябрь 27, 2024, 22:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ODBC + MSSQL?  (Прочитано 8148 раз)
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] Источник данных не найден и не указан драйвер, используемый по умолчанию.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 21, 2009, 12:34 »

Дык для ODBC нужно в setDatabaseName не путь к базе указывать, а строку подключения. Это совершенно разные вещи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Декабрь 21, 2009, 14:26 »

либо писать туда длиннющую строчку с параметрами, синтаксис не помню, по инету искать нужно.
Записан

Юра.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Декабрь 21, 2009, 17:27 »

либо писать туда длиннющую строчку с параметрами, синтаксис не помню, по инету искать нужно.
Это и есть строка подключения. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Sacha
Гость
« Ответ #4 : Декабрь 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();

   }
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Декабрь 21, 2009, 19:14 »

Это что? Драйвер не понятный, где путь к базе?
Вот тут можешь глянуть пример строки подключения: http://www.prog.org.ru/topic_10362_0.html

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GraninAS
Гость
« Ответ #6 : Декабрь 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), там есть класс для подключения к ODBC. Простой и не требует лишних телодвижений.
Записан
GraninAS
Гость
« Ответ #7 : Декабрь 24, 2009, 05:26 »

И еще. Когда вы скомпилируете программу на релиз, у вас должны быть файлы драйверов где-то рядом. Лучше всего делать так: в main.cpp прописать путь к плагинам:

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

Затем в папке с exe-шником создать plugins, куда поместить sqldrivers из %QTDIR%\plugins. Так же делается, если вы используете иконки. Вам тогда понадобятся плагины для разных форматов картинок.
Записан
GraninAS
Гость
« Ответ #8 : Декабрь 24, 2009, 05:29 »

Наконец, последнее. Меня и напарника совершенно озадачивала "картина маслом" после того, как мы уже подключились-таки к SQL Server. Запросы выполнялись, а в таблицах ничего не отображалось, и модели были пустыми. Как, почему?.. Оказалось, у логин-пароля, под которым мы входили, не было прав то на одно, то на другое. Советую так: для разработки дать права владельца, а потом уже, если понадобится, тонко настраивать отдельные разрешения.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.16 секунд. Запросов: 22.