Страница 1 из 2

RxDBGrid & CP1251 charset

СообщениеДобавлено: 13.10.2016 17:28:49
kit
Не работает поиск по полю с кодировкой CP1251

function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions; SearchOrigin:TRxSearchDirection = rsdAll): Boolean;
var
FieldCount: Integer;
Fields: TList;

function CompareField(Field: TField; Value: Variant): Boolean;
var
S,S1: string;

begin
if (Field.DataType = ftString) or (loPartialKey in Options) then
begin
if loCaseInsensitive in Options then
begin
S := UTF8UpperCase(Field.DisplayText);

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 13.10.2016 19:17:20
alexs
LCL работает в utf8
RXDBGrid - основан на LCL. Поэтому без вариантов.
Как выход - просто перекодировать данные из таблицы.
PS
Если не секрет - то откуда такие данные? Все нормальные СУБД сейчас умеют работать с UTF8

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 14.10.2016 08:53:11
kit
Данные в DBF, их перекодаровать нельзя потому-что параллельно работает другая программа.
В будущем планирую перейти на Firebird но сначала надо перейти на Lazarus.
Выход - поправить исходник и вместо AsString использовать DisplayText.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 14.10.2016 09:54:39
alexs
В TDbf есть обработчик на перекодировку данных "на лету"
Dbf1.OnTranslate - должно помочь

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 14.10.2016 10:24:26
kit
Использую TSQLQuery -> SQLConnector (ODBC)
TDBF не подходит потому-что не понимает SQL запроси.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 14.10.2016 12:20:59
alexs
А в параметрах ODBC можно указать клиентский charset UTF8?

Добавлено спустя 16 минут 37 секунд:
Погуглил - ODBC даёт возможность указания кодировки данных в DBF файле и требуемой кодировки данных для клиентской программы. В твоём случае - это CP1251 <-> UTF8.
Должно всё прозрачно быть.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 15.10.2016 09:18:12
kit
В ODBC возможность указания есть но оно не работает.
Вот если бы в TSQLQuery была OnTranslate event как у TDBF. У тебя небыло желания написать TRxQuery?

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 15.10.2016 11:11:34
alexs
Я использую FBDataSet&UIB для FireBird и ZEOS для всего остального. Штатный SqlDB меня не устроил. Сейчас там может и поправили ошибки - но когда я его пробовал, было слишком сыро.
А насчёт ODBC - люди пишу, что FoxProDBF драйвер такое умеет. Сам не могу попробовать - у меня нет винды.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 16.10.2016 08:32:56
kit
Zeos имеет ODBC или OLEDB?
В SQLDB можна реализовать multidatabase. Сетевих клиентов переведу на firebird потому-что в dbf часто слетают индекси в сети. Но dbf проще в обслуживании.
Foxpro OLEDB driver умеет но OLE нет в Lazarus. Foxpro ODBC driver не умеет.
Еще у меня есть шиврование поля, потому без OnGetText и OnSetText мне не обойтись. Потому поправлю исходник и будет работать:
if Assigned(Field.OnGetText) then
S := UTF8UpperCase(Field.DisplayText)
else

S := UTF8UpperCase(Field.AsString);

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 17.10.2016 10:13:17
alexs
ZEOS умеет:
Postgre
Firebird/Interbase
MSSql
MySQL
Sybase
SQLite
ADODB
SybaseSQL

Если использовать Zeos - то доступ через ADO
PS
Но лучше конечно завязывать с DBF :-) в своих обменниках я вообще использую либо текст либо xml

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 18.10.2016 08:39:15
kit
Блин... еще пол года назад ZEOS ADO не подерживал. Придеться все переделать)

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 18.10.2016 15:35:26
alexs
С АДО получилось?

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 19.10.2016 15:45:03
kit
ADO открил и кодировка нормальная но глюки при изменении. Проблема с UPDATE-SQL Parameteres. Невозможно задать key fields. Короче, сировата.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 19.10.2016 16:02:31
alexs
ну запрос на изменение/удаление можно и вручную написать.
Как я понимаю - просто ADO ничего не знает о том, какое поле является первичным ключём в DBF. ZEOS строит запросы опираясь именно на такую информацию. Я считаю, что это поведение нормальное.

Re: RxDBGrid & CP1251 charset

СообщениеДобавлено: 19.10.2016 17:05:42
kit
У меня около ста таблиц - неохота к каждой прикручивать TZSQLUpdate. В SQLDB key-fields можна задать в ProviderFlags каждого поля. ZEOS ето игнорирует но анализирует какойто Sсhema. Что ето такое?