Не удается программно изменять значения модели БД, submitAll возвращает false после вызова setRecord |
Здравствуйте, гость ( Вход | Регистрация )
Не удается программно изменять значения модели БД, submitAll возвращает false после вызова setRecord |
Rocky |
17.2.2009, 10:43
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Всем привет! Помогите пожалуйста с проблемкой... Создаю таблицу БД SQLite 3 таким образом:
Таблица создана. Затем нужно сделать ее редактирование, и при этом вставлять записи в нужное место (не обязательно в конец). Вставку делаю так:
После этого m_pModel->submitAll() возвращает false, т.е. ничего не сохраняется... Если цикл по строкам убрать, и оставить только саму вставку строки, то submitAll возвращает true (только вставленная строка перемещается в другое место). Пробовал через setRecord менять другие столбцы (не id), результат тот же. Пробовал менять данные через индексы и setData, результат тот же... m_pDataTableView - это QTableView. Модель устанавливается в конструкторе класса через setModel(pModel); Сама модель:
В чем могут быть грабли? Никто не пробовал менять данные таким образом? Как можно обойти это? QT 4.3.4. Заранее большое спасибо! -----Добавлено------ Блин, удалите пожалуйста эту тему, инет сглючил, 2 темы создал случайно Сообщение отредактировал Rocky - 17.2.2009, 10:46 |
|
|
Константин |
17.2.2009, 17:24
Сообщение
#2
|
Студент Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: 1 |
извини, но у тебя с самого начала некрасиво и неизящно т.к. вместо тривиального автоинкремента по PK (PRIMARY KEY), изобретаешь колесо.
кстати, проблема вполне может расти как раз из отсутствия PK, т.к. вместо поиска по уникальному ключу у тебя выполняется поиск по полному совпадению всех полей строки. а если таких строк больше одной? впрочем, не берусь утверждать об истоках проблемы, о которой знаю по трём сниппетам ладно, вот твоя таблица:
лобызай и упаси тебя божа снова пересчитывать уники таблицы в базе через вьюху - модель - запрос - таблицу в базе ой-ой...чуть не попался! если тебе исходный ид из файла _действительно_ нужен, то используй дальше как раньше. но из описания того, что и как тебе хочется менять при добавлении строки, делаю вывод, что к уникам ты пока не привязываешься, а используешь их только для сортировки или чего-то подобного...в таком случае ид лучше не копировать из файла:
...и тут бы ещё неплохо транзакцию добавить ну, что? по возможности используй максимально короткие имена полей и таблиц скл; используй ключи для полей, по которым наиболее часто будет производиться поиск и сортировка...и не забывай, что кроме форума имеется множество полезных поисковых систем ага, вот что ещё забыл: 1. В каком месте происходит дважды выборка? когда назначаю таблицу (setTable) и когда назначаю модель (setModel)? Или где?
2. Что не так? Сами тролли в примере sqlbrowser примерно так и делают. переиндексирование таблицы через вьюху? не верю. Сообщение отредактировал Константин - 17.2.2009, 18:13 |
|
|
Текстовая версия | Сейчас: 30.11.2024, 0:32 |