GetAliasParams(AliasName,ParamList);
Result := UpperCase(ParamList.Values['PATH'])+'\';
finally
Paramlist.Free;
end;
end;
functionGetDBPath2(AliasName: string): TFileName;
var
ParamList: TStringList;
i: integer;
begin
ParamList := TStringList.Create;
withSession do try
try
GetAliasParams(AliasName,ParamList);
except
fori:=0 topred(DatabaseCount) do
if(Databases[i].DatabaseName = AliasName) then
ParamList.Assign(Databases[i].Params);
end;
Result := UpperCase(ParamList.Values['PATH'])+'\';
finally
Paramlist.Free;
end;
end;
functionGetDBPath3(ATable: TTable): TFileName;
var
TblProps: CURProps;
pTblName, pFullName: DBITblName;
begin
withATable 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
Получение пути псевдонима и таблицы II
Вот маленький примерчик того, как в Delphi можно получить информацию о псевдонимах. Для начала создайте новый проект с ListBox и тремя метками (с именамиListBox1, Label1, Label2 и Label3). Затем создайте обработчик события формы OnCreate с примерно следующим кодом:
procedureTForm1.FormCreate(Sender: TObject);
begin
Session.GetAliasNames(ListBox1.Items);
end;
Теперь создайте обработчик OnClick для ListBox:
procedureTForm1.ListBox1Click(Sender: TObject);
var
tStr: array[0..100] ofchar;
Desc: DBDesc;
begin
ifListBox1.Items.Count = 0 thenexit;
StrPLCopy(tStr, ListBox1.Items.Strings[ListBox1.ItemIndex], High(tStr));
DbiGetDatabaseDesc(tStr, @Desc);
withDesc 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).
Получение пути псевдонима и таблицы III
Используйте Session.GetAliasParams. В ответ вы получите объект Tstrings, откуда вы можете получить значение для переменной 'PATH". Для получения дополнительной информации обратитесь к электронной справке к разделу, описывающему TSession. Объект Session объявлен в модуле DB.
usesdb;
varaliaspath : string[128];
begin
aliaspath := Session.GetAliasParams['MyAlias'].values['PATH'];
end;
usesSysUtils,DbiProcs, DBiTypes;
...
functionGetDataBaseDir( constAlias : string): String;
(* Возвращает каталог базы данных, на которую
ссылается псевдним (без конечного обратного слеша) *)
var
sp : PChar;
Res : pDBDesc;
begin
try
New(Res);
sp := StrAlloc(length(Alias)+1);
StrPCopy(sp,Alias);
ifDbiGetDatabaseDesc(sp,Res) = 0 thenResult := StrPas(Res^.szPhyName)
elseResult := '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;
Получение пути псевдонима и таблицы IV
Nomadicсоветует:
1. По таблице (фактически по Database) получить физическое местонахождение.
Примечание: Database можно создать явно, если нет, Дельфи сама его создаст, доступ к ней по Table(Query).Database
usesDbiProcs;
functionGetDirByDatabase(Database: TDatabase): string;
varpszDir: PChar;
begin
pszDir := StrAlloc(255);
try
DbiGetDirectory(Database.Handle, True, pszDir);
Result := StrPas(pszDir);
finally
StrDispose(pszDir);
end;
end;
2. По алиасу.
functionGetPhNameByAlias(sAlias: string): string;
var
Database: TDatabase;
pszDir: PChar;
begin
Database := TDatabase.Create( nil); {allocate memory}
pszDir := StrAlloc(255);
try
Database.AliasName := sAlias;
Database.DatabaseName := 'TEMP'; {requires a name – is ignored}
Database.Connected := True; {connect without opening any table}
DbiGetDirectory(Database.Handle, True, pszDir); {get the dir.}
Database.Connected := False; {disconnect}
Читать дальше