Russian Qt Forum

Qt => Базы данных => Тема начата: brontoz от Сентябрь 25, 2006, 13:14



Название: Qt 4.1.4 QIBASE выводит не все записи в таблицах
Отправлено: brontoz от Сентябрь 25, 2006, 13:14
Т.е. в некотрых таблицах выводит всё, в других обрезает и выводит половину таблицы, а некоторые таблицы совсем не выводит. Ругается на деление на ноль или ошибку преобразования.
Естественно все данные на русском.
Проводил эксперимент, допустим таблица отображает 15 строк. Беру 16-ю и весь текст единственного строкового поля добавляю в 15-ю запись. Отрабатываю запрос, отображает 14 строк, модифицированная строка пропадает. Последовательно урезаю модифицированную 15-строку и добиваюсь того чтоб она выводилась. Нахожу, что если длина текстового поля допустим 40, то всё нормально, а затем если добавляю ещё любой другой символ (русский), строка уже не выводится.

В тексте самого драйвера имеется печально знаменитая строка:

static const char enc[8] = "UTF_FSS";

Которую я пытался заменить на WIN1251, не помогло. В режиме DEBUG под MS VС сбоит и ругаецца на фонт, а в Release выводит всё, но вместо букв выводит разряженные квадратики.

Что с этим делать?

Кстати ещё правил текст драйвера:
    //sqlda->version = SQLDA_VERSION1;  /// Было
    sqlda->version = SQLDA_CURRENT_VERSION; /// Стало

Тоже был какой-то косяк пока не исправил

Под это дело даже проабгрейдил IB c 7.1 до 7.5.1, не помогло  :cry:

добавлено спустя 3 часа 4 минуты:

 Проблему пока решил так: Обычно БД создавал с опцией
DEFAULT CHARACTER SET WIN1251
Попробовал вместо WIN1251 вставить UNICODE_FSS и таблицы стали отображать все записи. Это конечно хорошо, но не слишком корректно, м.б.кто сталкивался?


Название: Qt 4.1.4 QIBASE выводит не все записи в таблицах
Отправлено: Alex03 от Сентябрь 26, 2006, 06:08
Сталкивался когдато с аналогичной провлемой с FB1.5.
Я сейчас точно не скажу, но там проблемы с длинами.
Что-то типа того:
Qt спрашивает у БД размер строки в байтах, а далее пытается в эти байты запихать utf-8 строку (даже наверное не qt а клиентская либа с подачи qt).
поэтому с ascii и короткими не ascii строками всё нормально, а с длинными облом.

Мож я чего и наврал - звиняйте! :)


Название: Qt 4.1.4 QIBASE выводит не все записи в таблицах
Отправлено: Tonal от Сентябрь 26, 2006, 10:42
У нас, на FB1.5 и FB 2 таких проблем нет.

Да, и макроса SQLDA_CURRENT_VERSION тоже нет. ;-)
Что-то там багланд подшаманил в api IB7 похоже...


Название: Qt 4.1.4 QIBASE выводит не все записи в таблицах
Отправлено: Alexandr Az от Октябрь 02, 2006, 09:00
Да трабла в кодировке всё. Всё в кодировке. Win1251 наверное база и UTF токи умеет конектится куте. Тут не поборешь - это глюк самого fb. Возьми IBExpertом проделай такую же ситуацию, предварительно поставив там кодировку UTF-8. Даже если сделать базу в UTF-8, глюков все равно будет хватать. Во первых забудь про регистронезависимый поиск, а во вторых UDF. Возвращает он в некоторых случаях строки максимальной длины, а они как известно в юникоде должны в 2 раза меньше быть. Выход один - переписать дрова куте - сдалать поддержку win1251. Не боись, там пару строчек заменить :)