Fórum Trocar o caminho do ALIAS do BDE #209035

24/01/2004

0

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]


Drogao

Drogao

Responder

Posts

24/01/2004

Aroldo Zanela

Colega,

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.



Responder

Gostei + 0

24/01/2004

Henry

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.


Responder

Gostei + 0

24/01/2004

Wolverine

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


Responder

Gostei + 0

26/01/2004

Drogao

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.


Responder

Gostei + 0

26/01/2004

Aroldo Zanela

Colega,

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar