Trocar o caminho do ALIAS do BDE
Alguém sabe como fazer para trocar o um determinado ALIAS do BDE via código Delphi.
Valeu galera.
[b]´O verdadeiro homem não é aquele que tem várias mulheres ao mesmo tempo, mas sim aquele que tem uma o tempo todo.´[/b]
Valeu galera.
[b]´O verdadeiro homem não é aquele que tem várias mulheres ao mesmo tempo, mas sim aquele que tem uma o tempo todo.´[/b]
Drogao
Curtidas 0
Respostas
Aroldo Zanela
24/01/2004
Colega,
Fiz este componente a pedido de um colega aqui do CD, deverá servir no mínimo de base:
Fiz este componente a pedido de um colega aqui do CD, deverá servir no mínimo de base:
{***********************************************
** Aroldo Zanela - aroldo_zanela@hotmail.com
** 2003 - Brasilia - DF - Brasil
** icq: 9271424 (Portuguese and English)
}
unit AddStandardAlias;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
dbTables, ShellAPI, ShlObj;
type
TDefaultDriver = (ddPARADOX,dddBase,ddASCIIDRV);
type
TAddStandardAlias = class(TComponent)
private
{ Private declarations }
FAlias: String;
FTitleName: String;
FDefaultDriver: TDefaultDriver;
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
published
{ Published declarations }
property Alias: String read FAlias write FAlias;
property TitleName: String read FTitleName write FTitleName;
property DefaultDriver: TDefaultDriver read FDefaultDriver write FDefaultDriver;
function IsAlias: Boolean;
function CatcheDirectory: String;
Procedure Execute;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Zanela´, [TAddStandardAlias]);
end;
{ TAddStandardAlias }
function TAddStandardAlias.CatcheDirectory: String;
var TitleName: string;
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of char;
TempPath: array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), 0);
BrowseInfo.hwndOwner := Application.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := FTitleName;
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
GlobalFreePtr(lpItemID);
Result := TempPath;
end else
Result := ´´;
end;
constructor TAddStandardAlias.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
end;
destructor TAddStandardAlias.Destroy;
begin
inherited Destroy;
end;
procedure TAddStandardAlias.Execute;
var cDefaultDriver, cPath: String;
begin
if (FAlias=´´) or (Session.IsAlias(FAlias)) then exit;
cPath:= CatcheDirectory;
if not (cPath=´´) then
begin
Case FDefaultDriver of
ddParadox: cDefaultDriver:= ´PARADOX´;
dddBase: cDefaultDriver := ´dBase´;
ddAsciiDRV: cDefaultDriver := ´ASCIIDRV´;
end;
try
Session.AddStandardAlias(FAlias, cPath, cDefaultDriver);
Session.SaveConfigFile;
Session.Close;
except
// Don´t raise any exception.
end;
end
end;
function TAddStandardAlias.IsAlias: Boolean;
begin
Result:= Session.IsAlias(FAlias);
end;
end.
GOSTEI 0
Henry
24/01/2004
Primeiro verifique se ele existe
if Session1.IsAlias(´Seualias´) then
begin
Session1.AddStandardAlias(´Seualias´, ´C:\Diretoriodoalias´, ´PARADOX´);
Session1.SaveConfigFile;
end;
Session1 e um componente da palheta BDE, c vc quise muda em tempo de execucao, mude o ´C:\Diretoriodoalias´ por edit1.text, que vai ser o caminho daonde esta sua tabela.
Espero ter ajudado, um abraco, Henry.
if Session1.IsAlias(´Seualias´) then
begin
Session1.AddStandardAlias(´Seualias´, ´C:\Diretoriodoalias´, ´PARADOX´);
Session1.SaveConfigFile;
end;
Session1 e um componente da palheta BDE, c vc quise muda em tempo de execucao, mude o ´C:\Diretoriodoalias´ por edit1.text, que vai ser o caminho daonde esta sua tabela.
Espero ter ajudado, um abraco, Henry.
GOSTEI 0
Wolverine
24/01/2004
procedure TDM.DataModuleCreate(Sender: TObject);
var
localname:string;
begin
//procura se já existe o alias no BDE Administrator
if not Session.IsAlias(´NomedoApp´) then
begin
//coloque um OpenDialog no Data Module
if OpenDialog1.Execute then
localname:=ExtractFilePath(OpenDialog1.FileName);
{ Adiciona o alias }
Session.AddStandardAlias(´NomedoApp´, localname, ´PARADOX´);
{ Salva o arquivo de configuração do BDE Administrator }
Session.SaveConfigFile;
end;
Database1.DataBaseName := ´AppAlias´;
Database1.AliasName:=´NomedoApp´;
end;
ñ precisa usar Session1 da palheta BDE, se vc usar um DM e tiver la um DataBase
var
localname:string;
begin
//procura se já existe o alias no BDE Administrator
if not Session.IsAlias(´NomedoApp´) then
begin
//coloque um OpenDialog no Data Module
if OpenDialog1.Execute then
localname:=ExtractFilePath(OpenDialog1.FileName);
{ Adiciona o alias }
Session.AddStandardAlias(´NomedoApp´, localname, ´PARADOX´);
{ Salva o arquivo de configuração do BDE Administrator }
Session.SaveConfigFile;
end;
Database1.DataBaseName := ´AppAlias´;
Database1.AliasName:=´NomedoApp´;
end;
ñ precisa usar Session1 da palheta BDE, se vc usar um DM e tiver la um DataBase
GOSTEI 0
Drogao
24/01/2004
Primeiro gostaria de agradecer o interesse em ajudar de vcs.
Mas o apresentado não é bem o que precisso. Minha situação é: o ALIAS já existe, então preciso apenas alterar o diretório e não incluir um novo ALIAS com o diretório que quero, poderia trocar o caminho direto no componente Table mas isso seria um pouco inviável. O sistema que estou desenvolvendo contem muitas tabelas e em uma determinada situação o usuário poderá acessar um backup do sistema em outro diretório, é claro que será no modo de apenas leitura, com isso tendo acesso a uma cópia de todos os arquivos do sistema atual. Espero que tenham entendido.
Finalizando obrigado novamente pelo interesse em ajudar e se possível me respondam.
Mas o apresentado não é bem o que precisso. Minha situação é: o ALIAS já existe, então preciso apenas alterar o diretório e não incluir um novo ALIAS com o diretório que quero, poderia trocar o caminho direto no componente Table mas isso seria um pouco inviável. O sistema que estou desenvolvendo contem muitas tabelas e em uma determinada situação o usuário poderá acessar um backup do sistema em outro diretório, é claro que será no modo de apenas leitura, com isso tendo acesso a uma cópia de todos os arquivos do sistema atual. Espero que tenham entendido.
Finalizando obrigado novamente pelo interesse em ajudar e se possível me respondam.
GOSTEI 0
Aroldo Zanela
24/01/2004
Colega,
Veja o exemplo do Help do Delphi:
Veja o exemplo do Help do Delphi:
The following example changes a parameter of a session’s alias. procedure TForm1.ChangeAlias; var AParams: TStringList; Dir: string; begin ifnot Session.IsAlias(´MyAlias´) then begin ShowMessage(´Alias MyAlias does not exist´); Exit; end; AParams := TStringList.Create; try // get the current PATH parameter Session.GetAliasParams(´MyAlias´,AParams); Dir := Copy(AParams.Strings[0],6,255); // get the new PATH parameter if InputQuery(´MyAlias Alias Path´,´Path:´ ,Dir) then begin // Update the alias parameters AParams.Clear; AParams.Add(´PATH=´ + Dir); Session.ModifyAlias(´MyAlias´,AParams); Session.SaveConfigFile; end; finally AParams.Free; end; end;
GOSTEI 0