Есть три способа сделать это... 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; |
- Reinhard Kalinke [001020]