Промяна на езиковия драйвер за DBASE
Има основа в DOS кодирането. След програмна промяна на езиковия драйвер в регистъра за DBASE нищо не се променя, т.е. решетката има същите чинки като преди тази операция, въпреки че стойността на LANGDRIVER се променя в системния регистър. Ето кода:
//Функция за подмяна на драйвер procedure ChangeBDELangDriver; begin oldlevel := "3"; oldlang := "db866ru0"; tr := TRegistry.Create; опитайте 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); старо ниво := tr.ReadString("НИВО"); tr.OpenKey("\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE", true); tr.WriteString("НИВО", "5"); tr.CloseKey; накрая tr.Free; край; infi := TIniFile.Create(ExtractFilePath(Application.ExeName)+"bdetmp.ini"); infi.WriteString("BDE", "Lang", oldlang); infi.WriteString("BDE", "Ниво", старо ниво); infi.Free; край;
//Манипулатор на бутони procedure TForm1.Button1Click(Sender: TObject); begin Table1.Close; Промяна на BDELangDriver; Таблица1.Отворена; край;
Получава се някаква глупост. В системния регистър е инсталиран един драйвер (db866ru0), а в администратора на BDE виждам друг (ansius0 - така изглежда). Тези. оказва се, че всички настройки на компонента са взети от bde.cfg, т.е. от BDE, който от своя страна не е синхронизиран с регистъра. Какво не е наред?
Страх ме е да излъжа - отдавна не работя с BDE; ако греша, не се колебайте да ме поправите - но според мен BDE се инициализира при инициализацията на модула dbtables, следзащо промените в регистъра нямат значение за него :) По-добре използвайте TSession.ModifyAlias
> Получава се някаква глупост
какво ти трябва в крайна сметка? да видите ND в нормалното кодиране? при упражняване на достъп до обектите на базата данни с пом. BDE ? добре така че за какво веднага в регистъра се избира? всичко е перфектно конфигурирано с помощта на стандартния BDE конфигуратор ..
←→Стас Калишенко ( 2004-12-08 16:21 ) [3]
>>От какво в крайна сметка се нуждаете? да видите ND в нормалното кодиране?
Точно. В същото време, така че когато приложението се разтовари, всички настройки се връщат в първоначалното си състояние, по-специално езиковият драйвер.
>>всичко е чудесно конфигурирано с помощта на стандартния BDE конфигуратор ..
Може ли повече подробности.
>Стас Калишенко (08.12.04 16:21) [3]
>>всичко е чудесно конфигурирано с помощта на стандартния BDE конфигуратор ..
> Можете ли да бъдете по-конкретни?
Вероятно означава BDEAdmin
> така че когато приложението се разтовари, всички настройки се връщат в първоначалното си състояние
←→Стас Калишенко ( 2004-12-08 18:19 ) [5]
Опитах друг метод. След тази процедура се правят промени в bde.cfg и самите промени се виждат само след рестартиране на приложението, а не в реалния живот. Код по-долу:
procedure TForm1.Button2Click(Sender: TObject); var List:TStringList; begin Table1.Close; Списък := TStringList.Create; List.Add("LANGDRIVER=db866ru0"); //List.Add("LANGDRIVER=DBWINUS0"); Session.ModifyDriver("DBASE",Списък); Session.SaveConfigFile; Покажи съобщение("Добре!"); Таблица1.Отворете; Таблица1.Опресняване; край;
Какво не е наред с него? Мислех, че след извършване на промени с помощта на метода ModifyDriver и запазванепромени с помощта на метода SaveConfigFile, Table1.Open ще покаже нормални данни в мрежата. Не Нифига. Само след рестарт.
Всички промени в конфигурацията влизат в сила след рестартиране на всички приложения, използващи BDE
и се опитваш да промениш не драйвера и регистъра, а хедъра на dbf-файла. Реших този проблем по този начин