Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ firebird, insert возвращает ошибку -1, строку вставляет

Автор: gvenihvivar 14.5.2015, 15:13

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

а нафига там кавычки стоят, если поля типа int?

Автор: gvenihvivar 15.5.2015, 9:05

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


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

Автор: lanz 15.5.2015, 9:12

Возможно дело в том, что:
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

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

insert вернул true. в этом случае незачем читать что-то из lastError, там может быть что угодно.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)