Не удается программно изменять значения модели БД, 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 |
|
|
Rocky |
17.2.2009, 16:37
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Стоп, не понял.
1. В каком месте происходит дважды выборка? когда назначаю таблицу (setTable) и когда назначаю модель (setModel)? Или где? 2. Что не так? Сами тролли в примере sqlbrowser примерно так и делают. 3. Насчет того что, не одна запись, а все. В смысле строка таблицы? Ну, а как тогда правильно изменить одно поле в одной строке? Так описано и в 2-х имеющихся у меня книгах по QT и в самой документации по QT (assistant). Цитата не пойму смысла вставки строки в произвольное место модели Так мне надо перенумеровать все id... Если было по id 1 2 3 4 5 и мне нужно вставить между 2 и 3, сразу после вставки будет 1 2 _ 3 4 5 На месте "_" - пустое поле. Далее я перенумеровываю так, чтобы было 1 2 3 4 5 6. Т.е. вставленная запись получает номер 3, а записи после нее инкрементируются на 1 (3 4 5 становятся 4 5 6). Здесь я согласен от первой до последней записи нет смысла перенумеровывать, а только от вставленной и до последней. Но это как я понимаю должно только на производительность повлиять. Ок, посмотрю че такое склайт, надеюсь это решение проблемы... Мне просто не понятно, весь код, который я привел взят из книг + assistant + исходник sqlbrowser... Никакой "отсебятины" вроде как нет... В то же время, при работе с этой самой таблицей PIPES даже sqlbrowser далеко не всегда удаляет или добавляет новые записи, а как-то через раз. Нихрена не понимаю. Я чувствую проще забить на модели, а просто сделать QTableWidget, который заполнять своей таблицей из БД напрямую, а при сохранении удалять старую таблицу в БД и формировать новую, из QTableWidget. Но это будет имхо некрасиво, не так быстро и изящно, чем простой вызов submitAll(). |
|
|
Текстовая версия | Сейчас: 30.11.2024, 0:33 |