[РЕШЕНО] Почему 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 снова посылает прежние комманды на сервер. Может кто даст ссылочку на толковую документацию по этому поводу? Я почему-то не могу найти... |
|
|
Litkevich Yuriy |
15.3.2009, 20:17
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
первичный индекс КОД таблицы <адрес>. а это точно первичный ключ таблицы?проверить можно так:
по идее первичный ключ должен использоваться, если он есть. См. void QSqlTableModel::setPrimaryKey ( const QSqlIndex & key ) [protected] |
|
|
Текстовая версия | Сейчас: 7.11.2024, 3:01 |