crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Отображение 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 у меня нет.)

Делаю так:
в скриптах при создании БД:
----------------------
SET SQL DIALECT 3;
CREATE DATABASE 'D:\DB1.FDB' USER 'SYSDBA' PASSWORD 'masterkey'
DEFAULT CHARACTER SET WIN1251;
EXIT;
----------------------
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'D:\DB1.FDB' USER 'SYSDBA' PASSWORD 'masterkey';
CREATE DOMAIN D_INTEGER AS
INTEGER;
CREATE DOMAIN D_BLOB_TEXT_1000 AS
BLOB SUB_TYPE 1 SEGMENT SIZE 1000 --SUB_TYPE 1 == TEXT
CHARACTER SET WIN1251;
COMMIT;
EXIT;
----------------------
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'D:\DB1.FDB' USER 'SYSDBA' PASSWORD 'masterkey';
CREATE TABLE T_MSG (
    F_RECORD_NMB D_INTEGER NOT NULL,
    F_MSG_TEXT   D_BLOB_TEXT_1000 NOT NULL
);
ALTER TABLE T_MSG ADD CONSTRAINT PK_T_MSG PRIMARY KEY (F_RECORD_NMB);
COMMIT;
EXIT;
----------------------
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'D:\DB1.FDB' USER 'SYSDBA' PASSWORD 'masterkey';
INSERT INTO T_MSG (F_RECORD_NMB, F_MSG_TEXT) VALUES (1, 'PRIVET: ПРИВЕТ');
INSERT INTO T_MSG (F_RECORD_NMB, F_MSG_TEXT) VALUES (2, 'OTVET: ОТВЕТ');
COMMIT WORK;
EXIT;
----------------------

В IBExpert при регистрации БД указываю:
- Charset = WIN1251
- оставляю не включенным (как по умолчанию и есть) флаг
Do NOT perform conversion from/to UTF8
- Font Characters Set = RUSSIAN_CHARSET
При этом в IBExpert данные поля BLOB таблицы отображаются корректно,
как и при включенном флаге (не совсем понимаю, что делает этот флаг).

в main.cpp:
#include <QtCore/QTextCodec>
#define RUSCODEC "CP1251"

int main(int argc, char *argv[])
{
    ...
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName(RUSCODEC));
}
в mainwindow_db.cpp (в главном окне):
void MainWindow_db::create_model_msg_list()
{
    //создание модели
    model_msg_list = new QSqlTableModel(this);
    model_msg_list->setEditStrategy(QSqlTableModel::OnFieldChange);
    model_msg_list->setTable("T_MSG");

    //задание заголовков столбцов
    model_msg_list->setHeaderData(0, Qt::Horizontal, "№ сообщ.");
    model_msg_list->setHeaderData(1, Qt::Horizontal, "Текст сообщ.");

    //задание модели для представления
    view_msg_list->setModel(model_msg_list);
    view_msg_list->setSelectionMode(QAbstractItemView::SingleSelection); //сколько выделять: один
    view_msg_list->setSelectionBehavior(QAbstractItemView::SelectRows); //что выделять: строки
    view_msg_list->setEditTriggers(QAbstractItemView::NoEditTriggers); //представление табл доступно только для чтения

    //установить ширину колонок
    view_msg_list->resizeColumnsToContents();

    view_msg_list->verticalHeader()->hide();
}
в mainwindow_db.h:
class MainWindow_db : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow_db(QWidget *parent = 0);
    QSqlTableModel *model_msg_list;
    ...
private:
    QTableView *view_msg_list;
    void create_model_msg_list();
    ...
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 16.3.2012, 8:09
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Оля, сразу вот такой моментик.

>>Я указываю и подтип TEXT, и кодировку блоба
+
>>Данные для очередной записи таблицы поступают ко мне в виде структуры:

сразу резко напрашивается использование XML , а , следовательно, UTF-8, а, следовательно - всё ж таки тип блоба самый обычный - байтовый.

Далее - с байтовым блобом проблем никогда не бывает. Считываешь , незабываешь зеро-терминатор на конце, подсовываешь парсеру XML

запись XML в базу: QString->std::string->БД
чтение : БД->std::string->обеспечить zt->QString

я бы так сделал :)



----------------------------
>>11. Кстати, Алексей1153, если в IBExpert открыть таблицу T_MSG, а для нее страницу Data,

у меня энто самое... subtype==binary )

CREATE TABLE T_MSG
(
    F_RECORD_NMB  BIGINT NOT NULL,
    F_MSG_TEXT    BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL
);


Сообщение отредактировал Алексей1153 - 16.3.2012, 8:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Steklova Olga   Отображение BLOB полей таблиц БД FireBird в QTableView Qt в Windows   14.3.2012, 13:59
- - Алексей1153   1 - полагаю, блобу абсолютно пофиг на кодировку - ...   14.3.2012, 14:30
- - Steklova Olga   Цитата(Алексей1153)Возможно, нужно применить друго...   14.3.2012, 14:44
- - Алексей1153   Оля, ты, судя по всему, используешь Огнептицу я п...   14.3.2012, 20:01
|- - Tonal   Цитата(Алексей1153 @ 15.3.2012, 0:01) И п...   15.3.2012, 8:15
- - Алексей1153   Tonal, возможно   15.3.2012, 9:33
- - Steklova Olga   1. Использую FireBird 2.1 в Windows. 2. У меня тож...   15.3.2012, 11:33
- - Steklova Olga   6. Для теста изменила структуру таблицы T_MSG и ее...   15.3.2012, 15:13
- - Steklova Olga   8. Если оставить все как есть, но попробовать поме...   15.3.2012, 15:58
- - Steklova Olga   11. Кстати, Алексей1153, если в IBExpert открыть т...   15.3.2012, 18:51
- - Steklova Olga   Раньше, в пункте 7. делала так: ЦитатаВставила в т...   15.3.2012, 20:07
- - Алексей1153   Оля, сразу вот такой моментик. >>Я указываю...   16.3.2012, 8:09
- - Steklova Olga   Цитата(Алексей1153)сразу резко напрашивается испол...   16.3.2012, 10:41
- - Алексей1153   в другой то может,но как показывает практика,UTF-8...   16.3.2012, 11:09
- - Steklova Olga   17. Кодировку БД оставила WIN1251. Опять изменила ...   16.3.2012, 12:13
- - Алексей1153   . У тебя есть скайп ? Скинь в ЛС, а то так долго п...   16.3.2012, 12:41
- - Steklova Olga   OK   16.3.2012, 14:48
- - Litkevich Yuriy   Цитата(Steklova Olga @ 14.3.2012, 15:59) ...   3.4.2012, 19:56
- - Steklova Olga   И за что мне такое внимание сегодня с Вашей сторон...   3.4.2012, 21:57
- - Litkevich Yuriy   Вобщем есть такая проблема: По моему (и не только)...   4.4.2012, 11:03
- - Steklova Olga   Litkevich Yuriy, просмотрела кучу тем на prog.org....   5.4.2012, 20:21
- - Steklova Olga   Цитата(Алексей1153 @ 16.3.2012, 11:09) из...   18.4.2012, 11:59
- - Алексей1153   ещё мне что-то подсказывает, что более рационально...   18.4.2012, 12:16
- - Steklova Olga   Алексей1153, да, наверное. В книге Хелен Борри ...   18.4.2012, 13:10


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 9:55