Название: Данные неправильно записываются в базу Отправлено: bibelwort от Апрель 22, 2012, 14:20 Привет всем!
Я новичок в работе с базами данных вообще и с базами данных с помощью Qt в частности. Возникла такая проблема: Использую базу SQLite. В записях есть поле "children" Код: query.exec("create table mft " Хочу в него записывать QVariantList. Делаю это так: Код: QVariantList children; , где mftBase это QSqlTableModel. Инициализирую ее правильно, это видно по другим полям, в которые заносятся стандартные типы. Собственно проблема: после вызова функции submitAll или submit, то есть собственно после занесения изменений в БД, во-первых, QVariant определяет тип поля "children" как QString, а во-вторых, возвращает пустую строку, то есть данные записываются некорректно, хотя submitAll() возвращает true: Код: QString string(mftBase->record(0).value("children").typeName()); Подскажите, пожалуйста, в чем проблема? Это свойство SQLite или я что-то неправильно делаю? Название: Re: Данные неправильно записываются в базу Отправлено: LisandreL от Апрель 22, 2012, 14:36 Скачайте Sqlite Expert Personal (или другую программу просмотрщик, если у вас не Win) и посмотрите что у вас лежит в базе.
BLOB лучше получать через toByteArray. Ну а к типам полей SQLite весьма фривольно относится. Название: Re: Данные неправильно записываются в базу Отправлено: bibelwort от Апрель 22, 2012, 21:27 Скачайте Sqlite Expert Personal (или другую программу просмотрщик, если у вас не Win) и посмотрите что у вас лежит в базе. BLOB лучше получать через toByteArray. Ну а к типам полей SQLite весьма фривольно относится. Проверил, что в базе находится. Оказалось, что поле children пустое. Попробовал записать данные через query: Код: query.prepare("insert into mft (parent, children, type, name, item) " Эффект тот же самый. Ничего не записывается. Поле остается пустым. Все остальное нормально пишется. Что же не так? :( Название: Re: Данные неправильно записываются в базу Отправлено: bibelwort от Апрель 22, 2012, 22:17 Попробовал записывать QByteArray с тем же содержимым. Получилось!
Но дело в том, что с ByteArray не удобно. В будущем хочу использовать QMap. Боюсь с ним будет тоже самое, что и c QList :( Кто может сказать, почему не любой QVariant записывается? Название: Re: Данные неправильно записываются в базу Отправлено: V1KT0P от Апрель 22, 2012, 22:26 Попробовал записывать QByteArray с тем же содержимым. Получилось! Посмотри исходники Qt и все станет ясно.Но дело в том, что с ByteArray не удобно. В будущем хочу использовать QMap. Боюсь с ним будет тоже самое, что и c QList :( Кто может сказать, почему не любой QVariant записывается? Название: Re: Данные неправильно записываются в базу Отправлено: bibelwort от Апрель 22, 2012, 22:44 Попробовал записывать QByteArray с тем же содержимым. Получилось! Посмотри исходники Qt и все станет ясно.Но дело в том, что с ByteArray не удобно. В будущем хочу использовать QMap. Боюсь с ним будет тоже самое, что и c QList :( Кто может сказать, почему не любой QVariant записывается? Если вы знаете в чем причина, подскажите пожалуйста, так как мне не ясно... Название: Re: Данные неправильно записываются в базу Отправлено: V1KT0P от Апрель 22, 2012, 22:55 Попробовал записывать QByteArray с тем же содержимым. Получилось! Посмотри исходники Qt и все станет ясно.Но дело в том, что с ByteArray не удобно. В будущем хочу использовать QMap. Боюсь с ним будет тоже самое, что и c QList :( Кто может сказать, почему не любой QVariant записывается? Если вы знаете в чем причина, подскажите пожалуйста, так как мне не ясно... Код Всегда будет пустоту возвращать. Как ты вообще представляешь логику преобразования массива значений разных типов в бинарный массив? Название: Re: Данные неправильно записываются в базу Отправлено: bibelwort от Апрель 22, 2012, 23:34 Цитата: V1KT0P Как ты вообще представляешь логику преобразования массива значений разных типов в бинарный массив? Да, я понял проблему... Таким образом получается, что в базу данных принципиально нельзя записать произвольные пользовательские типы (и struct и class), если только самостоятельно не реализовать конвертацию в QByteArray? Странно это, ведь Qt самостоятельно записывает зарегистрированные данные на диск... Я понял! Можно в этом случае формировать QDataStream и его переводить в QByteArray для записи данных в БД и наоборот! П.С. ИМХО разработчики могли бы сделать это и сами... Эхх... |