Зміна мовного драйвера для DBASE

Є база у досовському кодуванні. Після програмної зміни мовного драйвера у реєстрі для 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, тобто. з БДЕ, який у свою чергу не синхронізується із реєстром. Що не так?

Боюся збрехати - давно з BDE не працюю; якщо помиляюся, нехай мене виправлять - але, на мою думку, BDE ініціалізується в initialization модуля dbtables, післячого зміни в реєстрі йому все одно :) Краще скористайтесь TSession.ModifyAlias

> Виходить якась нісенітниця

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

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

>>тобі що зрештою треба ? бачити НД у нормальному кодуванні?

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

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

А можна детальніше.

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

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

>А можна докладніше

Мабуть, мається на увазі BDEAdmin

> щоб при вивантаженні програми всі налаштування поверталися у вихідний стан

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

Спробував ще один метод. Після виконання цієї процедури вносяться зміни до 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 покаже у гриді нормальні дані. Та ні. Ніфіга. Тільки після перезапуску.

Всі зміни в конфіграціях набувають чинності після пезапуску всіх додатків, які використовують БДЕ

а ти спробуй поміняти не драйвер і реєстр, а заголовок dbf-файлу. я цю проблему вирішив саме так