Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.036 c
4-1100790422
integer
2004-11-18 18:07
2005.01.09
Подскажите как найти в какой *.dll сидят свойства притера


1-1103727679
cfytr
2004-12-22 18:01
2005.01.09
Вставка в RichEdit или ее перехват


1-1103801665
Кирилл
2004-12-23 14:34
2005.01.09
Конвертация


1-1103824947
zokzok
2004-12-23 21:02
2005.01.09
Фреймы


1-1103564105
Roo
2004-12-20 20:35
2005.01.09
Косяк с высотой Edit-ов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский