Есть небольшая шабашка для знатоков Lazarus
Модератор: Модераторы
-
NTFS
- постоялец
- Сообщения: 388
- Зарегистрирован: 05.11.2007 13:57:50
- Откуда: Краснодар
- Контактная информация:
Это не выход. Мне еще с базами работать.
Только что пробовал, от безысходности, сделать простейшую задачу - открыть WIN1251 базу FireBird 1.5.6 в Lazarus 0.9.28. И FIBL, и SQLDB оригинальные. Пофиг! Вместо русских букв - вопросы. Кодировку указывал как положено
Придется работать с 0.9.24 - там нет этих проблем.
Только не говорите, что я должен преобразовывать кодировки у всех баз всех моих клиентов. Обычно приложение подстраивается под сервер - а не наоборот.
В общем, я в печали. Хороший был проект Lazarus, реальная замена Дельфи для малых и средних задач - а из-за странной тяги разработчиков к переносимости (под Linux и MacOS как раз таки огромное количество родных сред разработки, подобие Дельфи там без надобности) превратился в ужас под названием "найди еще десять мест, где ты забыл сменить кодировку".
К слову - это не ИМХО, а мнение профессионала, который на программировании деньги зарабатывает.
Только что пробовал, от безысходности, сделать простейшую задачу - открыть WIN1251 базу FireBird 1.5.6 в Lazarus 0.9.28. И FIBL, и SQLDB оригинальные. Пофиг! Вместо русских букв - вопросы. Кодировку указывал как положено
Придется работать с 0.9.24 - там нет этих проблем.
Только не говорите, что я должен преобразовывать кодировки у всех баз всех моих клиентов. Обычно приложение подстраивается под сервер - а не наоборот.
В общем, я в печали. Хороший был проект Lazarus, реальная замена Дельфи для малых и средних задач - а из-за странной тяги разработчиков к переносимости (под Linux и MacOS как раз таки огромное количество родных сред разработки, подобие Дельфи там без надобности) превратился в ужас под названием "найди еще десять мест, где ты забыл сменить кодировку".
К слову - это не ИМХО, а мнение профессионала, который на программировании деньги зарабатывает.
задача элементарная - решается в 3 хода:
1) определить кодировку базы данных (или firebird это не позволяет)
2) преобразовывать данные из кодировки базы в utf8 (при чтении из базы)
3) преобразовывать данные из utf8 в кодировки базы (при записи в базу)
код пишется один раз! потом забывается навсегда, т.к. работает автоматически.
1) определить кодировку базы данных (или firebird это не позволяет)
2) преобразовывать данные из кодировки базы в utf8 (при чтении из базы)
3) преобразовывать данные из utf8 в кодировки базы (при записи в базу)
код пишется один раз! потом забывается навсегда, т.к. работает автоматически.
-
NTFS
- постоялец
- Сообщения: 388
- Зарегистрирован: 05.11.2007 13:57:50
- Откуда: Краснодар
- Контактная информация:
У меня в среднем проекте 50-60 таблиц, в каждой - 5-10 полей.
Мне нужно 600 раз указывать код перекодировки? А для визуальных компонент? А DBGrid'ы?
Давай просто признаем - есть разработчики, которым UTF8 нужен, а есть те, которым он как велосипеду - фотонный отражатель. Вторых - БОЛЬШИНСТВО. И вот это уже ИМХО.
Мне нужно 600 раз указывать код перекодировки? А для визуальных компонент? А DBGrid'ы?
Давай просто признаем - есть разработчики, которым UTF8 нужен, а есть те, которым он как велосипеду - фотонный отражатель. Вторых - БОЛЬШИНСТВО. И вот это уже ИМХО.
при работе с Zeos достаточно один раз передать в коннектион
Properties.Strings.Add( 'codepage=utf8');
и проблема практически отпадает.
Properties.Strings.Add( 'codepage=utf8');
и проблема практически отпадает.
NTFS писал(а):мнение профессионала, который на программировании деньги зарабатывает
Думаю здесь таких "вагон и тележка". Я тоже в этой тележке.
NTFS писал(а):сделать простейшую задачу - открыть WIN1251 базу FireBird 1.5.6
У меня сервер ваще работает с OEM-866 кодировкой
П.С. Вспомнил. На втором серваке CP-1251, но он сам перекодирует для клиентов в UTF-8.
NTFS писал(а):У меня в среднем проекте 50-60 таблиц, в каждой - 5-10 полей.
Мне нужно 600 раз указывать код перекодировки? А для визуальных компонент? А DBGrid'ы?
очевидно же, что нужно меня код только в 2х местах - запись и чтение.
все профессионалы так делают!
Кодировку надо указывать не ту, которая в базе, а ту, которая Вам нужна на клиенте. Ничего дописывать не нужно. т.к. на клиенте у Вас utf-8, то именно её и нужно указывать. А какая кодировка в базе сервер и без Вас знает. И он сам перекодирует как надо при фече и посте.
Т.е. решеие такое - в параметрах конекта указать utf-8. Все.
Т.е. решеие такое - в параметрах конекта указать utf-8. Все.
Не пытайся согнуть ложку - это не возможно. Главное - понять, что ложки не существует.
Перефраз:
Не пытайся решить проблему, если ее нет - это не воможно.
Очевидно, что проблема не в Лазаре, а в подходе организации мыслей. Ведь завтра может понадобиться работать с БД в ISO-***** или другой какой CP-****. И что же - переписывать Лазарь под эту кодировку, чтоб он не превратился в "Хороший был проект Lazarus"?
Не спорьте друзья мои. FireBird до версии 2.0 перекодировкой сам не занимался. Проблемы у товарища в том, что он не может перейти на современную версию FireBird'а. Виноват оказался Lazarus... 
InterBase 5 уже этим занимался. Это заложено в архитектуру сервера с самого рождения.
Собственно, этт параметр для именно этого и был придуман.
Просто, когда-то давно на Дельфи не было утф-8, и указывали win1251 - ту мамую кодировку с которой работала Дельфи.
Собственно, этт параметр для именно этого и был придуман.
Просто, когда-то давно на Дельфи не было утф-8, и указывали win1251 - ту мамую кодировку с которой работала Дельфи.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Firebird и на 1.5 уже конвертировала свободно, за исключением blob полей.
Так может ему BLOB и требуется?
