Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизСмена языкового драйвера для DBASE Найти похожие ветки
← →
Stas Kalishenko (2004-12-08 14:33) [0]Есть база в досовской кодировке. После программной смены языкового драйвера в реестре для 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, т.е. из БДЕ, который в свою очередь не синхронизируется с реестром. Что не так?
← →
HSolo © (2004-12-08 15:34) [1]Боюсь соврать - давно с BDE не работаю; если ошибаюсь, пусть меня поправят - но, по-моему, BDE инициалицируется в initialization модуля dbtables, после чего изменения в реестре ему без разницы :) Лучше воспользуйтесь TSession.ModifyAlias
← →
Digitman © (2004-12-08 15:56) [2]
> Получается какая-то чепуха
тебе что в конечном итоге надо-то ? видеть НД в нормальной кодировке ? при этом осуществляя доступ к объектам базы с пом. БДЕ ? ну так зачем же сразу в реестре ковыряться ? все замечательно настраивается средствами штатного БДЕ-конфигуратора ..
← →
Stas Kalishenko (2004-12-08 16:21) [3]>>тебе что в конечном итоге надо-то ? видеть НД в нормальной кодировке ?
Именно. При этом, чтобы при выгрузке приложения все настройки возвращались в исходное состояние, в частности языковой драйвер.
>>все замечательно настраивается средствами штатного БДЕ-конфигуратора ..
А можно поподробнее.
← →
HSolo © (2004-12-08 18:08) [4]>Stas Kalishenko (08.12.04 16:21) [3]
>>все замечательно настраивается средствами штатного БДЕ-конфигуратора ..
>А можно поподробнее
Наверное, имеется в виду BDEAdmin
> чтобы при выгрузке приложения все настройки возвращались в исходное состояние
TSession.ModifyAlias
← →
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 покажет в гриде нормальные данные. Ан нет. Нифига. ТОлько после перезапуска.
← →
Anatoly Podgoretsky © (2004-12-08 20:15) [6]Все изменения в конфиграциях вступают в действие после пезапуска всех приложений использующих БДЕ
← →
Bob © (2004-12-09 02:19) [7]а ты попробуй поменять не драйвер и реестр а заголовок dbf-файла. я эту проблему решил именно так
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c