Russian Qt Forum

Qt => Базы данных => Тема начата: Racheengel от Июль 15, 2007, 15:45



Название: MS SQL + ODBC (и не только)
Отправлено: Racheengel от Июль 15, 2007, 15:45
Добрый день.

Возникла следующая проблема: нужно начать работать с базой данных на MS SQL 2000 сервере, используя ODBC.

Собрал драйвер, создал DSN в ODBC администраторе и пытаюсь использовать его из программы как:

Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");


Получаю ошибку следующего содержания:

Цитировать
[ [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect]


В связи с этим несколько вопросов:

1. Как корректно организовать подключение к ODBC? Надо ли указывать какие-либо доп. параметры? Нужны ли специальные значения для user & password?
2. На машине несколько ODBC DSN'ов - как указать, к какому именно я хочу присоединиться?
3. Какие параметры DNS предпочтительней указывать при его создании? Имеется в виду имя и т.д.
4. Если базы данных на сервере нету, она должна создаваться из программы. С MYSQL работает прекрасно. Но будет ли это работать для MS SQL?
5. Надо ли задавать какие-либо определенные параметры для самого SQL сервера и базы данных, чтобы они корретно поддерживались?


Название: MS SQL + ODBC (и не только)
Отправлено: SABROG от Июль 15, 2007, 16:20
Добавь это
Код:

db.setDatabaseName("имя_dsn_источника");


В ODBC менеджере для источника вроде бы не обязательно устанавливать базу данных по умолчанию. В MSSQL чтобы узнать список таблиц или баз данных надо использовать системные таблицы и процедуры, почитай про это на форуме sql.ru, там отвечали на этот вопрос.


Название: MS SQL + ODBC (и не только)
Отправлено: Racheengel от Июль 15, 2007, 18:05
ок, спасибо, я тож так сделал, в конце концов,
вроде конектиться начало, но ошибка не пропала...
(хотя странно - пишет, что нету источника данных, хотя базу юзает...)

То есть вопрос 2 отпал. А вот с остальным пока не очень ясно.
Пункт 3 особо беспокоит.


Название: Re: MS SQL + ODBC (и не только)
Отправлено: WW от Июль 16, 2007, 12:48
Цитата: "Racheengel"

1. Как корректно организовать подключение к ODBC? Надо ли указывать какие-либо доп. параметры? Нужны ли специальные значения для user & password?
2. На машине несколько ODBC DSN'ов - как указать, к какому именно я хочу присоединиться?
3. Какие параметры DNS предпочтительней указывать при его создании? Имеется в виду имя и т.д.
4. Если базы данных на сервере нету, она должна создаваться из программы. С MYSQL работает прекрасно. Но будет ли это работать для MS SQL?
5. Надо ли задавать какие-либо определенные параметры для самого SQL сервера и базы данных, чтобы они корретно поддерживались?

по 3. как показали выше.
Код:
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={SQL Server};Server=XXX;APP=Enterprise Suite;DATABASE=XXX;Network=DBMSSOCN");
db.open("Login", "Pass")

можно так, если машина нулевая и твоего DSN'а еще нет.
если на локальном сервере будешь запускать, то Server=(local)
по 5. в основном не надо. это ближе к администрированию БД.
по 4. подключайся к БД master


Название: MS SQL + ODBC (и не только)
Отправлено: Racheengel от Июль 16, 2007, 13:07
ок, спасибо, попробую через master.
сейчас еще один головняк - заказчег хочет поддерживать и MySql, и M$ сервера. Но версии SQL у них тоже разные, вот пишу врапперы... :(


Название: MS SQL + ODBC (и не только)
Отправлено: WW от Июль 16, 2007, 13:12
Цитата: "Racheengel"
ок, спасибо, попробую через master.
сейчас еще один головняк - заказчег хочет поддерживать и MySql, и M$ сервера. Но версии SQL у них тоже разные, вот пишу врапперы... :(

страйся юзать стандарт SQL. меньше головняка будет. хотя избежать не удасться.
а.. и еще... названия таблиц и полей бери в "". на мс-кий [] забей.


Название: MS SQL + ODBC (и не только)
Отправлено: Racheengel от Июль 16, 2007, 13:14
да стараюсь...
только там приколы, например M$ "IF NOT EXISTS" не понимает, вместо AUTOINCREMENT надо другие вещи писать, бинд параметров тоже немного по другому... в общем, стандарты у них на все разные...


Название: MS SQL + ODBC (и не только)
Отправлено: WW от Июль 16, 2007, 13:17
Цитата: "Racheengel"
да стараюсь...
только там приколы, например M$ "IF NOT EXISTS" не понимает, вместо AUTOINCREMENT надо другие вещи писать, бинд параметров тоже немного по другому... в общем, стандарты у них на все разные...

тут опирайся на INFORMATION_SCHEMA. это стандарт. и сам ручками в коде... правда не помню, есть в мускуле оная. в PG точно есть. не говоря уж про коммерческие СУБД