некорректно отображается содержимое TStringField (независимо от Transliterate)...
пытался:
ADOQuery, ADOTable с драйверами для dBase...
конструкция:
procedure TForm1.GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
var
Buff: Pchar;
begin
Text := Sender.AsString;
Buff := AllocMem(Length(Text) + 1);
OEMToANSI(PChar(Text), Buff);
Text := Buff;
FreeMem(Buff);
end;
навешиваемая на OnGetText для соответствующего TStringField никаких изменений не дает...
может кто сталкивался?
Здравствуйте MarlboroMan, Вы писали:
MM>некорректно отображается содержимое TStringField (независимо от Transliterate)...
MM>пытался:
MM>ADOQuery, ADOTable с драйверами для dBase...
MM>конструкция:
MM>procedure TForm1.GetText(Sender: TField; var Text: String;
MM> DisplayText: Boolean);
MM>var
MM> Buff: Pchar;
MM>begin
MM> Text := Sender.AsString;
MM> Buff := AllocMem(Length(Text) + 1);
MM> OEMToANSI(PChar(Text), Buff);
MM> Text := Buff;
MM> FreeMem(Buff);
MM>end;
MM>навешиваемая на OnGetText для соответствующего TStringField никаких изменений не дает...
MM>может кто сталкивался?
Короче это проблемма Delphi 6 (SP 2)... под Delphi 5 (с соответствующими апдейтами) всё ок...
имейте ввиду...
Здравствуйте MarlboroMan, Вы писали:
MM>Здравствуйте MarlboroMan, Вы писали:
MM>>некорректно отображается содержимое TStringField (независимо от Transliterate)...
MM>>пытался:
MM>>ADOQuery, ADOTable с драйверами для dBase...
MM>>конструкция:
MM>>procedure TForm1.GetText(Sender: TField; var Text: String;
MM>> DisplayText: Boolean);
MM>>var
MM>> Buff: Pchar;
MM>>begin
MM>> Text := Sender.AsString;
MM>> Buff := AllocMem(Length(Text) + 1);
MM>> OEMToANSI(PChar(Text), Buff);
MM>> Text := Buff;
MM>> FreeMem(Buff);
MM>>end;
MM>>навешиваемая на OnGetText для соответствующего TStringField никаких изменений не дает...
MM>>может кто сталкивался?
MM>Короче это проблемма Delphi 6 (SP 2)... под Delphi 5 (с соответствующими апдейтами) всё ок...
MM>имейте ввиду...
при дальнейших "обследованиях" выяснилось интересное...
трабла коренится, однака, в реализации ADO в MDAC 2.7: судя по всему перепутано направление транслитерации в Microsoft OLE DB Provider for ODBC Drivers...
под Delphi 5 + MDAC 2.5 — всё ОК. (Win2k AS SP2). Скомпилированное приложение оттуда косячит при переносе под WinXP+MDAC 2.7, при этом используется ровно тот же ODBC драйвер для dBase (4.00.6019.00). Сделать даунгрейд до MDAC 2.5 не удалось в связи с
Q: How can I roll back to a previous version of MDAC if an upgrade breaks my applications?
A: If you need to roll back to a previous version of MDAC, you have two primary options, which generally correspond to the type of system involved (test or production):
On production systems, use your backup or disk image (taken immediately before the upgrade) to return to the configuration before the upgrade was installed.
On test systems, the simplest solution is often to reformat the hard drive and reinstall all applications.
Ставить на Win2k MDAC 2.7 не рискнули по той же причине
Здравствуйте MarlboroMan, Вы писали:
MM>некорректно отображается содержимое TStringField (независимо от Transliterate)...
MM>пытался:
MM>ADOQuery, ADOTable с драйверами для dBase...
MM>конструкция:
MM>procedure TForm1.GetText(Sender: TField; var Text: String;
MM> DisplayText: Boolean);
MM>var
MM> Buff: Pchar;
MM>begin
MM> Text := Sender.AsString;
MM> Buff := AllocMem(Length(Text) + 1);
MM> OEMToANSI(PChar(Text), Buff);
MM> Text := Buff;
MM> FreeMem(Buff);
MM>end;
MM>навешиваемая на OnGetText для соответствующего TStringField никаких изменений не дает...
MM>может кто сталкивался? :???:
короче...
"- Если мне, обломку мертвого прошлого, позволено будет употребить ученое слово "резюмируя"... В чем-то необычная судьба, в чем-то невероятно банальная, ибо все, что прозвучало, применимо ко многим до него и ко многим после, таков уж наш мир..." (А. Бушков "Рацарь из неоткуда")
итак резюмируя:
после нескольких эксперементов выяснилось, что баг сей
не в:
— MDAC : на разных версиях ОС, на разных версиях MDAC результат был стабилен (на моей машине глючило, на других, с разными ОС и версиями MDAC не глючило). более того: была проделана титаническая работа по синхронизации версий "комплекта" DLL-лек, используемых тестовым приложением, на моей машине с машиной на которой приложение работало без траблы с кодировками — не помогло. вывод: не всё спокойно в Датском королевстве и кто-то, где-то, порой, честно жить не хочет, па-а-нима-аешь! (речь про реестр, синхронизовать который с реестром машины на которой всё "ОК" по понятным причинам не представляется возможным)
— Delphi : для тестирования использовалось приложение сгенеренное вообще на юдругой машине
ситуация удачно была повторена после переустановки ОС (WinXP) траблы не наблюдалось, а после установки пакета софта (всевозможные апдэйты, Microsoft Office, Delphi 6 и компоненты к нему, клиент для MS SQL Server 2000, и т.д.) трабла появилась
правда есть одно
"но": после отката всего постановленного (СПАСИБО Win XP) и пошаговой установки этого же пакета софта с проверкой на "глючность" после каждого шага — результат не повторился... но (
то самое "но") точно знаю что порядок установки был не тот :(... увы... каюсь... "ибо грешен"... повторять сей подвиг силов у меня уже нет, да и время поджимает — надо всёж таки и работать :super: будет возможность — повторю всё "по-честному". обещаю!
мои выводы:
1. главное подозрение падает на "пакеты критических обновлений" (Windows Update). есть там такой пакетик:
Q282010: Microsoft Jet 4.0 с пакетом обновления 6 (Windows XP)Размер загрузки: 3.2 МБ, < 1 мин.
Microsoft Jet 4.0 с пакетом обновления 6 (SP6) предоставляет последние обновления СУБД Jet 4.0 для Windows XP. Это обновление описано в статье Q282010 базы знаний Майкрософт. Загрузите его, чтобы получить последние обновления для Jet 4.0. , вот на него и грешу... тока в первые разы я ставил все пакеты сразу, а в последнем случае — поотдельности.
2. следствие вывода № 1: "не всё то золото что блестит"... установка пакетов обновлений дело рисковое, но уж ежели рискнул, то наверно стоит ставить каждый пакет поотдельности...
3. запоминайте порядок установки софта!!! может очень пригодиться... правда XP это делает автоматически :) (большое ей за это спасибо!)
Всего
ДОБРОГО!!!
Надеюсь что
эти грабли стали чуть более понятны и заметны