Как по Alias узнать физический путь к базе данных?

Previous  Top  Next

    
 

 

 

Code:

function GetAliasDir(alias: PChar): PChar;

var

s: TStringList;

i: integer;

t: string;

res: array[0..255] of char;

begin

res := '';

if Session.IsAlias(alias) then

begin {Check if alias exists}

   s := TStringList.Create;

   try

     Session.GetAliasParams(Alias, s);

     t := '';

     if s.count > 0 then

     begin

       i := 0;

       while (i < s.count) and (Copy(s.Strings[i], 1, 5) <> 'PATH=') do

         inc(i);

       if (i < s.count) and (Copy(s.Strings[i], 1, 5) = 'PATH =') then

       begin

         t := Copy(s.Strings[i], 6, Length(s.Strings[i]) - 4);

         if t[length(t)] <> '\' then

           t := t + '\';

       end;

     end;

     StrPCopy(res, t);

   except

     StrPCopy(res, '');

   end;

   s.Free;

end;

result := res;

end;

 

 

©Drkb::02522

Взято с Delphi Knowledge Base: http://www.baltsoft.com/


Если ссылка на таблицу получена через псевдоним, получить физический путь к ней не так просто. Для получения этого пути необходимо использовать функцию BDE DbiGetDatabaseDesc. Данной функции в качестве параметров передаются имя псевдонима и указатель на структуру DBDesc. Структура DBDesc будет заполнена информацией, относящейся к этому псевдониму. Определение структуры:

 

 

 

pDBDesc = ^DBDesc;

DBDesc = packed record        { Описание данной базы данных }

szName          : DBINAME;    { Логическое имя (или псевдоним) }

szText          : DBINAME;    { Описательный текст }

szPhyName       : DBIPATH;    { Физическое имя/путь }

szDbType        : DBINAME;    { Тип базы данных }

end;

 

Физическое имя/путь будет содержаться в поле szPhyName структуры DBDesc.

 

Возможные значения, возвращаемые функцией DBIGetDatbaseDesc:

 

DBIERR_NONE             Описание базы данных для pszName было успешно извлечено.

DBIERR_OBJNOTFOUND      База данных, указанная в pszName, не была обнаружена.

Приведенный ниже пример кода показывает как можно получить физический путь для компонента TTable, использующего псевдоним DBDemos:

 

Code:

var

vDBDesc: DBDesc;

DirTable: String;

begin

Check(DbiGetDatabaseDesc(PChar(Table1.DatabaseName), @vDBDesc));

DirTable := Format('%s\%s', [vDBDesc.szPhyName, Table1.TableName]);

ShowMessage(DirTable);

end;

 

 

 

Автор: Xavier Pacheco

©Drkb::02523

       

Взято с http://delphiworld.narod.ru