Страница 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. Что ето такое?