Телефон: +7 (926) 245-03-63

Получение пути псевдонима и таблицы

Следующая статья: Информация о псевдонимах BDE.

Как получить псевдоним или путь к таблице?

Решение 1: Есть три способа сделать это:

Первый годится только для постоянных псевдонимов BDE.

Второй работает с BDE и локальными псевдонимами.

Третий работает с BDE и локальными псевдонимами, используя «тяжелый» путь, через вызовы DBI.

function GetDBPath1(AliasName: string): Tname_;
 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): Tname_;
 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): Tname_;
 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;

Решение 2

По таблице (фактически по Database) получить физическое местонахождение.

Примечание: Database можно создать явно, если нет, Delphi сама его создаст. Доступ к ней осуществляется по Table(Query).Database.

 uses DbiProcs; function GetDirByDatabase(Database: TDataBase): string;
var pszDir: PChar; 
begin pszDir:=StrAlloc(255); 
try DbiGetDirectory(Database.Handle, True, pszDir); 
Result:=StrPas(pszDir); finally StrDispose(pszDir); 
end; 
end;

По псевдониму:

function GetPhNameByAlias(sAlias: string): string; var Database: TDataBase; pszDir: PChar;
begin 
  Database:=TDataBase.Create(nil); 
  pszDir:=StrAlloc(255); 
  try
    Database.AliasName:=sAlias;
    Database.DatabaseName :='TEMP'; 
    Database.Connected:=True; 
    DbiGetDirectory(Database.Handle, True, pszDir);
    Database.Connected:=False;
    Result:=StrPas(pszDir);
  finally
    Database.Free;
    StrDispose(pszDir);
  end;
end;
Интересное в интернете: сколько стоят авторегистраторы с монитором обзор