Через SQL-запросы и QSQlQuery вставлять в таблицу данные удавалось, а вот с помощью QSqlTableModel почему-то нет. Кто знает, в чем ошибка?
/// Добавление серийного номера
bool AddSerialNumber::add()
{
/// какие-то нужные действия
/// получение значения modelID(int modelID)
QSqlTableModel model;
model.setTable("DeviceList");
model.select();
int row = model.rowCount();
bool _j = model.insertRows(row, 1);
model.setData(model.index(row, 0), element -> serialName);
bool iu = model.submit();
model.setData(model.index(row, 1), element -> secret);
model.setData(model.index(row, 2), true);
model.setData(model.index(row, 3), modelID);
bool ins = model.submitAll();
return ins;
}
я как-то так делал:
QSqlTableModel model;
model.setTable("DeviceList");
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.select();
QSqlRecord rec = model.record( );
rec.setValue( "field1", val1 );
rec.setValue( "field2", val2 );
rec.setValue( "field3", val3 );
model.insertRecord( -1, rec );
model.submitAll( );
Спасибо. Но, к сожалению, не помогло!
может там есть какие обязательные поля, а ты их не заполняешь?
Блин. Обнаружил что для последнего кода по каким-то причинам setValue не присваивает значения. В дебаггере вижу получаемую строку, где в VALUES выглядит таким образом:
VALUES(?, ?, ?, ?)
знаки вопроса заменяются значениями перед выполнением, а до этого ставятся нули.
http://doc.trolltech.com/4.4/qsqlquery.html
раздел "Binding values using positional placeholders (version 1)"
AD, а зачам ты вообще табличную модель (QSqlTableModel) руками трогаешь? Соедени с представлением и пусть пользователь данные в представление вводит, если надо руками то и пользуй модель запросов (QSqlQuery)
/* Обертка к ХП P_APPENDDATA.
*/
bool Controller::procAppendData(int port, int addr, int framefield, int value)
{
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery q(db);
QString qstr;
bool ok;
q.setForwardOnly(true);
db.transaction();
q.prepare("EXECUTE PROCEDURE P_APPENDDATA(:port, :addr, :framefield, :value)");
q.bindValue(":port", port);
q.bindValue(":addr", addr);
q.bindValue(":framefield", framefield);
q.bindValue(":value", value);
ok = q.exec();
if (!ok)
{
qDebug() << "procAppendData, query ERROR............" << q.lastError();
db.rollback();
return ok;
}
ok = q.isActive();
db.commit();
return ok;
}
Ясно. Жаль. Пока что придется запросами, значит, делать. Дело в том, что эу ХП мне самому придется править - большей производительности не будет. Потом, конечно, сделаю в виде ХП. Но пока пусть и так побудет!
У меня тоже QSqlTableModel не отображает (БД firebird). С QSQLITE работает, а с QIBASE нет. Это похоже уже баг.
AD, По пробуй написать таблицу в верхнем регистре букв.
model.setTable("DEVICELIST");
У меня все заработало))
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)