Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Здравствуйте, гость ( Вход | Регистрация )
Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Steklova Olga |
14.3.2012, 13:59
Сообщение
#1
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Здравствуйте У меня в таблице БД есть поле BLOB для хранения текста.
Вопрос 1. Почему у меня некорректно (крокозябрами) отображается русский текст из BLOB в колонке QTableView ? Вопрос 2. Как сделать, чтобы текст в колонке с BLOB не отображался весь в одну строку, а переносился ? Вопрос 3. Что делать с шириной колонки для поля BLOB ? Ограничивать ? Мои предположения: - не в той кодировке пишу данные в БД ? - не везде, где надо, правильно указала кодировку ? - мне необходимо создать делегат, чтобы в каждой ячейке QTableView колонки с BLOB был виджет QTextEdit ? (Сейчас никакого делегата для этого QTableView у меня нет.) Делаю так: в скриптах при создании БД:
В IBExpert при регистрации БД указываю: - Charset = WIN1251 - оставляю не включенным (как по умолчанию и есть) флаг Do NOT perform conversion from/to UTF8 - Font Characters Set = RUSSIAN_CHARSET При этом в IBExpert данные поля BLOB таблицы отображаются корректно, как и при включенном флаге (не совсем понимаю, что делает этот флаг). в main.cpp:
в mainwindow_db.cpp (в главном окне):
в mainwindow_db.h:
|
|
|
Steklova Olga |
18.4.2012, 11:59
Сообщение
#2
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
из-под Qt я с базами не работал. Насколько подсказывает гугл, нужно что-то вроде Цитата void QSqlQuery::bindValue ( const QString & placeholder, const QVariant & val, QSql::ParamType paramType = QSql::In ) QSqlQuery s; s.prepare( QString( "update TABLE set FIELD=:marker where ... " ) ); s.addBindValue( QVariant (myStdString.c_str()), QSql::In/*|QSql::Binary*/ ); s.exec( ); кстати, QVariant умеет и с QString работать - попробуй сразу оттуда возможно, понадобится флаг QSql::Binary в общем, в любом случае -если таким образом записать из QString в двоичный блоб,а потом так же считать, то содержимое QString должно восстановиться аки птицо Феникс, независимо от кодировок Алексей1153, спасибо Вам большое за поддержку, оказывается, все элементарно 1. я отказалась от использования текстового блоба, так как не разбираюсь в драйверах. 2. изменила скрипт, остановившись на использовании двоичного блоба:
3. Использовала подготовленный запрос:
4. Все эти варианты работают:
5. А ошибки продолжали вылезать тогда, когда я только начала тестировать использование двоичного блоба, не из-за двоичного блоба, а из-за того, что в то время у меня и в таблице БД оставалось обязательное поле текстового блоба, и в подготовленном запросе вместе с указанием двоичного блоба я ПРОДОЛЖАЛА УКАЗЫВАТЬ ПОЛЕ ТЕКСТОВОГО БЛОБА, которое и вызывало ошибку. Слонов надо есть по частям! |
|
|
Текстовая версия | Сейчас: 28.11.2024, 9:34 |