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

Материал из DRKB

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

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;


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



Если ссылка на таблицу получена через псевдоним, получить физический путь к ней не так просто. Для получения этого пути необходимо использовать функцию 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:

var
  vDBDesc: DBDesc;
  DirTable: string;
begin
  Check(DbiGetDatabaseDesc(PChar(Table1.DatabaseName), @vDBDesc));
  DirTable := Format('%s\%s', [vDBDesc.szPhyName, Table1.TableName]);
  ShowMessage(DirTable);
end;



Author: Xavier Pacheco
Source: Взято с http://delphiworld.narod.ru
ID: 02523


См.также[править | править код]