Главная страница
    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.012 c
2-1144196044
h8394E
2006-04-05 04:14
2006.04.23
Про pipe ы.


15-1144167745
Kerk
2006-04-04 20:22
2006.04.23
Visual Fox Pro?


15-1143114528
Der Nechk@ssoff
2006-03-23 14:48
2006.04.23
Политика Мелкософта


15-1143797930
Kolan
2006-03-31 13:38
2006.04.23
Пример из книги не соответствует действительности.


2-1144235805
Bryak
2006-04-05 15:16
2006.04.23
socket





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский