Есть у меня такая табличка
CREATE TABLE marks
(
id integer NOT NULL DEFAULT nextval('marks_id_seq'::regclass),
workdate date NOT NULL,
personpositionid integer NOT NULL,
reasonid integer NOT NULL,
hours numeric(4,2) NOT NULL,
planmarkid integer,
<тут всякие ключи>
)
В программе создаётся QSqlRelationalTableModel для редактирования таблицы, с одним отношением вида
setRelation(3, QSqlRelation("workers.reasons", "id", "name"))
Записи создаются, редактируются и удаляются на ура, всё замечательно.
Но понадобилась дополнительная функциональность со стороны базы данных, для чего исходная таблица была переименована в marks_table, и был создан VIEW вида
CREATE OR REPLACE VIEW marks AS
SELECT marks_table.id, marks_table.workdate, marks_table.personpositionid, marks_table.reasonid, marks_table.hours, marks_table.planmarkid
FROM marks_table;
с правилами на INSERT, UPDATE и DELETE, которые замечательно работают при отправке запросов в базу напрямую. Но программа почему-то начала вести себя странно: отображение данных и добавление элемента через QSqlRelationalTableModel работают, а вот удаление и редактирование записи спотыкаются с такими ошибками:
SQL query error: "ERROR: column "name" does not exist
LINE 1: ...D "workdate" = $2 AND "personpositionid" = $3 AND "name" = $...
и
SQL query error: "ERROR: syntax error at or near "("
LINE 1: EXECUTE (1504, '2011-02-07', 2574, 'Я - Продолжительность р...
Куда вообще копать? С точки зрения программы в базе данных должна быть всё та же прежняя таблица marks, я неоднократно пользовался таким приёмом, правда не использовал QSqlRelationalTableModel, только QSqlTabelModel, с которой не возникало никаких проблем при работе с view.