Баг в QSqlTableModel?, Старанное поведение с записями у которых одно поле содержит NULL |
Здравствуйте, гость ( Вход | Регистрация )
Баг в QSqlTableModel?, Старанное поведение с записями у которых одно поле содержит NULL |
Kagami |
12.3.2009, 15:40
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Написал небольшую программку для графической работы со своей базой sqlite3.
Базу создавал следующим SQL-запросом:
Потом сделал форму с QTableView и, соответственно, стал использовать QSqlTableModel. В конструкторе у меня есть такие строчки:
А еще добавил слот, который вызывается по нажатию кнопки Del для удаления записи:
Строки в базу у меня добавлялись с помощью QSqlQuery:
при этом были строки, у которых третий параметр был NULL. Так вот, с такими строками я ничего не могу сделать ни в QTableView, ни в QSqlTableModel - ни удалить, ни изменить. Это баг или фича? |
|
|
Litkevich Yuriy |
12.3.2009, 16:08
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Kagami |
12.3.2009, 16:14
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
То же самое - если все поля заполнены, то с ними можно работать. Если есть NULL - после перехода на другую строку все возвращается как было. Пока нашел небольшой workaround - делать не нулевую, а пустую строку, т.е. QString(""). Выглядит одинаково, но с такими значениями уже можно работать
|
|
|
Litkevich Yuriy |
12.3.2009, 16:15
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Kagami, любопытно, а можешь БД дать?
Qt какой версии? |
|
|
Kagami |
12.3.2009, 16:18
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Первый раз заметил еще на 4.4.3, сейчас сижу на 4.5.
Прикрепленные файлы
|
|
|
Litkevich Yuriy |
13.3.2009, 19:43
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Kagami, факт глюкаво
однако сосвоей БД я такого не наблюдаю Создается так
app.zip ( 1,02 килобайт ) Кол-во скачиваний: 164 и вставку в коде я делаю не так как ты: Цитата INSERT INTO APPGROUP (F_ID, F_GROUP)VALUES (:id, :group) т.е. перечисляю поля для вставки.код:
|
|
|
Kagami |
13.3.2009, 21:59
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Попробуй вот так
Я понимаю, так делать не хорошо, но если это позволяется, то почему бы и нет? |
|
|
Litkevich Yuriy |
13.3.2009, 22:28
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Kagami |
13.3.2009, 23:03
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Я имел в виду писать в базу NULL. Хотя вроде стандартом это не запрещено
|
|
|
Litkevich Yuriy |
14.3.2009, 9:39
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Я имел в виду писать в базу NULL Цитата void QSqlQuery::addBindValue ( const QVariant & val, QSql::ParamType paramType = QSql::In ) Adds the value val to the list of values when using positional value binding. The order of the addBindValue() calls determines which placeholder a value will be bound to in the prepared query. If paramType is QSql::Out or QSql::InOut, the placeholder will be overwritten with data from the database after the exec() call. To bind a NULL value, use a null QVariant; for example, use QVariant(QVariant::String) if you are binding a string. т.к. QString() имеет своё собственное представление отличное от NULL в БД |
|
|
Текстовая версия | Сейчас: 30.11.2024, 3:16 |