RxDBGrid & CP1251 charset

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

RxDBGrid & CP1251 charset

Сообщение kit » 13.10.2016 17:28:49

Не работает поиск по полю с кодировкой 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);
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 13.10.2016 19:17:20

LCL работает в utf8
RXDBGrid - основан на LCL. Поэтому без вариантов.
Как выход - просто перекодировать данные из таблицы.
PS
Если не секрет - то откуда такие данные? Все нормальные СУБД сейчас умеют работать с UTF8
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 14.10.2016 08:53:11

Данные в DBF, их перекодаровать нельзя потому-что параллельно работает другая программа.
В будущем планирую перейти на Firebird но сначала надо перейти на Lazarus.
Выход - поправить исходник и вместо AsString использовать DisplayText.
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 14.10.2016 09:54:39

В TDbf есть обработчик на перекодировку данных "на лету"
Dbf1.OnTranslate - должно помочь
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 14.10.2016 10:24:26

Использую TSQLQuery -> SQLConnector (ODBC)
TDBF не подходит потому-что не понимает SQL запроси.
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 14.10.2016 12:20:59

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

Добавлено спустя 16 минут 37 секунд:
Погуглил - ODBC даёт возможность указания кодировки данных в DBF файле и требуемой кодировки данных для клиентской программы. В твоём случае - это CP1251 <-> UTF8.
Должно всё прозрачно быть.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 15.10.2016 09:18:12

В ODBC возможность указания есть но оно не работает.
Вот если бы в TSQLQuery была OnTranslate event как у TDBF. У тебя небыло желания написать TRxQuery?
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 15.10.2016 11:11:34

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

Re: RxDBGrid & CP1251 charset

Сообщение kit » 16.10.2016 08:32:56

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);
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 17.10.2016 10:13:17

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

Если использовать Zeos - то доступ через ADO
PS
Но лучше конечно завязывать с DBF :-) в своих обменниках я вообще использую либо текст либо xml
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 18.10.2016 08:39:15

Блин... еще пол года назад ZEOS ADO не подерживал. Придеться все переделать)
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 18.10.2016 15:35:26

С АДО получилось?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 19.10.2016 15:45:03

ADO открил и кодировка нормальная но глюки при изменении. Проблема с UPDATE-SQL Parameteres. Невозможно задать key fields. Короче, сировата.
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

Re: RxDBGrid & CP1251 charset

Сообщение alexs » 19.10.2016 16:02:31

ну запрос на изменение/удаление можно и вручную написать.
Как я понимаю - просто ADO ничего не знает о том, какое поле является первичным ключём в DBF. ZEOS строит запросы опираясь именно на такую информацию. Я считаю, что это поведение нормальное.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3499
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid & CP1251 charset

Сообщение kit » 19.10.2016 17:05:42

У меня около ста таблиц - неохота к каждой прикручивать TZSQLUpdate. В SQLDB key-fields можна задать в ProviderFlags каждого поля. ZEOS ето игнорирует но анализирует какойто Sсhema. Что ето такое?
kit
постоялец
 
Сообщения: 106
Зарегистрирован: 29.09.2016 09:39:07

След.

Вернуться в RxLib

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru