ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/IBServices.pas
(Generate patch)

Comparing ibx/trunk/runtime/IBServices.pas (file contents):
Revision 7 by tony, Sun Aug 5 18:28:19 2012 UTC vs.
Revision 39 by tony, Tue May 17 08:14:52 2016 UTC

# Line 42 | Line 42
42   unit IBServices;
43  
44   {$Mode Delphi}
45 + {$IF FPC_FULLVERSION >= 20700 }
46 + {$codepage UTF8}
47 + {$ENDIF}
48  
49   interface
50  
# Line 51 | Line 54 | uses
54   {$ELSE}
55    unix,
56   {$ENDIF}
57 <  SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
55 <  IBDialogs, IBHeader, IB, IBExternals;
57 >  SysUtils, Classes, IBHeader, IB, IBExternals, CustApp;
58  
59   const
60    DefaultBufferSize = 32000;
# Line 97 | Line 99 | type
99    TLoginEvent = procedure(Database: TIBCustomService;
100      LoginParams: TStrings) of object;
101  
102 +  { TIBCustomService }
103 +
104    TIBCustomService = class(TComponent)
105    private
106      FIBLoaded: Boolean;
# Line 136 | Line 140 | type
140  
141    protected
142      procedure Loaded; override;
143 <    function Login: Boolean;
143 >    function Login(var aServerName: string): Boolean;
144      procedure CheckActive;
145      procedure CheckInactive;
146 +    procedure HandleException(Sender: TObject);
147      property OutputBuffer : PChar read FOutputBuffer;
148      property OutputBufferOption : TOutputBufferOption read FOutputBufferOption write FOutputBufferOption;
149      property BufferSize : Integer read FBufferSize write SetBufferSize default DefaultBufferSize;
# Line 519 | Line 524 | procedure TIBCustomService.Attach;
524   var
525    SPB: String;
526    ConnectString: String;
527 +  aServerName: string;
528   begin
529    CheckInactive;
530    CheckServerName;
531  
532 <  if FLoginPrompt and not Login then
532 >  aServerName := FServerName;
533 >  if FLoginPrompt and not Login(aServerName) then
534      IBError(ibxeOperationCancelled, [nil]);
535  
536    { Generate a new SPB if necessary }
# Line 535 | Line 542 | begin
542      Move(SPB[1], FSPB[0], FSPBLength);
543    end;
544    case FProtocol of
545 <    TCP: ConnectString := FServerName + ':service_mgr'; {do not localize}
546 <    SPX: ConnectString := FServerName + '@service_mgr'; {do not localize}
547 <    NamedPipe: ConnectString := '\\' + FServerName + '\service_mgr'; {do not localize}
545 >    TCP: ConnectString := aServerName + ':service_mgr'; {do not localize}
546 >    SPX: ConnectString := aServerName + '@service_mgr'; {do not localize}
547 >    NamedPipe: ConnectString := '\\' + aServerName + '\service_mgr'; {do not localize}
548      Local: ConnectString := 'service_mgr'; {do not localize}
549    end;
550    if call(isc_service_attach(StatusVector, Length(ConnectString),
# Line 562 | Line 569 | begin
569        Attach;
570    except
571      if csDesigning in ComponentState then
572 <      Application.HandleException(Self)
572 >       HandleException(self)
573      else
574        raise;
575    end;
576   end;
577  
578 < function TIBCustomService.Login: Boolean;
578 > function TIBCustomService.Login(var aServerName: string): Boolean;
579   var
580    IndexOfUser, IndexOfPassword: Integer;
581    Username, Password: String;
# Line 581 | Line 588 | begin
588        LoginParams.Assign(Params);
589        FOnLogin(Self, LoginParams);
590        Params.Assign (LoginParams);
591 +      aServerName := ServerName;
592      finally
593        LoginParams.Free;
594      end;
595    end
596 <  else begin
596 >  else
597 >  if assigned(IBGUIInterface)  then
598 >  begin
599      IndexOfUser := IndexOfSPBConst(SPBConstantNames[isc_spb_user_name]);
600      if IndexOfUser <> -1 then
601        Username := Copy(Params[IndexOfUser],
# Line 596 | Line 606 | begin
606        Password := Copy(Params[IndexOfPassword],
607                                           Pos('=', Params[IndexOfPassword]) + 1, {mbcs ok}
608                                           Length(Params[IndexOfPassword]));
609 <    result := ServerLoginDialog(serverName, Username, Password);
609 >    result := IBGUIInterface.ServerLoginDialog(aServerName, Username, Password);
610      if result then
611      begin
612        IndexOfPassword := IndexOfSPBConst(SPBConstantNames[isc_spb_password]);
# Line 610 | Line 620 | begin
620        else
621          Params[IndexOfPassword] := SPBConstantNames[isc_spb_password] +
622                                       '=' + Password;
623 <    end;
624 <  end;
623 >    end
624 >  end
625 >  else
626 >    IBError(ibxeNoLoginDialog,[]);
627   end;
628  
629   procedure TIBCustomService.CheckActive;
# Line 628 | Line 640 | begin
640      IBError(ibxeServiceInActive, [nil]);
641   end;
642  
643 + procedure TIBCustomService.HandleException(Sender: TObject);
644 + var aParent: TComponent;
645 + begin
646 +  aParent := Owner;
647 +  while aParent <> nil do
648 +  begin
649 +    if aParent is TCustomApplication then
650 +    begin
651 +      TCustomApplication(aParent).HandleException(Sender);
652 +      Exit;
653 +    end;
654 +    aParent := aParent.Owner;
655 +  end;
656 +  SysUtils.ShowException(ExceptObject,ExceptAddr);
657 + end;
658 +
659   constructor TIBCustomService.Create(AOwner: TComponent);
660   begin
661    inherited Create(AOwner);
# Line 647 | Line 675 | begin
675    FTraceFlags := [];
676    FOutputbuffer := nil;
677    FProtocol := Local;
678 +  if (AOwner <> nil) and
679 +     (AOwner is TCustomApplication) and
680 +     TCustomApplication(AOwner).ConsoleApplication then
681 +    LoginPrompt := false;
682   end;
683  
684   destructor TIBCustomService.Destroy;
# Line 879 | Line 911 | begin
911    SPB := SPB + Char(isc_spb_current_version);
912    { Iterate through the textual service parameters, constructing
913     a SPB on-the-fly }
914 +  if sl.Count > 0 then
915    for i := 0 to sl.Count - 1 do
916    begin
917     { Get the parameter's name and value from the list,
# Line 1495 | Line 1528 | begin
1528      if (Trim(FBackupFile[i]) = '') then continue;
1529      if (Pos('=', FBackupFile[i]) <> 0) then  {mbcs ok}
1530      begin
1531 <      ServiceStartAddParam(FBackupFile.Names[i], isc_spb_bkp_file);
1531 >      ServiceStartAddParam(AnsiUpperCase(FBackupFile.Names[i]), isc_spb_bkp_file);
1532        value := Copy(FBackupFile[i], Pos('=', FBackupFile[i]) + 1, Length(FBackupFile.Names[i])); {mbcs ok}
1533        param := StrToInt(value);
1534        ServiceStartAddParam(param, isc_spb_bkp_length);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines