Форум: "Базы";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
ВнизКак программно создать алиас в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c