RxDBGrid & CP1251 charset
Модераторы: alexs, Модераторы
RxDBGrid & CP1251 charset
Не работает поиск по полю с кодировкой 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);
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
- Откуда: г.Ставрополь
- Контактная информация:
LCL работает в utf8
RXDBGrid - основан на LCL. Поэтому без вариантов.
Как выход - просто перекодировать данные из таблицы.
PS
Если не секрет - то откуда такие данные? Все нормальные СУБД сейчас умеют работать с UTF8
RXDBGrid - основан на LCL. Поэтому без вариантов.
Как выход - просто перекодировать данные из таблицы.
PS
Если не секрет - то откуда такие данные? Все нормальные СУБД сейчас умеют работать с UTF8
Данные в DBF, их перекодаровать нельзя потому-что параллельно работает другая программа.
В будущем планирую перейти на Firebird но сначала надо перейти на Lazarus.
Выход - поправить исходник и вместо AsString использовать DisplayText.
В будущем планирую перейти на Firebird но сначала надо перейти на Lazarus.
Выход - поправить исходник и вместо AsString использовать DisplayText.
Использую TSQLQuery -> SQLConnector (ODBC)
TDBF не подходит потому-что не понимает SQL запроси.
TDBF не подходит потому-что не понимает SQL запроси.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
А в параметрах ODBC можно указать клиентский charset UTF8?
Добавлено спустя 16 минут 37 секунд:
Погуглил - ODBC даёт возможность указания кодировки данных в DBF файле и требуемой кодировки данных для клиентской программы. В твоём случае - это CP1251 <-> UTF8.
Должно всё прозрачно быть.
Добавлено спустя 16 минут 37 секунд:
Погуглил - ODBC даёт возможность указания кодировки данных в DBF файле и требуемой кодировки данных для клиентской программы. В твоём случае - это CP1251 <-> UTF8.
Должно всё прозрачно быть.
В ODBC возможность указания есть но оно не работает.
Вот если бы в TSQLQuery была OnTranslate event как у TDBF. У тебя небыло желания написать TRxQuery?
Вот если бы в TSQLQuery была OnTranslate event как у TDBF. У тебя небыло желания написать TRxQuery?
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Я использую FBDataSet&UIB для FireBird и ZEOS для всего остального. Штатный SqlDB меня не устроил. Сейчас там может и поправили ошибки - но когда я его пробовал, было слишком сыро.
А насчёт ODBC - люди пишу, что FoxProDBF драйвер такое умеет. Сам не могу попробовать - у меня нет винды.
А насчёт ODBC - люди пишу, что FoxProDBF драйвер такое умеет. Сам не могу попробовать - у меня нет винды.
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);
В 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
- Откуда: г.Ставрополь
- Контактная информация:
ZEOS умеет:
Postgre
Firebird/Interbase
MSSql
MySQL
Sybase
SQLite
ADODB
SybaseSQL
Если использовать Zeos - то доступ через ADO
PS
Но лучше конечно завязывать с DBF
в своих обменниках я вообще использую либо текст либо xml
Postgre
Firebird/Interbase
MSSql
MySQL
Sybase
SQLite
ADODB
SybaseSQL
Если использовать Zeos - то доступ через ADO
PS
Но лучше конечно завязывать с DBF
Блин... еще пол года назад ZEOS ADO не подерживал. Придеться все переделать)
ADO открил и кодировка нормальная но глюки при изменении. Проблема с UPDATE-SQL Parameteres. Невозможно задать key fields. Короче, сировата.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
ну запрос на изменение/удаление можно и вручную написать.
Как я понимаю - просто ADO ничего не знает о том, какое поле является первичным ключём в DBF. ZEOS строит запросы опираясь именно на такую информацию. Я считаю, что это поведение нормальное.
Как я понимаю - просто ADO ничего не знает о том, какое поле является первичным ключём в DBF. ZEOS строит запросы опираясь именно на такую информацию. Я считаю, что это поведение нормальное.
У меня около ста таблиц - неохота к каждой прикручивать TZSQLUpdate. В SQLDB key-fields можна задать в ProviderFlags каждого поля. ZEOS ето игнорирует но анализирует какойто Sсhema. Что ето такое?
