Кодировка UTF-8 и MS-Access

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 16.10.2008 18:50:49

Всем привет! Я тут первый раз, тоже вот увлекаюсь FreePascal и Lazarus.
Подскажите пожалуйста такой вопросик:
У меня есть БД на Access; с версией 0.9.24 я прекрасно работал через компонент ODBCConnection; Я почитал ваш форум и более менее разобрался с переводом из одной кодировки в другую, но! когда я записываю данные через свою программу, потом читаю, то они хорошо отображаются, а вот при просмотре в Access совсем никак (т.е. через него нельзя ни просматривать ни редактировать иначе Lazarus не воспримет). Как бы сделать так, чтобы я их мог и через программу нормально работать и через Access.
Есть конечно два пути: - настроить Access, чтобы работал с UTF-8
- настроить ODBCConnection (или ещё чего в Lazarus) чтобы работал с cp-1251.
Но ни то не другое, не нашел как настраивать...
Помогите пожалуйста!
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение Attid » 17.10.2008 11:49:49

EmeraldMan писал(а):с версией 0.9.24

эта версия работает с 1251. или ты про линукс ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 17.10.2008 12:17:36

Attid писал(а):
EmeraldMan писал(а):с версией 0.9.24

эта версия работает с 1251. или ты про линукс ?


Про Windows.
С версией 0.9.24 проблем не было, но хотелось бы переходить на более новые версии. И вот когда с помощью 0.9.26 записываешь данные в базу, то при просмотре потом в Access - абракадабра.
Повторюсь:
Можно ли как-нибудь "сказать" Lazarus'у чтобы работал с базой в кодировке cp-1251 (выводил такие записи в DBGrid нормально)
Или наоборот Access'у, чтобы позволял отображать и редактировать в кодировке UTF-8?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 19.10.2008 21:21:18

Наконец разобрался с проблемкой!
Правда вообще третьим способом:
SQLQuery.FieldValues хранит данные как Variant, я их просто их перекодирую с помощью AnsiToUTF8 в доступную для компонент кодировку, чтобы можно было с ней работать, а при выводе в базу соответственно обратно UTF8ToAnsi.
Минус правда есть и довольно весомый - отпадает возможность использования компонент DBGrid, DBEdit и т.д. Вместо них использовать надо обычные StringGrid, Edit и выводить данные туда с помощью того же SQLQuery, правда уже надо вручную прописывать код вывода. Ну и естественно когда меняем содержимое клеточек таблицы, опять надо вручную прописывать SQL запрос для изменения содержимого базы.
И все же подход решает поставленную задачу. :)
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение SAK » 19.10.2008 22:33:42

Вообще для решения этой проблемы уже всё предусмотрено, только почему-то не используется:
У TStringField и TMemoField есть свойство Transliterate. В Delphi это свойство по умолчанию true, а в fpc - false.
В Dataset компоненте должен присутствовать метод Translate, который и будет производить перекодировку тогда когда это нужно. При этом DBGrid и DBEdit станут правильно отображать содержимое базы.
Почему это до сих пор не используется мне непонятно.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 19.10.2008 23:32:50

SAK писал(а):Вообще для решения этой проблемы уже всё предусмотрено, только почему-то не используется:
У TStringField и TMemoField есть свойство Transliterate. В Delphi это свойство по умолчанию true, а в fpc - false.
В Dataset компоненте должен присутствовать метод Translate, который и будет производить перекодировку тогда когда это нужно. При этом DBGrid и DBEdit станут правильно отображать содержимое базы.
Почему это до сих пор не используется мне непонятно.


Честно говоря не понятно как этим пользоваться...
SQLQuery1.Translate('windows-1251','UTF-8',true);
SQLQuery1.Translate('Ansi','UTF-8',true); или как?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение SAK » 20.10.2008 19:08:48

Метод Translate автоматически вызывается из TStringField.GetValue если свойство Transliterate установлено в true.
Для того что бы это работало надо установить свойство Transliterate у всех полей требующих перекодировки в true (проще всего это сделать установив это свойство в true по умолчанию в конструкторе TStringField.Create в файле fields.inc, с последующей пересборкой fpc) и реализовать метод
Код: Выделить всё
function TSQLQuery.Translate(Src, Dest: PChar; ToOem: Boolean): Integer;
var s: string;
begin
  if Src = nil then begin Result:=0; exit end;
  if ToOem then  s:=UTF8ToAnsi(src)
           else  s:=AnsiToUTF8(src);
  StrNCopy(Dest, PChar(s), dsMaxStringSize);
  Result:=strlen(Dest);
end;

Заранее прошу прощения если где-нибудь в коде допустил ошибку, т.к. написал без проверки.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 20.10.2008 20:14:15

Спасибо большое!
Буду разбираться.

А вообще какую базу данных для винды лучше использовать (с кодировкой UTF-8) ?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение alexs » 20.10.2008 20:19:51

Однозначно ПТИЦУ! (FireBird) :D
А вобще вопрос опасный - попахивает разжиганием флейма.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Кодировка UTF-8 и MS-Access

Сообщение Vadim » 21.10.2008 15:19:46

EmeraldMan писал(а):А вообще какую базу данных для винды лучше использовать (с кодировкой UTF-8) ?

Любую, которая поддерживает перекодировку на лету, т.е. сам сервер БД перекодирует автоматом, а не Ваша программа. Из тех, с которыми постоянно работаю это FireBird и MySQL. С остальными просто плотно не работал, они наверно тоже подобное поддерживают.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Кодировка UTF-8 и MS-Access

Сообщение EmeraldMan » 21.10.2008 23:34:39

А какую бы программку посоветывали для быстрого создания базы FireBird (чтобы вручную SQL не писать).
Зашел вот на сайт и там на страничке http://www.ibphoenix.com/main.nfs?a=ibp ... dmin_tools Бог знает сколько всяких программок...
Какая на ваш взгляд лучшая?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Кодировка UTF-8 и MS-Access

Сообщение B4rr4cuda » 22.10.2008 00:22:52

Лучшая - IBExpert.
А под лином я использую FlameRobin.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Кодировка UTF-8 и MS-Access

Сообщение Vadim » 22.10.2008 05:46:10

EmeraldMan
FlameRobin очень простая и (почти :) ) интуитивно понятна. Я ею в винде пользуюсь. Там даже подсказки есть как в Дельфи.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Кодировка UTF-8 и MS-Access

Сообщение alexs » 22.10.2008 09:47:22

IBExpert и по линухом прекрасно в вине работает. Лучше пока нет.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Кодировка UTF-8 и MS-Access

Сообщение Vadim » 22.10.2008 11:40:50

alexs
Дык его через wine запускать надо.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 19

Рейтинг@Mail.ru