{codecitation class="brush: pascal; gutter: false;" width="600px"}

Автор: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

//Для этого надо в Uses добавить ExtCtrls

Session.GetAliasNames (ComboBox1.Items);

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

uses DB, DBTables, DBITypes, DBIProcs;

procedure TForm1.FormCreate (Sender: TObject);

begin

Session.GetAliasNames (ListBox1.Items);

end;

procedure TForm1.ListBox1Click (Sender: TObject);

var

tStr: array[0..100] of char;

Desc: DBDesc;

{

The DBDesc structure describes a database, using the following fields:

szName DBINAME Specifies the database alias name.

szText DBINAME Descriptive text.

szPhyName DBIPATH Specifies the physical name/path.

szDbType DBINAME Specifies the database type.

}

begin

if ListBox1.Items.Count = 0 then

exit;

StrPLCopy (tStr, ListBox1.Items.Strings[ListBox1.ItemIndex], High (tStr));

DbiGetDatabaseDesc (tStr, @Desc);

with Desc do

begin

Label1.Caption:= StrPas (Desc.szName);

Label2.Caption:= StrPas (Desc.szPhyName);

Label3.Caption:= StrPas (Desc.szDbType);

Label4.Caption:= StrPas (Desc.szText);

end;

end;

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

Автор: Reinhard Kalinke

Есть три способа сделать это… No1 годится только для постоянных псевдонимов BDE. No2 работает с BDE и локальными псевдонимами, и No3 работает с BDE и локальными псевдонимами, используя «тяжелый» путь, через вызовы DBI.

function GetDBPath1(AliasName: string): TFileName;

var

ParamList: TStringList;

begin

ParamList:= TStringList.Create;

with Session do

try

GetAliasParams (AliasName, ParamList);

Result:= UpperCase (ParamList.Values['PATH']) '\';

finally

Paramlist.Free;

end;

end;

function GetDBPath2(AliasName: string): TFileName;

var

ParamList: TStringList;

i: integer;

begin

ParamList:= TStringList.Create;

with Session do

try

try

GetAliasParams (AliasName, ParamList);

except

for i:= 0 to pred (DatabaseCount) do

if (Databases[i].DatabaseName = AliasName) then

ParamList.Assign (Databases[i].Params);

end;

Result:= UpperCase (ParamList.Values['PATH']) '\';

finally

Paramlist.Free;

end;

end;

function GetDBPath3(ATable: TTable): TFileName;

var

TblProps: CURProps;

pTblName, pFullName: DBITblName;

begin

with ATable do

begin

AnsiToNative (Locale, TableName, pTblName, 255);

Check (DBIGetCursorProps (Handle, TblProps));

Check (DBIFormFullName (DBHandle,

pTblName,

TblProps.szTableType,

pFullName));

Result:= ExtractFilePath (StrPas (pFullName));

end;

end;

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

Вот маленький примерчик того, как в Delphi можно получить информацию о псевдонимах. Для начала создайте новый проект с ListBox и тремя метками (с именамиListBox1, Label1, Label2 и Label3). Затем создайте обработчик события формы OnCreate с примерно следующим кодом:

procedure TForm1.FormCreate (Sender: TObject);

begin

Session.GetAliasNames (ListBox1.Items);

end;

Теперь создайте обработчик OnClick для ListBox:

procedure TForm1.ListBox1Click (Sender: TObject);

var

tStr: array[0..100] of char;

Desc: DBDesc;

begin

if ListBox1.Items.Count = 0 then

exit;

StrPLCopy (tStr, ListBox1.Items.Strings[ListBox1.ItemIndex], High (tStr));

DbiGetDatabaseDesc (tStr, @Desc);

with Desc do

begin

Label1.Caption:= StrPas (Desc.szName);

Label2.Caption:= StrPas (Desc.szPhyName);

Label3.Caption:= StrPas (Desc.szDbType);

end;

end;

Добавьте следующие модули в секцию 'uses' в верхней части модуля:

DB, DBTables, DBITypes, DBIProcs;

Теперь вы можете увидеть путь для всех ваших стандартных псевдонимов (Paradox и dBase).

{/codecitation}

{codecitation class="brush: pascal; gutter: false;" width="600px"}

Используйте Session.GetAliasParams. В ответ вы получите объект Tstrings, откуда вы можете получить значение для переменной 'PATH". Для получения дополнительной информации обратитесь к электронной справке к разделу, описывающему TSession. Объект Session объявлен в модуле DB.

uses db;

var

aliaspath: string[128];

begin

aliaspath:= Session.GetAliasParams['MyAlias'].values['PATH'];

end;

uses SysUtils,DbiProcs, DBiTypes;

function GetDataBaseDir (const Alias: string): String;

(* Возвращает каталог базы данных, на которую

ссылается псевдним (без конечного обратного слеша) *)

var

sp: PChar;

Res: pDBDesc;

begin

try

New (Res);

sp:= StrAlloc (length (Alias) 1);

StrPCopy (sp,Alias);

if DbiGetDatabaseDesc (sp,Res) = 0 then

Result:= StrPas (Res^.szPhyName)

else

Result:= '';

finally

StrDispose (sp);

Dispose (Res);

end;

end;

{/codecitation}