Russian Qt Forum

Qt => Базы данных => Тема начата: pichini от Май 24, 2010, 16:10



Название: Подключение к MSSql без указания базы данных
Отправлено: pichini от Май 24, 2010, 16:10
Всем привет!

Нашел информацию как подключиться к конкретной базе, все работает на ура:
Код
C++ (Qt)
...
db->setDatabaseName("DRIVER={SQL Server};Server=MyServer;DATABASE=MyDataBase");
...

Но не могу разобраться каким образом настроить подключение для создания базы на сервере, либо для проверки ее существования. Eсли опустить параметр DATABASE или указать DATABASE=master, то QSqlDatabase::open() ошибок не выдает, но при попытке выполнить запрос типа:
Код
C++ (Qt)
...
query->exec("SELECT name FROM master.dbo.sysdatabases WHERE name = N'MyDataBase'")
...
выдает ошибку:
QSqlQuery::exec: database not open

Кто-нибудь знает как решить задачу?



 


Название: Re: Подключение к MSSql без указания базы данных
Отправлено: pichini от Май 25, 2010, 10:50
Вообщем так, похоже я не до конца понимаю как работает QSqlQuery.

Если делать аналогично примеру из доки, то получим ошибку:

Код
C++ (Qt)
   QSqlQuery myquery();
   if (myquery.exec("SELECT name FROM master.dbo.sysdatabases WHERE name = N'MyDataBase'"))
   {
       if (myquery.next())
       {
           return true;
       }
   }


Если же создавать QSqlQuery следующим образом:

Код
C++ (Qt)
   QSqlQuery myquery(*db);


то все ок.

В чем суть? хотелось бы разобряться в деталях.


Название: Re: Подключение к MSSql без указания базы данных
Отправлено: MoPDoBoPoT от Май 25, 2010, 11:59
В чем суть? хотелось бы разобряться в деталях.
QSqlQuery myquery()  - используется соединение по умолчанию
QSqlQuery myquery(*db) - используется, переданное в конструктор, соединение (кстати, в хранении указателя/ссылки на соединение нет необходимости, его можно получить через статический метод QSqlDatabase::database(), иначе можно столкнуться с проблемой удаления этого соединения)
Скорей всего ты создавал/добавлял соединение не по умолчанию (указал в методе QSqlDatabase::addDatabase() помимо имени драйвера еще имя соединения).