Зміна мовного драйвера для 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-файлу. я цю проблему вирішив саме так