crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> firebird, insert возвращает ошибку -1, строку вставляет
gvenihvivar
  опции профиля:
сообщение 14.5.2015, 15:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 6.11.2013
Пользователь №: 3967

Спасибо сказали: 0 раз(а)




Репутация:   0  


qt sdk 4.8
firebird 2.5 и ibexpert

Создала базу данных и таблицу. Вставляя строки программно обратила внимание, что insert возвращает постоянно false, а строки вставляются исправно. К базе данных подключилось нормально. Команды update, delete, select работают правильно. Вот так выглядит запрос.
Оба поля int. id primary key.

QSqlQuery query2("INSERT INTO table2 (id, pump) VALUES ('2', '2')", db);
       qDebug() << " exec insert "<< query2.exec()
                     <<  " error "<< query2.lastError().text() << query2.lastError().number();


Кто-то сталкивался с таким? Может, это просто баг?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 15.5.2015, 8:44
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


а нафига там кавычки стоят, если поля типа int?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 15.5.2015, 9:05
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 6.11.2013
Пользователь №: 3967

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 15.5.2015, 8:44) *
а нафига там кавычки стоят, если поля типа int?


Без кавычек программа ведет себя точно также. Запрос возвращает false, но строка в таблицу добавляется.
Это уже от безысходности. Не знаю, что ему надо.

Сообщение отредактировал gvenihvivar - 15.5.2015, 9:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 15.5.2015, 9:12
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Возможно дело в том, что:
http://doc.qt.io/qt-4.8/qsqlquery.html#QSqlQuery-2
Цитата
Constructs a QSqlQuery object using the SQL query and the database db. If db is not specified, or is invalid, the application's default database is used. If query is not an empty string, it will be executed.

А затем ваш exec пытается вставить второй элемент с таким же id. Попробуйте использовать prepare.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 15.5.2015, 10:00
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 6.11.2013
Пользователь №: 3967

Спасибо сказали: 0 раз(а)




Репутация:   0  


lanz спасибо тебе!!!

Более менее рабочий вариант
 QSqlQuery query2(db);
            query2.prepare("INSERT INTO table2 (id, pump) "
                          "VALUES (:id, :pump)");
            query2.bindValue(":id", 1121);
            query2.bindValue(":pump", 23);

            qDebug() << " exec insert "<< query2.exec()
                            <<  " error "<< query2.lastError().text() << query2.lastError().number();


Результат вывода "exec insert true error " " -1"

Неопределенная ошибка осталась, но по крайней мере отчитывается корректно.

В документации написано "Returns the database-specific error number, or -1 if it cannot be determined." "-1" это не смертельно или лучше и с ним разобраться?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 15.5.2015, 10:42
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


insert вернул true. в этом случае незачем читать что-то из lastError, там может быть что угодно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 6:35