Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL + ODBC + Qt?  [new]
kamakama
Member

Откуда:
Сообщений: 203
Добрый день. Есть задача подключиться через ODBC из Qt (Windows) к MSSQL Express 2008 R2. TCP/IP настроили (через ESF Database Migrator Toolkit данные залили с удаленной машины через mix auth (sa) ). Источник ODBC создали, проверка коннекта прошла успешно. Но через Qt все равно не видит (драйверы QODBC и QODBC3). Важно - инстанс именованный, соответственно, порт не родной. Возможно, проблема в этом, но как это проверить? Через менеджмент студию работа идет нормально.
21 янв 16, 10:12    [18709153]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
kamakama
Но через Qt все равно не видит

Не видит что ? И что написано в хелпе вашего Qt о настройке соединений ?
21 янв 16, 10:19    [18709174]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Горбаг
Member

Откуда: Москва
Сообщений: 4
Не видит что ? И что написано в хелпе вашего Qt о настройке соединений ?

Не видит сервер с базой.

Используем тестовый пример из Qt - SqlBrowser. Через него пытаемся подключиться к базе на удаленной машине, но подключение всякий раз отваливается с ошибкой:

ERROR -[Microsoft][SQL Native Client]SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]. [Microsoft][SQL Native Client]An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. [Microsoft][SQL Native Client]Login timeout expired QODBC3: Unable to connect
ERROR - Connection test with base q FAILED.
21 янв 16, 10:30    [18709205]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Горбаг
Не видит сервер с базой.

Он не не видит, он - "Login timeout expired"

Горбаг
Используем тестовый пример из Qt - SqlBrowser.

И это пример для именованного экземпляра с своим портом ?
21 янв 16, 10:33    [18709220]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
И что это вас двое стало ? Почкованием размножаетесь ?
21 янв 16, 10:33    [18709223]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Горбаг
Member

Откуда: Москва
Сообщений: 4
 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("SQLEXP2008R2_NATIVE");
    db.setUserName("user_test");
    db.setPassword("00000000");
    db.setPort(4150);


Вот пример используемого подключения, если не пользоваться sqlbrowser. Имя соответствует заданному источнику данных ODBC в ОС. Ошибка приведена выше. Кто-нибудь сталкивался?
21 янв 16, 10:45    [18709282]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
kamakama
Member

Откуда:
Сообщений: 203
Glory,

Нет, не почкованием. Ментально. Просто так было быстрее. Прошу прощение за некоторое введение в заблуждение.
21 янв 16, 10:48    [18709297]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Горбаг
Вот пример используемого подключения,

Еще раз вопрос
Это пример для именованного экземпляра сервера ?
Где здесь вообще имя сервера ?
Откуда вы взяли номер порта ?
Вы в той же менеджмент студии использовали этот порт для соединения ?
21 янв 16, 10:48    [18709300]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
kamakama
Member

Откуда:
Сообщений: 203
Glory,

Именованный экземпляр сервера 10.10.10.1\SQLEXP2008R2 , порт 4150. Номер порта получен командой
USE MASTER
GO
xp_readerrorlog 0, 1, N'Server is listening on'
GO
21 янв 16, 10:59    [18709361]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
kamakama
Именованный экземпляр сервера 10.10.10.1\SQLEXP2008R2 ,

И где же в вашем коде упомянут этот 10.10.10.1\SQLEXP2008R2 ?

kamakama
Номер порта получен командой

И вы в менеджмент студии использовали этот порт для соединения ?
21 янв 16, 11:01    [18709377]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
kamakama
Member

Откуда:
Сообщений: 203
Glory,

нет, студия подключалась по инстансу. Видимо, они как то разбираются между собой, кому на каком порту работать. Но сторонняя программа (ESF) смогла корректно подключиться (и перетащить данные) только по этому порту и никак иначе.
21 янв 16, 11:08    [18709417]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Горбаг
Member

Откуда: Москва
Сообщений: 4
Всем спасибо, все свободны. Решение проблемы для потомков:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={SQL Server Native Client 10.0};Server=10.10.10.1,4150;Database=myBase;Uid=user_name;Pwd=00000000");

Коннект и запросы из Qt работают.
При этом не нужно вносить никаких изменений в "Источники данных (ODBC)" в Администрировании машины, с которой пытаемся подключиться.

Перед этим установил Microsoft SQL Server 2008, после установки которого в списке драйверов при добавлении Источника данных ODBC из Администрирования как раз и появляется SQL Server Native Client 10.0 версии 2007.100.1600.22 (SQLNCLI10.DLL), который используется в строке подключения к базе. До установки MSSSQL2008 в списке значился лишь 1 нативный драйвер - SQL Native Client верси 2005.90.3042.00 (SQLNCLI.DLL). Скорее всего это тоже помогло (помимо правильной строки коннекта), ибо в ошибках от первых примеров коннекта мелькало значение 2005, что наталкивает на мысль использования неправильного драйвера...
21 янв 16, 12:21    [18709973]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Горбаг
При этом не нужно вносить никаких изменений в "Источники данных (ODBC)" в Администрировании машины, с которой пытаемся подключиться.

Вы бы хоть оригинальную документацию что-ли почитали

For the QODBC driver, the name can either be a DSN, a DSN filename (in which case the file must have a .dsn extension), or a connection string.
Т.е. ваш продукт позволяет 3(!) способа задания параметров соединения
21 янв 16, 12:40    [18710146]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Горбаг
Member

Откуда: Москва
Сообщений: 4
Glory,

Доку читал. Лично мне ничего не дала информация о том, что подключение возможно 3 этими способами. Я искал способ подключения к базам через строку коннекта. Вопрос был в правильном ее написании. Ну, и, как выяснилось, в необходимости установки соответствующего драйвера в системе (при установке MSSQL2008Express)/
21 янв 16, 12:54    [18710253]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Горбаг
Лично мне ничего не дала информация о том, что подключение возможно 3 этими способами.

Если вы не различаете ODBC DSN, FileDSN и ConnectionString, то вам не стоит писать инструкции "для потомков"

Горбаг
Ну, и, как выяснилось, в необходимости установки соответствующего драйвера в системе (при установке MSSQL2008Express)/

Или в правильном указании имени уже установленного драйвера.
Но вам же чтение документации ничего не дает.
21 янв 16, 12:57    [18710270]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL + ODBC + Qt?  [new]
komrad
Member

Откуда:
Сообщений: 5491
Горбаг

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={SQL Server Native Client 10.0};Server=10.10.10.1,4150;Database=myBase;Uid=user_name;Pwd=00000000");


порт может быть динамическим и при рестарте инстанса вы потеряете коннект
попробуйте вместо "IP,port" использовать "10.10.10.1\SQLEXP2008R2" в строке подключения
21 янв 16, 13:21    [18710417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить