Добрый день всем!
Пытаюсь с помощью технологии "модель-представление" (классы QSqlTableModel и QTableView) изменить запись на сервере PostgreSQL в некоторой таблице. В простейшем случае нужная мне запись изменяется. Но выяснилось, что изменения производятся через использование следующей конструкции, например:
PREPARE qpsqlpstmt_1 AS UPDATE "адрес" SET "ИМЯ"=$1 WHERE "КОД" = $2 AND "СТРАНА" = $3 AND "ГОРОД" = $4 AND "УЛИЦА" = $5 AND "ДОМ" = $6 AND "КВАРТИРА" = $7
Такая конструкция мне не нравится, т.к. она никак не использует первичный индекс КОД таблицы <адрес>. В результате поиск нужной записи в более-менее серьезной таблице будет происходить смертельно долго, т.к., во-первых, для поиска не используются индексы и, во-вторых, с увеличением количества полей увеличивается количество условий в секции WHERE. Я ожидал увидеть что-нибудь такое:
PREPARE qpsqlpstmt_1 AS UPDATE "адрес" SET "УЛИЦА"=$1 WHERE "КОД" = $2,
или еще проще:
UPDATE "адрес" SET "УЛИЦА"="ул.Советская" WHERE "КОД" = 153,
т.е. с подстановкой конкретных значений в комманду и без использование предварительно подготовленных функций.
Теперь вопрос: как заставить Qt использовать первичный индекс у моей таблицы и не посылать такие тупые комманды серверу? Использование класса QSqlIndex не дало результата, Qt снова посылает прежние комманды на сервер. Может кто даст ссылочку на толковую документацию по этому поводу? Я почему-то не могу найти...
qDebug() << "PK=" << model->primaryKey();
qDebug() << "PK=" << model->primaryKey();
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)