Главная страница
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.043 c
2-1144323969
Скиф
2006-04-06 15:46
2006.04.23
Как осуществить перезагрузку Windows


2-1144236974
dima_kds
2006-04-05 15:36
2006.04.23
Создание приложения Excel


2-1144315983
Sergio77
2006-04-06 13:33
2006.04.23
mysql доступ


15-1143744259
LordOfRock
2006-03-30 22:44
2006.04.23
Просто интересно...


11-1124962544
shalex
2005-08-25 13:35
2006.04.23
Не закрывается модальное окно