Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смена языкового драйвера для DBASE [D7, dBase, FoxPro]


Stas Kalishenko ©   (2004-12-08 14:33:00) 

Есть база в досовской кодировке. После программной смены языкового драйвера в реестре для DBASE ничего не меняется, т.е. в гриде те же зяблики, что и до этой операции, хотя в реестре значение LANGDRIVER меняется. Вот код:

//Функция замены драйвера
procedure ChangeBDELangDriver;
begin
 oldlevel := '3';
 oldlang := 'db866ru0';
 tr := TRegistry.Create;
 try
   tr.RootKey := HKEY_LOCAL_MACHINE;
   tr.OpenKey('\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\INIT', true);
   oldlang := tr.ReadString('LANGDRIVER');
   tr.OpenKey('\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\INIT', true);
   tr.WriteString('LANGDRIVER', 'db866ru0');
   tr.CloseKey;
   tr.OpenKey('\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE', true);
   oldlevel := tr.ReadString('LEVEL');
   tr.OpenKey('\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE', true);
   tr.WriteString('LEVEL', '5');
   tr.CloseKey;
 finally
   tr.Free;
 end;
 infi := TIniFile.Create(ExtractFilePath(Application.ExeName)+'bdetmp.ini');
 infi.WriteString('BDE', 'Lang', oldlang);
 infi.WriteString('BDE', 'Level', oldlevel);
 infi.Free;
end;

//Обработчик кнопки
procedure TForm1.Button1Click(Sender: TObject);
begin
 Table1.Close;
 ChangeBDELangDriver;
 Table1.Open;
end;

Получается какая-то чепуха. В реестре устанавливается один драйвер (db866ru0), а в BDE администраторе я вижу другой (ansius0 - так кажется). Т.е. выходит, что все настройки компоненты хватают из bde.cfg, т.е. из БДЕ, который в свою очередь не синхронизируется с реестром. Что не так?


Bob   (2004-12-09 02:19:00) [1]

а ты попробуй поменять не драйвер и реестр а заголовок dbf-файла. я эту проблему решил именно так


Anatoly Podgoretsky   (2004-12-08 20:15:00) [2]

Все изменения в конфиграциях вступают в действие после пезапуска всех приложений использующих БДЕ


Stas Kalishenko   (2004-12-08 18:19:00) [3]

Попробовал еще один метод. После выполнения этой процедуры вносятся изменения в bde.cfg и сами изменения видны только после перезапуска приложения, а не в реале. Код ниже:

procedure TForm1.Button2Click(Sender: TObject);
var List:TStringList;
begin
 Table1.Close;
 List := TStringList.Create;
 List.Add('LANGDRIVER=db866ru0');
 //List.Add('LANGDRIVER=DBWINUS0');
 Session.ModifyDriver('DBASE',List);
 Session.SaveConfigFile;
 ShowMessage('Ok!');
 Table1.Open;
 Table1.Refresh;
end;

Что в нем не так? Я думал, что после внесения изменений методом ModifyDriver и сохранения изменений методом SaveConfigFile, Table1.Open покажет в гриде нормальные данные. Ан нет. Нифига. ТОлько после перезапуска.


HSolo   (2004-12-08 18:08:00) [4]

>Stas Kalishenko   (08.12.04 16:21) [3]

>>все замечательно настраивается средствами штатного БДЕ-конфигуратора ..

>А можно поподробнее

Наверное, имеется в виду BDEAdmin

> чтобы при выгрузке приложения все настройки возвращались в исходное состояние

TSession.ModifyAlias


Stas Kalishenko   (2004-12-08 16:21:00) [5]

>>тебе что в конечном итоге надо-то ? видеть НД в нормальной кодировке ?

Именно. При этом, чтобы при выгрузке приложения все настройки возвращались в исходное состояние, в частности языковой драйвер.

>>все замечательно настраивается средствами штатного БДЕ-конфигуратора ..

А можно поподробнее.


Digitman   (2004-12-08 15:56:00) [6]


> Получается какая-то чепуха


тебе что в конечном итоге надо-то ? видеть НД в нормальной кодировке ? при этом осуществляя доступ к объектам базы с пом. БДЕ ? ну так зачем же сразу в реестре ковыряться ? все замечательно настраивается средствами штатного БДЕ-конфигуратора ..


HSolo   (2004-12-08 15:34:00) [7]

Боюсь соврать - давно с BDE не работаю; если ошибаюсь, пусть меня поправят - но, по-моему, BDE инициалицируется в initialization модуля dbtables, после чего изменения в реестре ему без разницы :) Лучше воспользуйтесь TSession.ModifyAlias


Наверх

Титульная страница Поиск, карта сайта Написать письмо