--- ibx/trunk/iblocaldb/nongui/IBCMLocalDBSupport.pas 2019/01/18 13:35:28 271 +++ ibx/trunk/iblocaldb/nongui/IBCMLocalDBSupport.pas 2019/02/04 13:34:37 272 @@ -40,10 +40,13 @@ type TIBCMLocalDBSupport = class(TCustomIBLocalDBSupport) private FOnLogMessage: TOnLogMessage; + FOnProgressEvent: TOnProgressEvent; procedure Add2Log(Sender: TObject; Msg: string); procedure DoUpgrade(IBXScript: TIBXScript; TargetVersionNo: integer); procedure WriteLog(Msg: string); procedure HandleOnGetNextLine(Sender: TObject; var Line: string); + procedure IBXScriptCreateDatabase(Sender: TObject; + var DatabaseFileName: string); protected procedure Downgrade(DBArchive: string); override; function InternalCreateNewDatabase(DBArchive: string): boolean; override; @@ -53,6 +56,7 @@ type public constructor Create(aOwner: TComponent); override; property OnLogMessage: TOnLogMessage read FOnLogMessage write FOnLogMessage; + property OnProgressEvent: TOnProgressEvent read FOnProgressEvent write FOnProgressEvent; {Progress Bar Support} end; implementation @@ -112,6 +116,13 @@ begin OnLogMessage(self,Line); end; +procedure TIBCMLocalDBSupport.IBXScriptCreateDatabase(Sender: TObject; + var DatabaseFileName: string); +begin + DatabaseFileName := (Sender as TIBXScript).Database.Attachment.GetConnectString; + (Sender as TIBXScript).Database.DropDatabase; +end; + procedure TIBCMLocalDBSupport.Downgrade(DBArchive: string); begin RestoreDatabase(DBArchive); @@ -119,11 +130,9 @@ end; function TIBCMLocalDBSupport.InternalCreateNewDatabase(DBArchive: string ): boolean; -var Ext: string; begin Result := true; - Ext := AnsiUpperCase(ExtractFileExt(DBArchive)); - if Ext = '.GBK' then + if IsGbakFile(DBArchive) then begin with RestoreService do begin @@ -140,18 +149,17 @@ begin end; end else - if (Ext = '.SQL') and Database.Connected then with TIBXScript.Create(self) do try Database := self.Database; - IgnoreCreateDatabase := true; + OnCreateDatabase := @IBXScriptCreateDatabase; + OnProgressEvent := FOnProgressEvent; WriteLog(sCreatingDatabase); Result := RunScript(DBArchive); + Add2Log(self,''); {ensure EOL sent} finally Free end - else - raise Exception.CreateFmt('Archive file (%s) has an unknown extension',[DBArchive]); end; function TIBCMLocalDBSupport.RestoreDatabaseFromArchive(