LINUX.ORG.RU

QT4, база данных и поле времени


0

0

Нужно вставлять в таблицу (в существующую запись) число (float) и текущее время из QTime. Сначала читается запись (QSqlTableModel.record), получается QSqlRecord. Потом создаются два QSqlField, в них пишутся нужные значения (setValue), потом они добавляются к записи (пробовал и append и replace). До этого момента всё нормально. Потом готовой записью обновляется существующая (QSqlTableModel.setRecord) и вызывается submitAll, который почему-то возвращает FALSE. На индикации (QTableView) новые значения появляются, но в базе не сохраняются. В логе сервера (PostgreSQL) обнаруживается выражение UPDATE, в котором нового значения этого поля просто нет. Название поля есть, что его надо обновить, а после "=" ничего нет. Что это может быть? Если не заработает - начальник в отпуск не отпустит :(

Ответ на: комментарий от UVV

А как тогда получить номер выделенной записи, или значения для where? Сейчас это делается так: QModelIndexList currentSelection = view1->selectionModel()->selectedIndexes(); for (int i = 0; i < currentSelection.count(); ++i) { if (currentSelection.at(i).column() != 0) (подготовка записи) model1->setRecord(currentSelection.at(i).row(), record1; }

И насколько выяснилось при экспериментах, проблема возникает из-за типа поля в таблице (timestamp).

inbox_pm
() автор топика
Ответ на: комментарий от inbox_pm

Пункт раз: было бы удобно читать с правильным форматированием.
Пункт два: зачем вам timestamp? Типа date уже не хватает?
Пункт три: по какому событию происходит update?

UVV ★★★★★
()
Ответ на: комментарий от UVV

А как тут форматирование делать? На других форумах перевод строки им же и остаётся. А вся эта функция вызывается по сигналу от кнопки (вызывается из слота). Если сделать поле date, то нужно будет и отдельное поле time, а хотелось всё вместе.

inbox_pm
() автор топика
Ответ на: комментарий от inbox_pm

> А как тут форматирование делать? На других форумах перевод строки им же и остаётся.
Нужно выбрать User line break или Preformatted text

> Если сделать поле date, то нужно будет и отдельное поле time, а хотелось всё вместе.
Пардон! Я не знал, что в Postgre в date нельзя писать время.

UVV ★★★★★
()

Я бы сделал так:
QSqlQuery query;
query.prepare("update <table> set \
               float_field = :ff, \
               time_field = :tf \
               where id = :id);
// Далее заполняем нужные значения
query.bindValue(":ff", <float_value>);
query.bindValue(":tf", <time_value>);
query.bindValue(":id", <id_value>);
query.exec();
// Если что-то не получается, то смотрим почему
QMessageBox::information(this, "Sql result", query.lastError().text());

UVV ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.