RxDBGrid & CP1251 charset

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

kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

RxDBGrid & CP1251 charset

Сообщение 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);
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

LCL работает в utf8
RXDBGrid - основан на LCL. Поэтому без вариантов.
Как выход - просто перекодировать данные из таблицы.
PS
Если не секрет - то откуда такие данные? Все нормальные СУБД сейчас умеют работать с UTF8
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Данные в DBF, их перекодаровать нельзя потому-что параллельно работает другая программа.
В будущем планирую перейти на Firebird но сначала надо перейти на Lazarus.
Выход - поправить исходник и вместо AsString использовать DisplayText.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

В TDbf есть обработчик на перекодировку данных "на лету"
Dbf1.OnTranslate - должно помочь
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Использую TSQLQuery -> SQLConnector (ODBC)
TDBF не подходит потому-что не понимает SQL запроси.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А в параметрах ODBC можно указать клиентский charset UTF8?

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

Сообщение kit »

В ODBC возможность указания есть но оно не работает.
Вот если бы в TSQLQuery была OnTranslate event как у TDBF. У тебя небыло желания написать TRxQuery?
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Я использую FBDataSet&UIB для FireBird и ZEOS для всего остального. Штатный SqlDB меня не устроил. Сейчас там может и поправили ошибки - но когда я его пробовал, было слишком сыро.
А насчёт ODBC - люди пишу, что FoxProDBF драйвер такое умеет. Сам не могу попробовать - у меня нет винды.
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение 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);
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ZEOS умеет:
Postgre
Firebird/Interbase
MSSql
MySQL
Sybase
SQLite
ADODB
SybaseSQL

Если использовать Zeos - то доступ через ADO
PS
Но лучше конечно завязывать с DBF :-) в своих обменниках я вообще использую либо текст либо xml
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Блин... еще пол года назад ZEOS ADO не подерживал. Придеться все переделать)
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

С АДО получилось?
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

ADO открил и кодировка нормальная но глюки при изменении. Проблема с UPDATE-SQL Parameteres. Невозможно задать key fields. Короче, сировата.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ну запрос на изменение/удаление можно и вручную написать.
Как я понимаю - просто ADO ничего не знает о том, какое поле является первичным ключём в DBF. ZEOS строит запросы опираясь именно на такую информацию. Я считаю, что это поведение нормальное.
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

У меня около ста таблиц - неохота к каждой прикручивать TZSQLUpdate. В SQLDB key-fields можна задать в ProviderFlags каждого поля. ZEOS ето игнорирует но анализирует какойто Sсhema. Что ето такое?
Ответить