![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Юникод в DBGrid [D7, XP]
mefodiy © (2010-10-31 19:47:00)Возникла необходимость переделать программу, написанную в Delphi 7 в Юникод. Решил использовать компоненты TMS. Все нормально мигрировалось кроме DBGrid. Компонента TTntDBGrids никак не хочет воспринимать юникод символы. Например, следующая команда
FieldByName('MyField').AsString := WideChar($0259)
Вместо предусмотренного знака WideChar($0259) в поле 'MyField' дает знак вороса "?".
Что делаю не так?
Заранее благодарен.
Anatoly Podgoretsky (2010-11-02 11:16:00) [1]
> А можно ли создать DBF таблицу с utf-8.
Можно, но только для хранения и то придется применять разного рода методы, чтобы не преобразовалось во что то другое.
sniknik (2010-11-02 10:32:00) [2]> А можно ли создать DBF таблицу с utf-8.
utf-8 это юникод основанный на ansi...
http://ru.wikipedia.org/wiki/Utf-8
т.е. писать как есть, читать как есть, преобразовывать только при показе. и естественно не возможны будут запросы с условиями по этому полю/индексы "собьются"/и размер поля должен быть больше чем есть символов (с ограничением у dbf на 254 символа, тяжко придется...)
clickmaker (2010-11-02 10:30:00) [3]
> А можно ли создать DBF таблицу с utf-8.
нет
но в поле типа blob можно все что угодно хранить
mefodiy (2010-11-02 10:19:00) [4]
> тогда уж utf-8... проще
А можно ли создать DBF таблицу с utf-8.
В самом Database Desktop (Delphi 7) есть только варианты ANSI и национальные cp...
sniknik (2010-11-01 19:11:00) [5]> но только в таком виде $0259$0260$0261
тогда уж utf-8... проще.
clickmaker (2010-11-01 19:01:00) [6]можно и в дбф хранить уникод.
но только в таком виде $0259$0260$0261 или %u0431%u043e%u0431%u0440%u0443%u0439%u0441%u043a, как некоторые браузеры урлы кодируют )
Anatoly Podgoretsky (2010-11-01 18:38:00) [7]
> Это обычные DBF таблицы.
О каком Юникоде тогда речь.
sniknik (2010-11-01 17:37:00) [8]> Это обычные DBF таблицы.
опля...
если они обычные, то юникода там нет. а если "чуток" еще устарели, то даже кодовой страницы нет.
mefodiy (2010-11-01 17:29:00) [9]
> sniknik ©
Это обычные DBF таблицы.
sniknik (2010-11-01 17:21:00) [10]а теперь нужно смотреть типы в базе, и чем/как открыто, т.к. преобразовывать может не только дельфи...
Anatoly Podgoretsky (2010-11-01 16:50:00) [11]Я никогда не использую литералы, а всегда параметры, вот реальный рабочий код
CommonCommand.Parameters.ParamByName('FirstName').Value := FirstNameEdit.Text;
Anatoly Podgoretsky (2010-11-01 16:45:00) [12]> mefodiy (01.11.2010 16:43:08) [8]
AsString это ANSI
mefodiy (2010-11-01 16:43:00) [13]Проверил оба варианта:
TWideStringField(FieldByName('MyField')).AsString := WideChar($0259);
TWideStringField(FieldByName('MyField')).Value := WideChar($0259);
В первом случае опять появляется знак вопроса, а во втором - вообще ничего не записывается (пустое поле).
Anatoly Podgoretsky (2010-11-01 14:47:00) [14]> mefodiy (01.11.2010 14:14:05) [5]
На мой взгляд, никакие .AS использовать не надо, есть же Value
sniknik (2010-11-01 14:20:00) [15]TWideStringField(FieldByName('MyField')).As.... должно быть что то вайдстринговое.
mefodiy (2010-11-01 14:14:00) [16]>>use TWideStringField, Luke!
Подскажите, как это использовать
Игорь Шевченко (2010-10-31 22:05:00) [17]use TWideStringField, Luke!
mefodiy (2010-10-31 22:00:00) [18]>>AsWideString
такого метода у TFields нет
>>WideChar(#$0259) или #$0259
результат тот же (?)
sniknik (2010-10-31 21:35:00) [19]> := WideChar($0259)
приведение числа к строке? и что должно получится?
может так*
:= WideChar(#$0259)
?
или, еще лучше
:= #$0259
так
Anatoly Podgoretsky (2010-10-31 20:02:00) [20]> mefodiy (31.10.2010 19:47:00) [0]
А не AsWideString