Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];




Вниз

Языковые драйверы в BDE 


Андрей Брусов   (2002-04-04 09:13) [0]

Всем привет! Подскажите как програмно сменить языковой драйвер в BDE. Или как сделать так, чтобы BDE устанавливался на новый компьютер сразу с нужными языками, например: dBASE RUS cp 866, а то по умолчанию там забит ANSII. Чтобы клиенту не приходилось самому настраивать BDE.
И второе, как все-таки настроить Database Desktop, чтобы вместо абракадабры был русский алфавит, чего только не пробовал, ничег не помогает. Заранее благодарен.



deleon   (2002-04-04 09:50) [1]

В данном случае очень пригодится компонент TBDEConfig, который позволяет в Run-Time настраивать любые параметры BDE, доступные из BDE Administrator. Взять его можно здесь:
http://www.dbwork.kuban.ru/download/degisydb.zip



Mike S   (2002-04-04 09:59) [2]

List.Values["LANGDRIVER"] := "Pdox ANSI Cyrillic";
Session.ModifyAlias(AliasName, List);



deleon   (2002-04-04 10:08) [3]

И еще, попробуй вместо Database Desktop -> Database Workshop, функциональность намного выше чем у первого и проблем с кодировкой не возникает!
http://www.dbwork.kuban.ru



Андрей Брусов   (2002-04-04 11:10) [4]

Скачал компонент. Установить не получается. Не находит файл с расширением .inc
Неужели нет других путей? Алиасами BDE я не пользуюсь.



sniknik   (2002-04-04 11:23) [5]

кроме установок в BDE драйвер в таблице прописывается попробуй его изменить.

procedure ChangeLangDriver(DatabaseName, TableName, LDName: string);
var
TblExt: string;
Database: TDatabase;
TblDesc: CRTblDesc;
OptDesc: FLDDesc;
OptData: array [0..250] of Char;
Cur: hDBICur;
Rec: CFGDesc;
begin
if (TableName="") or (LDName="") then raise Exception.Create("Unknown TableName or LDName");
Database:=Session.OpenDatabase(DatabaseName);
try
if Database.IsSQLBased then raise Exception.Create("Function ChangeLangDriver working only with dBase or Paradox tables");
FillChar(OptDesc, SizeOf(OptDesc), #0);
FillChar(TblDesc, SizeOf(TblDesc), #0);
StrCopy(OptDesc.szName, "LANGDRIVER");
OptDesc.iLen:=Length(LDName)+1;
with TblDesc do begin
StrPCopy(szTblName, TableName);
TblExt:=UpperCase(ExtractFileExt(TableName));
if TblExt="DBF" then StrCopy(szTblType, szDbase)
else if TblExt=".DB" then StrCopy(szTblType, szParadox)
else begin
AnsiToOEM(StrPCopy(OptData, DatabaseName), OptData);
if DbiOpenCfgInfoList(nil, dbiREADONLY, cfgPersistent, StrPCopy(OptData, "\DATABASES\"+StrPas(OptData)+"\DB INFO\"),Cur)<>DBIERR_NONE
then raise Exception.Create("Unknown table type");
try
while DbiGetNextRecord(Cur, dbiNOLOCK, @Rec, nil)<>DBIERR_EOF do
if StrComp(Rec.szNodeName, "DEFAULT DRIVER")=0 then begin
StrCopy(szTblType, Rec.szValue);
Break;
end;
finally
Check(DbiCloseCursor(Cur));
end;
end;
iOptParams:=1;
pfldOptParams:=@OptDesc;
pOptData:=@OptData;
end;
StrPCopy(OptData, LDName);
Check(DbiDoRestructure(Database.Handle, 1, @TblDesc, nil,nil, nil, False));
finally
Session.CloseDatabase(Database);
end;
end;

вызов
ChangeLangDriver("D:\", "CASH005.DB", "cyrr");
для dbf
ChangeLangDriver("D:\", "CASH005.DBF", "db866ru0");



deleon   (2002-04-04 11:57) [6]

10000 извинений!!!
По спешке забыл включить в пакет DegisyDb.inc
Теперь все в порядке:
http://www.dbwork.kuban.ru/download/degisydb.zip



Андрей Брусов   (2002-04-04 16:01) [7]

Спасибо за компонент, установил. С BDEConfig все нормально, а вот BDEInfo.UpdateInfo почему-то не срабатывает. В чем дело?



deleon   (2002-04-04 16:04) [8]

Сейчас проверю, а где не срабатывает в Design-Time или Run-Time,
может ничего не изменялось с предыдущего апдэйта, вот и кажется что не работает?



deleon   (2002-04-04 16:08) [9]

Update info работает, только это происходит незаметно, тк вероятно не изменилось ни количество сессий, ни количество пользователей и т.д.



Андрей Брусов   (2002-04-04 16:10) [10]

Поменял все драйверы на "acsii", а Update выдает по прежнему RUS866. На обоих этапах.
Вот код, посмотри:

BdeInfo1.UpdateInfo;
If BdeInfo1.LangDriver <> "dBASE RUS cp866" Then
BdeConfig1.Execute;



deleon   (2002-04-04 16:18) [11]

BdeInfo выдает язык с которым был инициализирован сам BDE, а не конкретный драйвер (Paradox, dBase), чтобы изменить язык BDE по-умолчанию, необходимо его переинициализировать с другим языком. Собственно langdriver bde ни на что не влияет! Важно какой langdriver стоит у драйвера доступа к СУБД! А BDEConfig в твоем случае устанавливает язык для драйвера доступа к таблицам dBase, чтобы убедиться в том что он его корректно устанавливает, можно посмотреть нужную ветвь при помощи BDE Administrator. Все работает, удачи!



deleon   (2002-04-04 16:20) [12]

Наверное пора садиться писать статьи по работе BDE, хотя BDE потихоньку сдает позиции ADO :)))



Андрей Брусов   (2002-04-04 16:26) [13]

Да я понял, что Info берет сведения из раздела SYSTEM/INIT, но как тогда програмно определить драйвер доступа к СУБД. Можно конечно при каждом запуске программы запускать BDEConfig, но зачем если это можно сделать один раз, а потом просто проверять драйвер?
А вообще классная штука, спасибо еще раз.



Lusha   (2002-04-04 16:37) [14]

>deleon
>...BDE потихоньку сдает позиции ADO

Ой, ли?



deleon   (2002-04-04 16:42) [15]

Так нужно один раз и навсегда установить драйвер для dBase в этой ветке:
\DRIVERS\DBASE\INIT\LANGDRIVER=db866ru0



Андрей Брусов   (2002-04-05 09:19) [16]

Сообщение для deleon.
Привет! При запуске приложения на другом компьютере, появилось сообщение о необходимости библиотеки DegisyDb6.bpl
Ее нужно в дистрибутив включать? Или как?



deleon   (2002-04-05 09:37) [17]

Нет не нужно! Посмотри в свойствах проекта, не стоит-ли галочка использования пакетов? Сейчас я и сам проверю все :)))



