[РЕШЕНО] Почему QSqlTableModel не использует первичный ключ? |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] Почему QSqlTableModel не использует первичный ключ? |
mva |
15.3.2009, 20:00
Сообщение
#1
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Добрый день всем!
Пытаюсь с помощью технологии "модель-представление" (классы 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 снова посылает прежние комманды на сервер. Может кто даст ссылочку на толковую документацию по этому поводу? Я почему-то не могу найти... |
|
|
Текстовая версия | Сейчас: 15.9.2024, 0:54 |