Russian Qt Forum

Qt => Вопросы новичков => Тема начата: eXeLe от Март 01, 2013, 17:40



Название: Работа с БД
Отправлено: eXeLe от Март 01, 2013, 17:40
Создаю небольшое приложение, работающее с БД.
До этого как то писал под линукс по работе с PSQL и вроде все было идеально, но сейчас потребовалось написать под MS SQL Server 2005.
Поставил нужные дрова, с горем пополам смог написать соединение с сервером (так, как делал с PSQL - не вышло, требовало указать драйвер и прочее):

Код:
    QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;";
    QString connectionString = connectionTemplate.arg("serverhostname").arg("databsename");
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "connecti");
    db.setDatabaseName(connectionString);
    db.setUserName("eXeLe");
    db.setPassword("123123123");
    bool ok = db.open();


В хэдере прописал:
Код:
QSqlQuery *query;

в cpp-шнике пишу:
Код:
    query=new QSqlQuery(db);
    query->exec("insert into table_name (name) values (123123123)");
Завязываю все на кнопку, запускаю, жму кнопку - ноль реакции.
То что кнопка успешно нажимается и указанный код выполняется - сомнений нет.
В самой базе смотрел через sp_who - коннект от приложения устанавливается.
Однако указанное в exec - не выполняется. Сначала пробовал делать select и его обрабатывать - ничего не обрабатывалось, потом уже перешел просто на insert. В базу ничего не вносится. Тот же запрос, выполненные в SSMS - выполняется успешно.
В чем еще могут быть проблемы?


Название: Re: Работа с БД
Отправлено: Bepec от Март 01, 2013, 19:59
Проблема в том, что у вас нехватает ума смелости написать query->lastError(); и посмотреть что получится.


Название: Re: Работа с БД
Отправлено: eXeLe от Март 01, 2013, 20:32
да, действительно не хватило ума вызвать lasterror =)
как оказалось, роль db_owner и прочие не дают автоматически прав пользователю на селект/инсерт и все остальное.


Название: Re: Работа с БД
Отправлено: Bepec от Март 01, 2013, 21:46
;)