deleon   (2002-04-05 09:40) [18]

Нашел ошибку:
Нужно зайти в опции пакета и установить свойства:
Designtime only и Rebuil as needed.
И перекомпилировать пакет, должно все заработать, а я сейчас обновлю download. Спасибо :)))



Андрей Брусов   (2002-04-05 09:55) [19]

Тогда еще одна задачка, может это связано с предыдущей, не знаю. В общем на компе с Windows XP, приложение при запуске требует rtl60, расширение не помню. Посмотри если есть возможность.



deleon   (2002-04-05 10:00) [20]

К сожалению, нет Windows XP...Но думаю это все из предыдущей песни, кстати я обновил download DegisyDb.



Андрей Брусов   (2002-04-05 12:08) [21]

Нет не из той. Проблема вот в чем. Если строю свой проект без DegisyDb6.dcp (не ставлю галочку в опциях и не добавляю туда пакет), то при компиляции приложения Delphi не находит BdeConfig.dcu, а если строю с пакетами даже с одним DegisyDb6, то при запуске приложения запрашивается rtl60.bpl, хотя она никакого отношения к твоим компонентам не имеет. Что делать?



deleon   (2002-04-05 12:27) [22]

Пропиши пути к библиотеке, ведь файл BdeConfig.pas есть!



Андрей Брусов   (2002-04-05 12:52) [23]

Да ни к чему чужие исходники курочить. Может просто при установке компонентов все *.dcu копировать в какой-то доступный дельфийский каталог. Где у Delphi свои *.dcu храняться? Чтобы не подключать дополнительные пакеты. Или это невозможно?



Андрей Брусов   (2002-04-05 13:07) [24]

В общем получилось. Скопировал bdeConfig.dcu в каталог LIB и все заработало. Слушай, а может я не из того места устанавливал компоненты, может перед установкой весь пакет куда-то надо помещать? Просто раньше никогда не доводилось, обходился тем, что есть.



deleon   (2002-04-05 13:58) [25]

Я делаю так:
Путь к Delphi: C:\Delphi6\Delphi6\Bin...
Путь к левым компонентам: C:\Delphi6\Adds\...
Копирую файлы DegisyDb сюда:
C:\Delphi6\Adds\DegisyDb\
Затем компилирую и инсталлирую пакет DegisyDb.dpk
И затем прописываю путь к библиотеке в настройках:
C:\Delphi6\Adds\DegisyDb\
-----------------------------------
Все работает :)))
А копировать в Lib чужие dcu не советую, будет бардак :)))



Андрей Брусов   (2002-04-06 09:08) [26]

Так и сделал. Все работает, большое спасибо. Удачи.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.031 c
1-80937           Алена                 2002-04-11 17:49  2002.04.25  
Async Pro + Модем


1-80958           Explorer              2002-04-12 10:28  2002.04.25  
Возможно запретить табуляцию?


1-80852           Rammst                2002-04-13 10:47  2002.04.25  
Help!!!


3-80752           ak                    2002-04-03 17:03  2002.04.25  
Как сделать SQL-запрос?


6-81025           shapotkin             2002-02-15 09:51  2002.04.25  
Как скачать файл по FTP с применением ProgressBar