Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

*.dbf => функция смены кодировки => отобразить в гриде ?   Найти похожие ветки 

 
DancerMan ©   (2006-03-03 10:45) [0]

Приветствую всех!
DBF, ADOConnection.
Информация в *.dbf хранится в одной кодировке.
Есть функция перекодирования.
В TDBGrid необходимо отобразить уже в перекодированном виде.
В ADOQuery на событие AfterOpen пишу такое:
   ADOQuery.First;
   while not ADOQuery.Eof do
   begin
     ADOQuery.Edit;
     MainGrid.Fields[0].AsString :=
     ConvertEncoding(
     ADOQuery.FieldByName("TMCNAME").AsString,  
     cmOemDosToAnsi);
     ADOQuery.Post;
     ADOQuery.Next;
   end;
В dbf информацию менять не надо, но если не пишу       ADOQuery.Edit, то пишет, что DataSet не в режиме вставки или редактирования. А так на Post пишет, что не достаточно сведений ключевого поля для обновления.
Просьба предложить свои варианты решения задачи. Спасибо.


 
clickmaker ©   (2006-03-03 11:20) [1]

TField.OnGetText


 
sniknik ©   (2006-03-03 11:48) [2]

решений несколько, например
1 установить у фонта в гриде кодировку OEM_CHARSET (или какая она у тебя в таблице. чтобы совпадало)

2 настроить автоматическую перекодировку у движка (jet, или что там у тебя используется... в выдержке обрати внимание на упоминание о BDE)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase
DataCodePage
Этот параметр используется только в том случае, если на данном компьютере не установлено приложение BDE.
Определяет способ сохранения текстовых страниц. Возможные значения:

OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются.
ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются.

По умолчанию задается значение «OEM». Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.


3 подменять (перекодировать) только то что отображается "руками", можно использовать вычисляемое поле например (показывать его естественно), либо у самого поля события OnGetText/OnSetText (второе не нужно если не собираешся сохранять из грида)

4 твой путь, перекодировка всего рекордсета вручную
в выборку обязательно должно входить ключевое поле (не только потому что не дает записать по причине "не достаточно сведений ключевого поля для обновления", но и по тому что по ключу идентификация записи быстрее и однозначнее)
чтобы давало редактировать рекодсет не трогая таблицу надо открыть ее в режиме ltBatchOptimistic и не делать UpdateBatch. (почитай в общем про режим кешированных изменений. ключевые слова + F1)

или "оторвать" рекордсет от конекта (ADODataSet.Connection:= nil), после этого изменения "оригинала" из этого рекордсета становятся недоступны совсем.

+ ADODataSet.Post; в приведенном цикле лишний, он в любом случае делается при Next;

5 хз. надоело "напрягаться", но наверняка есть еще чтото  (например сменить тип базы на ту у которой колайтионы выставляются... и т.д.)


 
DancerMan ©   (2006-03-03 13:31) [3]


> + ADODataSet.Post; в приведенном цикле лишний, он в любом
> случае делается при Next;


Кстати, и цикл - лишний :)

Вот так работает. Спасибо за помощь!

procedure TMainForm.ADOQueryAfterOpen(DataSet: TDataSet);
begin
 MainGrid.Fields[0].OnGetText := MyGetText;
end;

procedure TMainForm.MyGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
 Text:= ConvertEncoding(Sender.AsString, cmOemDosToAnsi);
end;


 
sniknik ©   (2006-03-03 13:54) [4]

> Кстати, и цикл - лишний :)
естественно. один пункт с другим не пересекается.  а если воспользоваться пунктами 1 или 2 то это просто настройки (установка 1-го свойства), тут и приведенный в > DancerMan ©   (03.03.06 13:31) [3]
код будет лишним. и фукция ConvertEncoding тоже.



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.078 c
3-1141225115
Hadroran
2006-03-01 17:58
2006.04.23
Коннект к базе IB


6-1136971997
Dimich1978
2006-01-11 12:33
2006.04.23
Прописать свою прогу в Разрешенные (Брандмауер)


3-1140959607
stone
2006-02-26 16:13
2006.04.23
Удаление из DBF


3-1140947792
Adulgeriy
2006-02-26 12:56
2006.04.23
переход на другую БД


2-1144133902
veb
2006-04-04 10:58
2006.04.23
Запретить перерисовку DBGrida