Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Здравствуйте, гость ( Вход | Регистрация )
Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows |
Steklova Olga |
5.4.2012, 20:21
Сообщение
#21
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Litkevich Yuriy, просмотрела кучу тем на prog.org.ru и crossplatform.ru.
Не про эту ли тему на prog.org Вы говорили? "Русские строки в исходниках. Windows-1251" Ответ пока не нашла. Драйверы пока-что сама не писала. Пока гуглила, нашла полезную для себя cсылку: "Linuxcenter.ru » Библиотека Линуксцентра » Книги и руководства » Разработка графического интерфейса с помощью библиотеки Qt3" |
|
|
Steklova Olga |
18.4.2012, 11:59
Сообщение
#22
|
Участник Группа: Участник Сообщений: 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. А ошибки продолжали вылезать тогда, когда я только начала тестировать использование двоичного блоба, не из-за двоичного блоба, а из-за того, что в то время у меня и в таблице БД оставалось обязательное поле текстового блоба, и в подготовленном запросе вместе с указанием двоичного блоба я ПРОДОЛЖАЛА УКАЗЫВАТЬ ПОЛЕ ТЕКСТОВОГО БЛОБА, которое и вызывало ошибку. Слонов надо есть по частям! |
|
|
Алексей1153 |
18.4.2012, 12:16
Сообщение
#23
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ещё мне что-то подсказывает, что более рационально задавать сегмент размером , равным степени двойки. К примеру, не 500, а 512
|
|
|
Steklova Olga |
18.4.2012, 13:10
Сообщение
#24
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Алексей1153, да, наверное.
В книге Хелен Борри "Firebird. Руководствоо разработчика баз данных" на стр 223 в главе 12 "BLOB и массивы" нашла следующие слова: Цитата "Сегменты BLOB. Если страницы с содержимым BLOB хранят только данные BLOB и там нет никакой вспомогательной информации (в книге я не нашла подтверждения этого), то Вы правы.
Данные BLOB... хранятся в виде сегментов на одной или более страницах базы данных. ...Когда это возможно, BLOB сохраняются на той же странице, что и запись с остальными данными. При этом большие BLOB могут занимать много страниц, а их начальные страницы могут содержать не данные, а массив указателей на страницы с содержимым BLOB." |
|
|
Текстовая версия | Сейчас: 1.12.2024, 5:06 |