Ver Mensaje Individual
  #1  
Antiguo 04-03-2009
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Reputación: 23
defcon1_es Va por buen camino
Hola Gustavo, te lo puse para que lo ejecutaras desde la linea de comandos, pero desde delphi, yo hago esto:
Código Delphi [-]
ShellExecute_AndWait(
    PChar(ExtractFilePath(GetIBServerDataBase)+'bin\gsec.exe'),
    PChar('-USER SYSDBA -PASSWORD '+DatosSesion.Password+
    ' -modify '+Nombre+' -pw '+Clave),
    PChar(ExtractFilePath(GetIBServerDataBase)+'bin'));
// Con esta funcion, averigüo la ruta donde está el gsec.exe
// mirando en el registro de windows las distintas claves, según el motor y // version del mismo
Código Delphi [-]
function GetIBServerDataBase:string;
var Reg:TRegistry;
    FbsecuriyFile, FbsecuriyFile2, FbISC4: String;
begin
  Reg:=TRegistry.create;
  try
    Reg.Access:=KEY_READ;
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    if Not reg.OpenKey('SOFTWARE\Firebird Project\Firebird Server\Instances',false)
    then begin
      if Not reg.OpenKey('Software\FireBirdSQL\FireBird\CurrentVersion',false)
      then if Not reg.OpenKey('Software\Borland\InterBase\CurrentVersion',false)
           then if Not reg.OpenKey('Software\InterBase Corp\InterBase\CurrentVersion',false)
                then Raise Exception.Create('Interbase no está instalado en este equipo');
      FbsecuriyFile:=reg.ReadString('RootDirectory');
    end
    else begin
      FbsecuriyFile:=reg.ReadString('DefaultInstance');
    end;
    if Length(FbsecuriyFile)<=0
    then Raise Exception.create('Interbase no está instalado en este equipo');

    if FbsecuriyFile[length(FbsecuriyFile)]='\'
    then FbsecuriyFile:=Copy(FbsecuriyFile,1,Length(FbsecuriyFile)-1);
    FbISC4 := FbsecuriyFile + '\isc4.gdb';
    FbsecuriyFile2 := FbsecuriyFile + '\security2.fdb';
    FbsecuriyFile := FbsecuriyFile + '\security.fdb';
    if FileExists(FbsecuriyFile2)
    then Result := FbsecuriyFile2
    else if FileExists(FbsecuriyFile)
         then Result := FbsecuriyFile
         else if FileExists(FbISC4)
              then Result := FbISC4
              else Result := InputBox('No se encuentró la B.D. de USUARIOS de InterBase/FireBird.',
                                      'Teclee la ruta completa del fichero "security2.fdb", "security.fdb" o "isc4.gdb"',
                                      'C:\Archivos de programa\Firebird\FireBird_2_0\security2.fdb');
  finally
    Reg.free;
  end;
end;
// este procedimiento ejecuta un programa externo
Código Delphi [-]
procedure ShellExecute_AndWait(const FileName, Params, RutaDirectorio: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize       := SizeOf(exInfo);
    fMask        := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd          := GetActiveWindow();
    lpVerb       := 'open';
    lpParameters := PChar(Params);
    lpFile       := PChar(FileName);
    lpDirectory  := PChar(RutaDirectorio);
    nShow        := SW_HIDE; //SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@exInfo)
  then Ph := exInfo.HProcess
  else begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita