На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Разработка баз данных / Как узнать каталог, где находятся файлы базы данных, если знаем только алиас? Сделать домашней страницей Добавить в избранное Написать писмо

Как узнать каталог, где находятся файлы базы данных, если знаем только алиас?


Воспользуемся компонентом TSession:

function GetDBPath(const Alias: string): string;
var AllSt: TStringList;
   i: integer;
   S: string;
begin
 Result:='';
 if Length(Alias)<>0 then begin
   AllSt := TStringList.Create;
   try
     DM1.Session1.GetAliasParams(Alias,AllSt);
     S:='';
     for i:=0 to AllSt.Count-1 do begin
       if Copy(AllSt[i],1,11)='SERVER NAME' then begin
         S:=ExtractFilePath(Copy(AllSt[i],13,80));
         Break;
       end else if Copy(AllSt[i],1,4)='PATH' then begin
         S:=Copy(AllSt[i],6,80);
         Break;
       end;
     end;
     if Length(S)<>0 then Result:=S
   finally
     AllSt.Free;
   end;
 end;
end;


Модификация этого примера от Середа Александра (alex@uice.com.ua)
1. Если делать универсальную функцию, то Session лучше передавать как параметр.
2. Если уж создаем StringList, то давайте использовать его возможности.

function GetDBPath(ASession: TSession; const Alias: string): string;
var
 AllSt: TStringList;
begin
 Result:='';
 if Length(Alias)<>0 then begin
   AllSt := TStringList.Create;
   try
     ASession.GetAliasParams(Alias,AllSt);
     if (AllSt.IndexOfName('SERVER NAME') > -1) then
       Result := AllSt.Values['SERVER NAME']
     else if (AllSt.IndexOfName('PATH') > -1) then
       Result := AllSt.Values['PATH'];
   finally
     AllSt.Free;
   end;
 end;
end;



Вариант от Vitaly Grobshtein  (tusm5@vorkuta.com)
Давно пользуюсь другим приемом. Работает надежно.
 
//********************************************************************
// Возвращает путь к базе по имени алиаса (вместе с конечным "\")
function GetPhNameByAlias(sAlias: string ): String;
var
 Database: TDatabase;
 pszDir: PChar;
begin
 Database := TDatabase.Create( nil ); {allocate memory}
 pszDir := StrAlloc( 255 );
 try
   Database.AliasName := sAlias;
   Database.DatabaseName := 'TEMP'; {requires a name -- is ignored}
   Database.Connected := True; {connect without opening any table}
   DbiGetDirectory( Database.Handle, True, pszDir ); {get the dir.}
   Database.Connected := False; {disconnect}
   Result := OemToAnsiStr(StrPas( pszDir )); {convert to a string}
 finally
   Database.Free; {free memory}
   StrDispose( pszDir );
 end;
end;

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz