Не удается программно изменять значения модели БД, 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 |
18.2.2009, 14:27
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
По-поводу двойной выборки. Если убрать select(), то данные во вьюхе не отображаются. Открываю assistant, читаю.
Цитата void QSqlTableModel::setTable ( const QString & tableName ) [virtual] Sets the database table on which the model operates to tableName. Does not select data from the table, but fetches its field information. Так что выборка происходит все-таки один раз. По-поводу автоинкремента. Добавил 2 поля в таблицу: SortID INTEGER и ID INTEGER PRIMARY KEY AUTOINCREMENT. Результат тот же. SubmitAll после программного изменения данных возвращает false. К тому же опять непонятность: да, при формировании таблицы, колонка ID сама заполняется. А при добавлении новой строки в QTableView - нет. Надо либо вручную, либо программно. Но программно не годится (см. выше) - просто не сохраняются данные и все. А вообще бред какой-то... Я не понимаю, почему после выполнения следующего кода, запись, которая идет после nRow не удаляется. Ни из моей программы, ни даже если открыть sqlbrowser и оттуда пытаться удалить.
Т.е. если писать потом
то одна строка остается по-любому... Если писать так
то таблица стирается. причем намного быстрее, чем 1-м способом. Я не понимаю, почему не работает
Записи как есть в базе данных (например, 0-я колонка идет по убыванию номеров), так она и отображается во вьюхе в программе (хотя как я понимаю должна быть наоборот). Попробовал заполнять как хотел QTableWidget вручную (т.е. уйти от модели вообще) - по скорости получается медленнее. В общем, после 2-х дневного занятия любовью с этим делом, я написал такой код:
Работает вобщем-то быстро, но таблицы у меня небольшие. Самое большее 300 записей. Но чесгря мне совсем не нравится такой код... Морального удовольствия я не получил Пока пусть работает так… надо программу сдавать уже скоро.. а я пока начну изучение sql Всем спасибо за участие! |
|
|
Текстовая версия | Сейчас: 26.11.2024, 14:54 |