Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

*.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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
3-1141049036
FH
2006-02-27 17:03
2006.04.23
Внутренняя ошибка программирования объектов (Access)


11-1124940227
Uli
2005-08-25 07:23
2006.04.23
смена картинки на label в run-time


2-1144754608
dabreezy
2006-04-11 15:23
2006.04.23
Вопрос по TidHTTP


1-1142156181
TStas
2006-03-12 12:36
2006.04.23
КАк программно распаковать папку?


3-1141371911
DancerMan
2006-03-03 10:45
2006.04.23
*.dbf => функция смены кодировки => отобразить в гриде ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский