![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как программно создать алиас в BDE ? [D6, Paradox]
Denisiy © (2003-12-22 15:15:00)
Всем доброго дня.
Есть локальные таблицы, к ним хочу достучаться. Использую TDatabase, все НД завязаны на него. Ведь чтобы TDatabase подключить (т.е. поле AliasName), нужно пойти и ручками настроить в BDE ->New DB Driver Name и т.д.
Есть ли программное решение задачи?
Silver Alex (2003-12-22 16:41:00) [1]
я вот так делаю
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
вобщем что нужно, то и пишешь в файле
AbrosimovA (2003-12-22 16:31:00) [2]
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.
Sandman25 (2003-12-22 15:57:00) [3]
[17] MV (22.12.03 15:54)
Зря Вы так... Нет ничего стыдного в том, чтобы учиться. Все мы учимся друг у друга...
Все, пока.
MV (2003-12-22 15:54:00) [4]
Clever boy.
Sandman25 (2003-12-22 15:50:00) [5]
[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:44:00) [6]
Ну и инкапсулируйся на здоровье. Тихо сам с собою.
Sandman25 (2003-12-22 15:43:00) [7]
[13] MV (22.12.03 15:38)
У меня у самого полно рабочих проектов :)
В TfDM нужно делать метод SetDatabaseParams (или ConnectTo) с параметрами (или одним параметром-записью) и вызывать его, откуда надо.
Нефиг лезть в переменные из другого модуля напрямую. Захочешь имя TDatabase исправить - будешь полпрограммы переделывать.
PS. И не спорь, а то дам ссылку на книги об инкапсуляции :)
MV (2003-12-22 15:38:00) [8]
Сандман - неправ. Пример из рабочего проекта.
Sandman25 (2003-12-22 15:33:00) [9]
[11] MV (22.12.03 15:31)
Из вредности скажу, что весь этот код должен находиться в том же модуле, где объявлена fDM. И желательно в методе :)
MV (2003-12-22 15:31:00) [10]
А вот совсем "программно":
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:30:00) [11]
Я вообще-то перепутал. Я этот My_Temp_Alias пишу в DatabaseName. А AliasName у меня остается пустой.
MV (2003-12-22 15:27:00) [12]
Подгородецкий прав!
MV (2003-12-22 15:27:00) [13]
Sandman неправ!
Anatoly Podgoretsky (2003-12-22 15:27:00) [14]
An application can specify the DatabaseName, DriverName, and Params properties rather than setting AliasName
Sandman25 (2003-12-22 15:26:00) [15]
Указать в этом поле что-нибудь типа My_Temp_Alias.
MV (2003-12-22 15:26:00) [16]В общем, так:
Компонент типа 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.
Все.
Denisiy (2003-12-22 15:22:00) [17]
Да оно логически понятно, что алиас не нужен, но если в TDatabase оставить пустым поле ALiasName - то ругается "unknown database" . Как ето победить?
Sandman25 (2003-12-22 15:18:00) [18]
Использование TDatabase совершенно не требует существования алиаса.
Например, при работе с БД Paradox можно указать Database.Params.Values["PATH"] := путь к базе данных;
MV (2003-12-22 15:16:00) [19]
Неправильно. Вернее, не обязательно.
Подожди, в старом проекте покопаюсь, гляну.
JibSkeart (2003-12-22 15:16:00) [20]
гдето я уже видил ответ
на всякий случай в FAQ-e посмотрите :)