powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Установить кодировку БД для работы с ней
25 сообщений из 26, страница 1 из 2
Установить кодировку БД для работы с ней
    #39476277
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Как в interbase 2009 можно установить кодировку для работы с существующей БД. Пишу на Qt, выполняю запрос SELECT с помощью QSqlQuery. Во время выполнения next() возвращает FALSE, тот же самый запрос в ibexpert выполняется. Если в ibexpert установить кодировку отличную от win1251, то наблюдаю туже самую ошибку, что и в Qt. Как победить ? =)))
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476288
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что там используется для подключения? Где указываются параметры?
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476305
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QSqlQuery query = db.exec("SET NAMES cp1251");
query.exec("SELECT * FROM table1");

while(query .next()) - не выполняется
{
....
}

qDebug() << query.lastError().text();

Выдаёт:
"arithmetic exception, numeric overflow, or string truncation Could not fetch next item"


Для некоторых баз выполняется несколько итераций, а потом такая же ошибка.

в main.cpp

есть
QTextCodec::setCodecForLocale(QTextCodec::codecForName("cp1251"));
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476309
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abrazivdb.exec("SET NAMES cp1251");
В ибэйзе есть такое?

В общем, кодировка указывается при подключении, точнее в параметрах подключения.
http://www.ibase.ru/ibrusfaq/
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476313
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QSqlQuery queryOut(QString("set names win1251"), dbout);
так тоже не работает. хз чё делать
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476316
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbrazivQSqlQuery query = db.exec("SET NAMES cp1251");
query.exec("SELECT * FROM table1");

1. чарсет соединения указывается при коннекте к базе, а не после.
2. "не выполняется" - нет такого слова, ошибки либо нет, либо она есть. А если есть - то у нее есть текст сообщения.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476318
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же привёл этот текст "arithmetic exception, numeric overflow, or string truncation Could not fetch next item"
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476327
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

еще раз - кодировка выставляется при коннекте к базе. Не отвечайте, делайте что советуют.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476332
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbout.setConnectOptions(QString("ISC_DPB_LC_CTYPE=cp1251"));

не работает
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476337
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abrazivне работает
Откуда такая опция?

kdvеще раз - кодировка выставляется при коннекте к базе.
С сайта инфа. Должно работать?

СКРИПТЫ И ISQL
Собственно, об этом было сказано ранее. Т. е. кодировку символов нужно указать перед коннектом или созданием базы данных. Буквально – в начале скрипта написать:
SET NAMES WIN1251;

Эта же команда выдается интерактивно перед коннектом к БД через утилиту командной строки ISQL, если консоль показывает символы этой кодировки. Если консоль работает, например, в utf8, то придется указывать
SET NAMES UTF8;
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476346
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из доков на Qt. Я не в консоле работаю
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476354
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

опять "не работает". да что ж такое...
Вот так не работает?
db.setHostName("комп с ИБ");
db.setDatabaseName("где база");
db.setConnectOptions("ISC_DPB_LC_CTYPE=WIN1251");
db.open();
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476356
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abrazivdbout.setConnectOptions(QString("ISC_DPB_LC_CTYPE=cp1251"));

не работает

WIN1251, а не CP1251.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476362
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanСКРИПТЫ И ISQL
Собственно, об этом было сказано ранее. Т. е. кодировку символов нужно указать перед коннектом или созданием базы данных. Буквально – в начале скрипта написать:
SET NAMES WIN1251;спутал теплое с мягким? set names говорит isql в какой читать символы из скрипта.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476367
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv ,
авторопять "не работает". да что ж такое...
Вот так не работает?
db.setHostName("комп с ИБ");
db.setDatabaseName("где база");
db.setConnectOptions("ISC_DPB_LC_CTYPE=WIN1251");
db.open();

Unsupported encoding: WIN1251. Using UNICODE_FFS for ISC_DPB_LC_CTYPE.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476370
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
If Qt doesn't support the given text encoding the driver will issue a warning message and connect to the database using UNICODE_FSS. Note that if the text encoding set when connecting to the database is not the same as in the database, problems with transliteration might arise.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476373
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче Qt не понимает Win1251, но её понимает IBase, напротив CP1251 понимает QT, но не понимает IBase.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476375
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так Qt, наверное, UTF8 хочет.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476376
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет же. Тут драйвер походу нужно свой писать.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476378
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

ну и драйвер.... А UTF8 поддерживает?
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476379
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utf-8 по умолчанию стоит, база понимает win1251.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476384
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abrazivutf-8 по умолчанию стоит

Уверен? Если кодировка коннекта utf8 по умолчанию, то ошибок транслитерации при выполнении запроса, возвращающего данные в win1251 быть не должно - сервер просто перекодирует win1251 в utf8 перед тем, как отдать их клиенту.
Законнекться в эксперте с UTF8 вместо WIN1251 и проверь..
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476397
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

да хоть наоборот
http://www.ibase.ru/unicode_faq/
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476498
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверял, ошибка точно такая же.
...
Рейтинг: 0 / 0
Установить кодировку БД для работы с ней
    #39476502
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

ну, значит драйвер будет работать только со старой и кривой unicode_fss.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Установить кодировку БД для работы с ней
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]