Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Как программно создать алиас в BDE ?   Найти похожие ветки 

 
Denisiy ©   (2003-12-22 15:15) [0]

Всем доброго дня.
Есть локальные таблицы, к ним хочу достучаться. Использую TDatabase, все НД завязаны на него. Ведь чтобы TDatabase подключить (т.е. поле AliasName), нужно пойти и ручками настроить в BDE ->New DB Driver Name и т.д.

Есть ли программное решение задачи?


 
MV   (2003-12-22 15:16) [1]

Неправильно. Вернее, не обязательно.
Подожди, в старом проекте покопаюсь, гляну.


 
JibSkeart ©   (2003-12-22 15:16) [2]

гдето я уже видил ответ

на всякий случай в FAQ-e посмотрите :)


 
Sandman25 ©   (2003-12-22 15:18) [3]

Использование TDatabase совершенно не требует существования алиаса.
Например, при работе с БД Paradox можно указать Database.Params.Values["PATH"] := путь к базе данных;


 
Denisiy ©   (2003-12-22 15:22) [4]

Да оно логически понятно, что алиас не нужен, но если в TDatabase оставить пустым поле ALiasName - то ругается "unknown database" . Как ето победить?


 
MV   (2003-12-22 15:26) [5]

В общем, так:
Компонент типа TDatabase размещаем на экземляре TDataModule.
Клацаем по нему 2 раза.
Указываем в Database/Name что-нибудь, например, MySuperAlias.
Поле Database/Alias оставляем пустым
Поле Database/DriverName пишем InterBase
Поле Parameters Override, например:

SERVER NAME=E:\Working\IBSales\Data\Пример.tib
USER NAME=SYSDBA
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
LANGDRIVER=ancyrr
SQLQRYMODE=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
SCHEMA CACHE TIME=-1
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
ENABLE BCD=FALSE
BLOBS TO CACHE=64
BLOB SIZE=32
WAIT ON LOCKS=FALSE
COMMIT RETAIN=FALSE
ROLE NAME=
SQLDIALECT=1
PASSWORD=masterkey


Options/LoginPrompt&Keep Inactive connection оставляем пустыми.

Все. Теперь в твоих модулях делаем доступным этот TDataModule посредством Uses, а в TTable"s и TQuery"s в свойствах DataBaseName указываем ранее введенное MySuperAlias.

Все.


 
Sandman25 ©   (2003-12-22 15:26) [6]

Указать в этом поле что-нибудь типа My_Temp_Alias.


 
Anatoly Podgoretsky ©   (2003-12-22 15:27) [7]

An application can specify the DatabaseName, DriverName, and Params properties rather than setting AliasName


 
MV   (2003-12-22 15:27) [8]

Sandman неправ!


 
MV   (2003-12-22 15:27) [9]

Подгородецкий прав!


 
Sandman25 ©   (2003-12-22 15:30) [10]

Я вообще-то перепутал. Я этот My_Temp_Alias пишу в DatabaseName. А AliasName у меня остается пустой.


 
MV   (2003-12-22 15:31) [11]

А вот совсем "программно":
with fDM.dbSales do begin // Здесь - fDM - модуль данных,
// а dbSales типа TDataBase
if Connected then Close;
LoginPrompt := false;
Params.Values["PASSWORD"] := Password;
Params.Values["USER NAME"] := UserName;
Params.Values["LANGDRIVER"] := "ancyrr";
Params.Values["SERVER NAME"] := WorkedFileName;
........
Open;

end


 
Sandman25 ©   (2003-12-22 15:33) [12]

[11] MV (22.12.03 15:31)

Из вредности скажу, что весь этот код должен находиться в том же модуле, где объявлена fDM. И желательно в методе :)


 
MV   (2003-12-22 15:38) [13]

Сандман - неправ. Пример из рабочего проекта.


 
Sandman25 ©   (2003-12-22 15:43) [14]

[13] MV (22.12.03 15:38)

У меня у самого полно рабочих проектов :)

В TfDM нужно делать метод SetDatabaseParams (или ConnectTo) с параметрами (или одним параметром-записью) и вызывать его, откуда надо.
Нефиг лезть в переменные из другого модуля напрямую. Захочешь имя TDatabase исправить - будешь полпрограммы переделывать.

PS. И не спорь, а то дам ссылку на книги об инкапсуляции :)


 
MV   (2003-12-22 15:44) [15]

Ну и инкапсулируйся на здоровье. Тихо сам с собою.


 
Sandman25 ©   (2003-12-22 15:50) [16]

[15] MV (22.12.03 15:44)

Кстати, я так и делаю.
Вместо TfDM.ConnectTo я вызываю ConnectTo. ConnectTo - процедура (не метод), с примерно таким кодом.

implementation

var
fDM: TfDM;

procedure ConnectTo(...);
begin
if not Assigned(fDM) then
fDM := TfDM.Create(...);
fDM.ConnectTo(...)
end;

В итоге как захочу, так и назову Datamodule. Какие компоненты захочу, такие и буду использовать... И не надо будет ничего менять.


 
MV   (2003-12-22 15:54) [17]

Clever boy.


 
Sandman25 ©   (2003-12-22 15:57) [18]

[17] MV (22.12.03 15:54)

Зря Вы так... Нет ничего стыдного в том, чтобы учиться. Все мы учимся друг у друга...
Все, пока.


 
AbrosimovA ©   (2003-12-22 16:31) [19]

Program MyProg;

uses Forms,
Windows,
SysUtils,
Classes,
DBTables,...

var L : TStringList;
Index: integer;
Flag: boolean;

begin
Application.CreateForm(TDataModule1, DataModule1);
DataModule1.Session1.ConfigMode := cmPersistent;
L := TStringList.Create;
try
DataModule1.Session1.GetAliasNames(L);
for Index := 0 to L.Count - 1 do
if L.Strings[Index]="MyBase" then Flag:=true;
if NOT(Flag) then begin
L.Add("DEFAULT DRIVER=PARADOX");
L.Add("PATH="+ExtractFilePath(Application.Exename)+"Data");
DataModule1.Session1.AddAlias("MyBase", "STANDARD", L);
DataModule1.Session1.SaveConfigFile;
end;
finally
L.Free;
end;
end.


 
Silver Alex ©   (2003-12-22 16:41) [20]

я вот так делаю
procedure TDA.DataBaseBeforeConnect(Sender: TObject);
begin
DB.Params.Clear;
DB.Params.LoadFromFile("wh_DB.tt");
end;

файл wh_DB.tt

PATH=C:\MainDB
DEFAULT DRIVER=PARADOX
ENABLE BCD=FALSE

вобщем что нужно, то и пишешь в файле



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
14-63372
Lord Vader
2003-12-28 08:06
2004.01.20
Нужен алгоритм по выч. математике


14-63294
Rauf
2003-12-31 20:47
2004.01.20
(СРОЧНО) В Харьков звонить так: 38 (Украина) 0572 (Харьков)???


1-63213
Шурик Ш
2004-01-09 17:45
2004.01.20
Ералаш: Excel неадекватно реагирует на команды...


1-63113
Dr.Karter
2004-01-08 09:18
2004.01.20
Че делать с PDF


3-63040
Sodom
2003-12-15 14:50
2004.01.20
Работа с базой через PHP скрипт.