You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(13) |
Sep
(25) |
Oct
(10) |
Nov
(19) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(206) |
Mar
(43) |
Apr
(25) |
May
(20) |
Jun
(69) |
Jul
(121) |
Aug
(95) |
Sep
(122) |
Oct
(213) |
Nov
(46) |
Dec
(39) |
2006 |
Jan
(28) |
Feb
(57) |
Mar
(21) |
Apr
(7) |
May
(11) |
Jun
(2) |
Jul
(8) |
Aug
(13) |
Sep
(2) |
Oct
(2) |
Nov
(20) |
Dec
(16) |
2007 |
Jan
(9) |
Feb
(15) |
Mar
|
Apr
(4) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
(1) |
Sep
(9) |
Oct
|
Nov
(1) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
(8) |
Apr
(1) |
May
|
Jun
|
Jul
(11) |
Aug
(57) |
Sep
(2) |
Oct
(6) |
Nov
|
Dec
(7) |
2010 |
Jan
(11) |
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
(2) |
Sep
(27) |
Oct
(3) |
Nov
(7) |
Dec
(1) |
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(10) |
Oct
|
Nov
|
Dec
|
2012 |
Jan
(8) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(3) |
Nov
(1) |
Dec
(1) |
2013 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
(4) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(3) |
Oct
|
Nov
(4) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
From: Nando D. <na...@us...> - 2005-07-05 06:42:45
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20683/Core Added Files: InstantDBEvolverFormUnit.dfm InstantDBEvolverFormUnit.pas Log Message: refactored to support TInstantDBBuilder --- NEW FILE: InstantDBEvolverFormUnit.dfm --- inherited InstantDBEvolverForm: TInstantDBEvolverForm Caption = 'Database Evolution' OldCreateOrder = True PixelsPerInch = 96 TextHeight = 13 object DBEvolver: TInstantDBEvolver Left = 264 Top = 96 end end --- NEW FILE: InstantDBEvolverFormUnit.pas --- (* * InstantObjects * Database evolution Form *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: InstantObjects database evolver form * * The Initial Developer of the Original Code is: Nando Dessena * * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) unit InstantDBEvolverFormUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, InstantCustomDBEvolverFormUnit, ActnList, InstantDBBuild, InstantDBEvolution, StdCtrls, ComCtrls; type TInstantDBEvolverForm = class(TInstantCustomDBEvolverForm) DBEvolver: TInstantDBEvolver; procedure BuildActionExecute(Sender: TObject); private protected function GetCustomDBEvolver: TInstantCustomDBEvolver; override; public end; implementation {$R *.dfm} { TInstantDBEvolverForm } function TInstantDBEvolverForm.GetCustomDBEvolver: TInstantCustomDBEvolver; begin Result := DBEvolver; end; procedure TInstantDBEvolverForm.BuildActionExecute(Sender: TObject); begin if ConfirmDlg('Evolve database?') then begin inherited; ShowMessage('Database evolved without errors.'); end; end; end. |
From: Nando D. <na...@us...> - 2005-07-04 11:40:10
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22878/Core Added Files: InstantConnectionManagerFormUnit.dfm InstantConnectionManagerFormUnit.pas InstantCustomDBEvolverFormUnit.dfm InstantCustomDBEvolverFormUnit.pas InstantDBBuilderFormUnit.dfm InstantDBBuilderFormUnit.pas Removed Files: InstantConnectionManagerForm.dfm InstantConnectionManagerForm.pas InstantDBEvolverForm.dfm InstantDBEvolverForm.pas Log Message: finished TInstantDBBuilder; renamed InstantConnectionManagerForm --- NEW FILE: InstantCustomDBEvolverFormUnit.pas --- (* * InstantObjects * Database evolution Form *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: InstantObjects database evolver form * * The Initial Developer of the Original Code is: Nando Dessena * * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) unit InstantCustomDBEvolverFormUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, InstantPersistence, ComCtrls, InstantDBBuild, InstantDBEvolution, InstantPresentation, ActnList; type TInstantCustomDBEvolverForm = class(TForm) ShowSequenceButton: TButton; SequenceListView: TListView; EvolveButton: TButton; MoveCommandUpButton: TButton; MoveCommandDownButton: TButton; EvolutionLogMemo: TMemo; Label1: TLabel; EnableAllButton: TButton; DisableAllButton: TButton; ActionList: TActionList; ShowSequenceAction: TAction; BuildAction: TAction; MoveCommandUpAction: TAction; MoveCommandDownAction: TAction; EnableAllCommandsAction: TAction; DisableAllCommandsAction: TAction; procedure ShowSequenceButtonClick(Sender: TObject); procedure ShowSequenceActionExecute(Sender: TObject); procedure BuildActionExecute(Sender: TObject); procedure BuildActionUpdate(Sender: TObject); procedure MoveCommandUpActionExecute(Sender: TObject); procedure MoveCommandDownActionExecute(Sender: TObject); procedure EnableAllCommandsActionExecute(Sender: TObject); procedure DisableAllCommandsActionExecute(Sender: TObject); procedure MoveCommandUpActionUpdate(Sender: TObject); procedure MoveCommandDownActionUpdate(Sender: TObject); procedure EnableAllCommandsActionUpdate(Sender: TObject); procedure DisableAllCommandsActionUpdate(Sender: TObject); procedure FormCreate(Sender: TObject); private FAfterBuild: TInstantConnectorEvent; procedure SequenceToScreen; procedure ScreenToSequence; procedure Log(const ALogStr: string); function GetConnector: TInstantConnector; procedure SetConnector(const Value: TInstantConnector); function GetTargetModel: TInstantModel; procedure SetTargetModel(const Value: TInstantModel); protected function GetCustomDBEvolver: TInstantCustomDBEvolver; virtual; abstract; function ConfirmDlg(const Text: string): Boolean; procedure CustomDBEvolverBeforeCommandExecute(const Sender: TObject; const ACommand: TInstantDBBuildCommand); virtual; procedure CustomDBEvolverAfterCommandExecute(const Sender: TObject; const ACommand: TInstantDBBuildCommand); virtual; procedure CustomDBEvolverCommandExecuteError(const Sender: TObject; const ACommand: TInstantDBBuildCommand; const Error: Exception; var RaiseError: Boolean); virtual; procedure CustomDBEvolverBeforeCommandSequenceExecute(Sender: TObject); virtual; procedure CustomDBEvolverAfterCommandSequenceExecute(Sender: TObject); virtual; public // Assign a connector before calling the Execute method, otherwise the // default connector is used. property Connector: TInstantConnector read GetConnector write SetConnector; // Assign a target model before calling the Execute method, otherwise the // default model is used. property TargetModel: TInstantModel read GetTargetModel write SetTargetModel; // Shows the form modally. procedure Execute; // Fired right after executing the command sequence. property AfterBuild: TInstantConnectorEvent read FAfterBuild write FAfterBuild; end; implementation {$R *.dfm} procedure TInstantCustomDBEvolverForm.ShowSequenceButtonClick(Sender: TObject); begin GetCustomDBEvolver.BuildCommandSequence; SequenceToScreen; end; procedure TInstantCustomDBEvolverForm.SequenceToScreen; var i: Integer; begin SequenceListView.Clear; for i := 0 to GetCustomDBEvolver.CommandSequence.Count - 1 do begin with SequenceListView.Items.Add do begin Caption := GetCustomDBEvolver.CommandSequence[i].Description; Checked := GetCustomDBEvolver.CommandSequence[i].Enabled; Data := GetCustomDBEvolver.CommandSequence[i]; end; end; end; procedure TInstantCustomDBEvolverForm.ScreenToSequence; var i: Integer; begin for i := 0 to SequenceListView.Items.Count - 1 do TInstantDBBuildCommand(SequenceListView.Items[i].Data).Enabled := SequenceListView.Items[i].Checked; end; procedure TInstantCustomDBEvolverForm.Log(const ALogStr: string); begin EvolutionLogMemo.Lines.Add(ALogStr); end; procedure TInstantCustomDBEvolverForm.CustomDBEvolverBeforeCommandExecute( const Sender: TObject; const ACommand: TInstantDBBuildCommand); begin if ACommand.Enabled then Log('Executing: ' + ACommand.Description) else Log('Skipping: ' + ACommand.Description); end; procedure TInstantCustomDBEvolverForm.CustomDBEvolverAfterCommandExecute( const Sender: TObject; const ACommand: TInstantDBBuildCommand); begin end; procedure TInstantCustomDBEvolverForm.CustomDBEvolverCommandExecuteError( const Sender: TObject; const ACommand: TInstantDBBuildCommand; const Error: Exception; var RaiseError: Boolean); begin Log('Error: ' + Error.Message); end; procedure TInstantCustomDBEvolverForm.CustomDBEvolverBeforeCommandSequenceExecute( Sender: TObject); begin end; procedure TInstantCustomDBEvolverForm.CustomDBEvolverAfterCommandSequenceExecute( Sender: TObject); begin Connector.Connect; try if Assigned(FAfterBuild) then FAfterBuild(Self, Connector); finally Connector.Disconnect; end; end; procedure TInstantCustomDBEvolverForm.Execute; begin ShowModal; end; function TInstantCustomDBEvolverForm.GetConnector: TInstantConnector; begin Result := GetCustomDBEvolver.Connector; end; procedure TInstantCustomDBEvolverForm.SetConnector(const Value: TInstantConnector); begin GetCustomDBEvolver.Connector := Value; end; function TInstantCustomDBEvolverForm.ConfirmDlg(const Text: string): Boolean; begin Result := MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; end; procedure TInstantCustomDBEvolverForm.ShowSequenceActionExecute(Sender: TObject); var OldScreenCursor: TCursor; begin OldScreenCursor := Screen.Cursor; Screen.Cursor := crHourglass; try GetCustomDBEvolver.BuildCommandSequence; SequenceToScreen; finally Screen.Cursor := OldScreenCursor; end; end; procedure TInstantCustomDBEvolverForm.BuildActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := GetCustomDBEvolver.CommandSequence.Count > 0; end; procedure TInstantCustomDBEvolverForm.BuildActionExecute(Sender: TObject); begin ScreenToSequence; EvolutionLogMemo.Lines.Clear; GetCustomDBEvolver.CommandSequence.Execute; ShowSequenceAction.Execute; end; procedure TInstantCustomDBEvolverForm.MoveCommandUpActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := Assigned(SequenceListView.Selected) and (SequenceListView.Selected.Index > 0); end; procedure TInstantCustomDBEvolverForm.MoveCommandUpActionExecute(Sender: TObject); begin ScreenToSequence; GetCustomDBEvolver.CommandSequence.MoveItem( TInstantDBBuildCommand(SequenceListView.Selected.Data), -1); SequenceToScreen; end; procedure TInstantCustomDBEvolverForm.MoveCommandDownActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := Assigned(SequenceListView.Selected) and (SequenceListView.Selected.Index < Pred(SequenceListView.Items.Count)); end; procedure TInstantCustomDBEvolverForm.MoveCommandDownActionExecute( Sender: TObject); begin ScreenToSequence; GetCustomDBEvolver.CommandSequence.MoveItem( TInstantDBBuildCommand(SequenceListView.Selected.Data), 1); SequenceToScreen; end; procedure TInstantCustomDBEvolverForm.EnableAllCommandsActionUpdate( Sender: TObject); begin (Sender as TAction).Enabled := SequenceListView.Items.Count > 0; end; procedure TInstantCustomDBEvolverForm.EnableAllCommandsActionExecute( Sender: TObject); var i: Integer; begin for i := 0 to Pred(SequenceListView.Items.Count) do SequenceListView.Items[i].Checked := True; ScreenToSequence; end; procedure TInstantCustomDBEvolverForm.DisableAllCommandsActionUpdate( Sender: TObject); begin (Sender as TAction).Enabled := SequenceListView.Items.Count > 0; end; procedure TInstantCustomDBEvolverForm.DisableAllCommandsActionExecute( Sender: TObject); var i: Integer; begin for i := 0 to Pred(SequenceListView.Items.Count) do SequenceListView.Items[i].Checked := False; ScreenToSequence; end; function TInstantCustomDBEvolverForm.GetTargetModel: TInstantModel; begin Result := GetCustomDBEvolver.TargetModel; end; procedure TInstantCustomDBEvolverForm.SetTargetModel(const Value: TInstantModel); begin GetCustomDBEvolver.TargetModel := Value; end; procedure TInstantCustomDBEvolverForm.FormCreate(Sender: TObject); begin Constraints.MinWidth := Width; Constraints.MinHeight := Height; GetCustomDBEvolver.BeforeCommandExecute := CustomDBEvolverBeforeCommandExecute; GetCustomDBEvolver.AfterCommandExecute := CustomDBEvolverAfterCommandExecute; GetCustomDBEvolver.BeforeCommandSequenceExecute := CustomDBEvolverBeforeCommandSequenceExecute; GetCustomDBEvolver.AfterCommandSequenceExecute := CustomDBEvolverAfterCommandSequenceExecute; GetCustomDBEvolver.OnCommandExecuteError := CustomDBEvolverCommandExecuteError; end; end. --- InstantDBEvolverForm.pas DELETED --- --- InstantConnectionManagerForm.dfm DELETED --- --- NEW FILE: InstantCustomDBEvolverFormUnit.dfm --- object InstantCustomDBEvolverForm: TInstantCustomDBEvolverForm Left = 439 Top = 273 Width = 601 Height = 332 Caption = 'InstantCustomDBEvolverForm' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Icon.Data = { 0000010001001010100000000000280100001600000028000000100000002000 00000100040000000000C0000000000000000000000000000000000000000000 000000008000008000000080800080000000800080008080000080808000C0C0 C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 00000000000000000000070444000000088FF844444000077888F44444440007 888FF444444400077888F44F44440007888FFF44444000077888F8F444000007 888FFF88700000077888F8870000000780000087000000000FFFFF000000000F FFFFFFFF000000000FFFFF00000000000000000000000000000000000000FFFF 0000F8230000E0010000C0000000C0000000C0000000C0010000C0030000C007 0000C0070000C0070000C0070000C0070000E00F0000F83F0000FFFF0000} OldCreateOrder = False ShowHint = True OnCreate = FormCreate DesignSize = ( 593 305) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 8 Top = 176 Width = 61 Height = 13 Anchors = [akLeft, akBottom] Caption = 'Evolution log' end object ShowSequenceButton: TButton Left = 8 Top = 8 Width = 145 Height = 25 Action = ShowSequenceAction TabOrder = 0 end object SequenceListView: TListView Left = 8 Top = 40 Width = 441 Height = 129 Anchors = [akLeft, akTop, akRight, akBottom] Checkboxes = True Columns = < item Caption = 'Evolution sequence' Width = 400 end> TabOrder = 1 ViewStyle = vsReport end object EvolveButton: TButton Left = 160 Top = 8 Width = 145 Height = 25 Action = BuildAction TabOrder = 2 end object MoveCommandUpButton: TButton Left = 456 Top = 40 Width = 129 Height = 25 Action = MoveCommandUpAction Anchors = [akTop, akRight] TabOrder = 3 end object MoveCommandDownButton: TButton Left = 456 Top = 72 Width = 129 Height = 25 Action = MoveCommandDownAction Anchors = [akTop, akRight] TabOrder = 4 end object EvolutionLogMemo: TMemo Left = 8 Top = 192 Width = 577 Height = 105 Anchors = [akLeft, akRight, akBottom] ReadOnly = True ScrollBars = ssBoth TabOrder = 5 WordWrap = False end object EnableAllButton: TButton Left = 456 Top = 112 Width = 129 Height = 25 Action = EnableAllCommandsAction Anchors = [akTop, akRight] TabOrder = 6 end object DisableAllButton: TButton Left = 456 Top = 144 Width = 129 Height = 25 Action = DisableAllCommandsAction Anchors = [akTop, akRight] TabOrder = 7 end object ActionList: TActionList Left = 320 Top = 96 object ShowSequenceAction: TAction Caption = 'Show Evolution Sequence' OnExecute = ShowSequenceActionExecute end object BuildAction: TAction Caption = 'Evolve Database' OnExecute = BuildActionExecute OnUpdate = BuildActionUpdate end object MoveCommandUpAction: TAction Caption = 'Move Command Up' OnExecute = MoveCommandUpActionExecute OnUpdate = MoveCommandUpActionUpdate end object MoveCommandDownAction: TAction Caption = 'Move Command Down' OnExecute = MoveCommandDownActionExecute OnUpdate = MoveCommandDownActionUpdate end object EnableAllCommandsAction: TAction Caption = 'Enable All Commands' OnExecute = EnableAllCommandsActionExecute OnUpdate = EnableAllCommandsActionUpdate end object DisableAllCommandsAction: TAction Caption = 'Disable All Commands' OnExecute = DisableAllCommandsActionExecute OnUpdate = DisableAllCommandsActionUpdate end end end --- NEW FILE: InstantDBBuilderFormUnit.pas --- (* * InstantObjects * Database builder Form *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: InstantObjects database builder form * * The Initial Developer of the Original Code is: Nando Dessena * * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) unit InstantDBBuilderFormUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, InstantCustomDBEvolverFormUnit, ActnList, InstantDBBuild, InstantDBEvolution, StdCtrls, ComCtrls; type TInstantDBBuilderForm = class(TInstantCustomDBEvolverForm) DBBuilder: TInstantDBBuilder; procedure DBBuilderBeforeCommandSequenceExecute(Sender: TObject); procedure BuildActionExecute(Sender: TObject); private protected function GetCustomDBEvolver: TInstantCustomDBEvolver; override; public end; implementation {$R *.dfm} { TInstantDBBuilderForm } function TInstantDBBuilderForm.GetCustomDBEvolver: TInstantCustomDBEvolver; begin Result := DBBuilder; end; procedure TInstantDBBuilderForm.DBBuilderBeforeCommandSequenceExecute( Sender: TObject); begin inherited; if not Connector.DatabaseExists then Connector.CreateDatabase; end; procedure TInstantDBBuilderForm.BuildActionExecute(Sender: TObject); begin if ConfirmDlg('Build database?' + sLineBreak + sLineBreak + 'Warning: if the database already exists, all data in it will be lost!' + sLineBreak + 'Use the "Evolve" feature to upgrade the structure of an existing database without loosing any data.') then begin inherited; ShowMessage('Database built without errors.'); end; end; end. --- NEW FILE: InstantConnectionManagerFormUnit.dfm --- object InstantConnectionManagerForm: TInstantConnectionManagerForm Left = 396 Top = 280 Width = 350 Height = 281 BorderIcons = [biSystemMenu] Caption = 'Connection Manager' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Icon.Data = { 0000010001001010100000000000280100001600000028000000100000002000 00000100040000000000C0000000000000000000000000000000000000000000 000000008000008000000080800080000000800080008080000080808000C0C0 C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 00000000000000000000070444000000088FF844444000077888F44444440007 888FF444444400077888F44F44440007888FFF44444000077888F8F444000007 888FFF88700000077888F8870000000780000087000000000FFFFF000000000F FFFFFFFF000000000FFFFF00000000000000000000000000000000000000FFFF 0000F8230000E0010000C0000000C0000000C0000000C0010000C0030000C007 0000C0070000C0070000C0070000C0070000E00F0000F83F0000FFFF0000} OldCreateOrder = False Position = poScreenCenter OnClose = FormClose OnCreate = FormCreate OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object ConnectionView: TListView Left = 0 Top = 0 Width = 342 Height = 222 Align = alClient Columns = < item AutoSize = True Caption = 'Connection' end item Caption = 'Type' Width = 80 end> PopupMenu = ConnectionMenu TabOrder = 0 ViewStyle = vsReport OnDblClick = ConnectionViewDblClick end object BottomPanel: TPanel Left = 0 Top = 222 Width = 342 Height = 32 Align = alBottom TabOrder = 1 object BuildButton: TButton Left = 4 Top = 4 Width = 75 Height = 25 Action = BuildAction TabOrder = 0 end object ButtonsPanel: TPanel Left = 180 Top = 1 Width = 161 Height = 30 Align = alRight BevelOuter = bvNone TabOrder = 1 object ConnectButton: TButton Left = 4 Top = 3 Width = 75 Height = 25 Action = ConnectAction Default = True TabOrder = 0 end object CloseButton: TButton Left = 82 Top = 3 Width = 75 Height = 25 Caption = 'Close' ModalResult = 2 TabOrder = 1 end end object EvolveButton: TButton Left = 82 Top = 4 Width = 75 Height = 25 Action = EvolveAction TabOrder = 2 end end object ConnectionImages: TImageList Left = 16 Top = 96 end object ConnectionMenu: TPopupMenu Left = 16 Top = 64 object NewMenu: TMenuItem Caption = '&New' end object EditItem: TMenuItem Action = EditAction end object RenameItem: TMenuItem Action = RenameAction end object DeleteItem: TMenuItem Action = DeleteAction end object N1: TMenuItem Caption = '-' end object BuildItem: TMenuItem Action = BuildAction end object EvolveItem: TMenuItem Action = EvolveAction end object ConnectItem: TMenuItem Action = ConnectAction end object DisconnectItem: TMenuItem Action = DisconnectAction end object N2: TMenuItem Caption = '-' end object Open1: TMenuItem Action = FileOpenAction end end object ActionList: TActionList OnUpdate = ActionListUpdate Left = 16 Top = 32 object EditAction: TAction Caption = '&Edit' Hint = 'Edit' ShortCut = 16453 OnExecute = EditActionExecute end object RenameAction: TAction Caption = '&Rename' Hint = 'Rename' ShortCut = 113 OnExecute = RenameActionExecute end object DeleteAction: TAction Caption = '&Delete' Hint = 'Delete' ShortCut = 16452 OnExecute = DeleteActionExecute end object EvolveAction: TAction Caption = 'E&volve' Hint = 'Evolve' OnExecute = EvolveActionExecute end object BuildAction: TAction Caption = '&Build' Hint = 'Build' OnExecute = BuildActionExecute end object ConnectAction: TAction Caption = '&Connect' Hint = 'Connect' OnExecute = ConnectActionExecute OnUpdate = ConnectActionUpdate end object DisconnectAction: TAction Caption = '&Disconnect' Hint = 'Disconnect' OnExecute = DisconnectActionExecute OnUpdate = DisconnectActionUpdate end object FileOpenAction: TAction Category = 'File' Caption = '&Open...' Hint = 'Open configuration file' ImageIndex = 7 ShortCut = 16463 OnExecute = FileOpenActionExecute end end end --- InstantDBEvolverForm.dfm DELETED --- --- InstantConnectionManagerForm.pas DELETED --- --- NEW FILE: InstantConnectionManagerFormUnit.pas --- (* * InstantObjects * Connection Manager Form *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: Seleqt InstantObjects * * The Initial Developer of the Original Code is: Seleqt * * Portions created by the Initial Developer are Copyright (C) 2001-2003 * the Initial Developer. All Rights Reserved. * * Contributor(s): Carlo Barazzetta, Nando Dessena * * ***** END LICENSE BLOCK ***** *) unit InstantConnectionManagerFormUnit; {$I InstantDefines.inc} {$IFDEF D7+} {$WARN UNSAFE_TYPE OFF} {$WARN UNSAFE_CAST OFF} {$WARN UNSAFE_CODE OFF} {$ENDIF} interface uses SysUtils, Classes, {$IFDEF MSWINDOWS} Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList, Menus, ActnList, ExtCtrls, StdActns, {$ENDIF} {$IFDEF LINUX} QGraphics, QControls, QForms, QDialogs, QActnList, QMenus, QTypes, QImgList, QStdCtrls, QComCtrls, QExtCtrls, {$ENDIF} InstantConnectionManager, InstantClasses, InstantPersistence; type TInstantConnectionManagerForm = class(TForm) ActionList: TActionList; BuildAction: TAction; BuildItem: TMenuItem; ConnectAction: TAction; ConnectItem: TMenuItem; ConnectionImages: TImageList; ConnectionMenu: TPopupMenu; ConnectionView: TListView; DeleteAction: TAction; DeleteItem: TMenuItem; DisconnectAction: TAction; DisconnectItem: TMenuItem; EditAction: TAction; EditItem: TMenuItem; N1: TMenuItem; NewMenu: TMenuItem; RenameAction: TAction; RenameItem: TMenuItem; BottomPanel: TPanel; BuildButton: TButton; ButtonsPanel: TPanel; ConnectButton: TButton; CloseButton: TButton; FileOpenAction: TAction; N2: TMenuItem; Open1: TMenuItem; EvolveAction: TAction; EvolveButton: TButton; EvolveItem: TMenuItem; procedure ActionListUpdate(Action: TBasicAction; var Handled: Boolean); procedure BuildActionExecute(Sender: TObject); procedure ConnectActionExecute(Sender: TObject); procedure ConnectionViewDblClick(Sender: TObject); procedure DeleteActionExecute(Sender: TObject); procedure DisconnectActionExecute(Sender: TObject); procedure EditActionExecute(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RenameActionExecute(Sender: TObject); {$IFDEF MSWINDOWS} procedure ConnectionViewEditedVCL(Sender: TObject; Item: TListItem; var S: string); {$ENDIF} {$IFDEF LINUX} procedure ConnectionViewEditedCLX(Sender: TObject; Item: TListItem; var S: WideString); {$ENDIF} procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FileOpenActionBeforeExecute(Sender: TObject); procedure FileOpenActionExecute(Sender: TObject); procedure ConnectActionUpdate(Sender: TObject); procedure DisconnectActionUpdate(Sender: TObject); procedure EvolveActionExecute(Sender: TObject); private FModel: TInstantModel; FOnBuild: TInstantConnectionDefEvent; FOnConnect: TInstantConnectionDefEvent; FOnDisconnect: TInstantConnectionDefEvent; FOnEdit: TInstantConnectionDefEvent; FOnIsConnected: TInstantConnectionDefEvent; FOnPrepare: TInstantConnectorEvent; FOnSupportConnector: TInstantConnectorClassEvent; FConnectionManager: TInstantConnectionManager; FOpenDialog: TOpenDialog; FTitle: string; function ConfirmDlg(const Text: string): Boolean; function GetCurrentConnectionDef: TInstantConnectionDef; function GetVisibleActions: TInstantConnectionManagerActionTypes; procedure SetCurrentConnectionDef(Value: TInstantConnectionDef); procedure SetFileName(const Value: string); procedure SetVisibleActions(Value: TInstantConnectionManagerActionTypes); procedure SetOnSupportConnector(Value: TInstantConnectorClassEvent); procedure UpdateMenu; {$IFDEF LINUX} procedure EditItemCaption(Item : TListItem); {$ENDIF} function GetConnectionDefs: TInstantConnectionDefs; function GetFileName: string; procedure UpdateCaption; procedure NewMenuItemClick(Sender: TObject); procedure SetConnectionManager(const Value: TInstantConnectionManager); function GetOpenDialog: TOpenDialog; protected procedure Build(ConnectionDef: TInstantConnectionDef); procedure Connect(ConnectionDef: TInstantConnectionDef); procedure Disconnect(ConnectionDef: TInstantConnectionDef); function Edit(ConnectionDef: TInstantConnectionDef): Boolean; procedure Evolve(ConnectionDef: TInstantConnectionDef); function DoConnect(ConnectionDef: TInstantConnectionDef): Boolean; virtual; function DoDisconnect(ConnectionDef: TInstantConnectionDef): Boolean; virtual; function DoEdit(ConnectionDef: TInstantConnectionDef): Boolean; virtual; procedure DoPrepare(Connector: TInstantConnector); virtual; function IsConnected(ConnectionDef: TInstantConnectionDef): Boolean; procedure PopulateConnectionDefs; function SupportConnector(ConnectorClass: TInstantConnectorClass): Boolean; property ConnectionDefs: TInstantConnectionDefs read GetConnectionDefs; property FileOpenDialog: TOpenDialog read GetOpenDialog; function DoBuild(ConnectionDef: TInstantConnectionDef): Boolean; virtual; function DoEvolve(ConnectionDef: TInstantConnectionDef): Boolean; virtual; public function IsManagerConnected: Boolean; property CurrentConnectionDef: TInstantConnectionDef read GetCurrentConnectionDef write SetCurrentConnectionDef; property FileName: string read GetFileName write SetFileName; property Model: TInstantModel read FModel write FModel; property VisibleActions: TInstantConnectionManagerActionTypes read GetVisibleActions write SetVisibleActions; property OnBuild: TInstantConnectionDefEvent read FOnBuild write FOnBuild; property OnConnect: TInstantConnectionDefEvent read FOnConnect write FOnConnect; property OnDisconnect: TInstantConnectionDefEvent read FOnDisconnect write FOnDisconnect; property OnEdit: TInstantConnectionDefEvent read FOnEdit write FOnEdit; property OnIsConnected: TInstantConnectionDefEvent read FOnIsConnected write FOnIsConnected; property OnPrepare: TInstantConnectorEvent read FOnPrepare write FOnPrepare; property OnSupportConnector: TInstantConnectorClassEvent read FOnSupportConnector write SetOnSupportConnector; property ConnectionManager: TInstantConnectionManager read FConnectionManager write SetConnectionManager; end; implementation {$R *.dfm} {$R connectionmanagerimages.res} uses InstantImageUtils, InstantConsts, InstantDBEvolverFormUnit, InstantDBBuilderFormUnit; procedure DefaultConnectionManagerExecutor(ConnectionManager: TInstantConnectionManager); var ConnectionManagerForm: TInstantConnectionManagerForm; begin ConnectionManagerForm := TInstantConnectionManagerForm.Create(nil); try ConnectionManagerForm.ConnectionManager := ConnectionManager; ConnectionManagerForm.ShowModal; finally ConnectionManagerForm.Free; end; end; { TInstantConnectionManagerForm } procedure TInstantConnectionManagerForm.ActionListUpdate(Action: TBasicAction; var Handled: Boolean); procedure EnableAction(Action: TAction; Enable: Boolean); begin Action.Enabled := Action.Visible and Enable; end; var HasItem, Connected: Boolean; ConnectionDef: TInstantConnectionDef; begin ConnectionDef := CurrentConnectionDef; HasItem := Assigned(ConnectionDef); Connected := IsManagerConnected; EnableAction(EditAction, HasItem and not Connected); EnableAction(RenameAction, HasItem); EnableAction(DeleteAction, HasItem and not Connected); EnableAction(BuildAction, HasItem and not Connected); EnableAction(EvolveAction, HasItem and not Connected); EnableAction(ConnectAction, HasItem and not Connected); EnableAction(DisconnectAction, HasItem and Connected); EnableAction(FileOpenAction, atOpen in VisibleActions); if Connected then ConnectButton.Action := DisconnectAction else ConnectButton.Action := ConnectAction; ConnectButton.Default := not ConnectionView.IsEditing; CloseButton.Cancel := not ConnectionView.IsEditing; end; procedure TInstantConnectionManagerForm.Build( ConnectionDef: TInstantConnectionDef); begin try if DoBuild(ConnectionDef) then ConnectionDef.IsBuilt := True; except ConnectionDef.IsBuilt := False; raise; end; PopulateConnectionDefs; end; procedure TInstantConnectionManagerForm.Evolve( ConnectionDef: TInstantConnectionDef); begin DoEvolve(ConnectionDef); PopulateConnectionDefs; end; procedure TInstantConnectionManagerForm.BuildActionExecute(Sender: TObject); begin Build(CurrentConnectionDef); end; procedure TInstantConnectionManagerForm.EvolveActionExecute(Sender: TObject); begin Evolve(CurrentConnectionDef); end; function TInstantConnectionManagerForm.ConfirmDlg(const Text: string): Boolean; begin Result := MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; end; procedure TInstantConnectionManagerForm.Connect(ConnectionDef: TInstantConnectionDef); begin if Assigned(ConnectionDef) then try if DoConnect(ConnectionDef) then begin ConnectionDef.IsBuilt := True; ModalResult := mrOk; end; finally PopulateConnectionDefs; end; end; procedure TInstantConnectionManagerForm.ConnectActionExecute(Sender: TObject); begin Connect(CurrentConnectionDef); end; procedure TInstantConnectionManagerForm.ConnectionViewDblClick(Sender: TObject); begin ConnectAction.Execute; end; {$IFDEF MSWINDOWS} procedure TInstantConnectionManagerForm.ConnectionViewEditedVCL(Sender: TObject; Item: TListItem; var S: String); var Def: TInstantConnectionDef; begin Def := Item.Data; Def.Name := S; end; {$ENDIF} {$IFDEF LINUX} procedure TInstantConnectionManagerForm.ConnectionViewEditedCLX(Sender: TObject; Item: TListItem; var S: WideString); var Def: TInstantConnectionDef; begin Def := Item.Data; Def.Name := S; end; procedure TInstantConnectionManagerForm.EditItemCaption(Item : TListItem); begin Item.Caption := InputBox('Connection Name','Name:',Item.Caption); end; {$ENDIF} procedure TInstantConnectionManagerForm.DeleteActionExecute( Sender: TObject); var ConnectionDef: TInstantConnectionDef; begin ConnectionDef := CurrentConnectionDef; if Assigned(ConnectionDef) and ConfirmDlg(Format('Delete connection "%s"?', [ConnectionDef.Name])) then begin ConnectionDefs.Remove(ConnectionDef); PopulateConnectionDefs; end; end; procedure TInstantConnectionManagerForm.Disconnect(ConnectionDef: TInstantConnectionDef); begin if Assigned(ConnectionDef) then try DoDisconnect(ConnectionDef); finally PopulateConnectionDefs; end; end; procedure TInstantConnectionManagerForm.DisconnectActionExecute(Sender: TObject); begin Disconnect(CurrentConnectionDef); end; function TInstantConnectionManagerForm.DoBuild( ConnectionDef: TInstantConnectionDef): Boolean; var Connector: TInstantConnector; DBBuilderForm: TInstantDBBuilderForm; begin if Assigned(FOnBuild) then begin Result := False; FOnBuild(Self, ConnectionDef, Result); Exit; end; if not Assigned(ConnectionDef) then begin Result := False; Exit; end; Connector := ConnectionDef.CreateConnector(nil); try DBBuilderForm := TInstantDBBuilderForm.Create(nil); try DBBuilderForm.Connector := Connector; DBBuilderForm.TargetModel := Model; DBBuilderForm.Execute; Result := True; finally DBBuilderForm.Free; end; finally Connector.Free; end; end; function TInstantConnectionManagerForm.DoEvolve( ConnectionDef: TInstantConnectionDef): Boolean; var Connector: TInstantConnector; DBEvolverForm: TInstantDBEvolverForm; begin if not Assigned(ConnectionDef) then begin Result := False; Exit; end; Connector := ConnectionDef.CreateConnector(nil); try DBEvolverForm := TInstantDBEvolverForm.Create(nil); try DBEvolverForm.Connector := Connector; DBEvolverForm.TargetModel := Model; DBEvolverForm.Execute; Result := True; finally DBEvolverForm.Free; end; finally Connector.Free; end; end; function TInstantConnectionManagerForm.DoConnect( ConnectionDef: TInstantConnectionDef): Boolean; begin Result := False; if Assigned(FOnConnect) then FOnConnect(Self, ConnectionDef, Result); end; function TInstantConnectionManagerForm.DoDisconnect( ConnectionDef: TInstantConnectionDef): Boolean; begin Result := False; if Assigned(FOnDisconnect) then FOnDisconnect(Self, ConnectionDef, Result); end; function TInstantConnectionManagerForm.DoEdit( ConnectionDef: TInstantConnectionDef): Boolean; begin if Assigned(FOnEdit) then begin Result := False; FOnEdit(Self, ConnectionDef, Result); end else Result := ConnectionDef.Edit; end; procedure TInstantConnectionManagerForm.DoPrepare(Connector: TInstantConnector); begin if Assigned(FOnPrepare) then FOnPrepare(Self, Connector); end; function TInstantConnectionManagerForm.Edit( ConnectionDef: TInstantConnectionDef): Boolean; begin Result := DoEdit(ConnectionDef); if Result then PopulateConnectionDefs; end; procedure TInstantConnectionManagerForm.EditActionExecute( Sender: TObject); begin Edit(CurrentConnectionDef); end; procedure TInstantConnectionManagerForm.FormCreate(Sender: TObject); begin LoadMultipleImages(ConnectionImages, 'IO_CONNECTIONMANAGERIMAGES', HInstance); {$IFDEF MSWINDOWS} BorderStyle := bsSizeable; ConnectionView.OnEdited := ConnectionViewEditedVCL; ConnectionView.HideSelection := False; ConnectionView.SortType := stText; ConnectionView.SmallImages := ConnectionImages; {$ENDIF} {$IFDEF LINUX} BorderStyle := fbsSizeable; ConnectionView.OnEdited := ConnectionViewEditedCLX; ConnectionView.ColumnMove := False; ConnectionView.Images := ConnectionImages; {$ENDIF} ConnectionView.Columns[0].Width := 225; ConnectionView.Columns[1].Width := 80; UpdateMenu; end; procedure TInstantConnectionManagerForm.FormShow(Sender: TObject); begin with ConnectionView do if (Items.Count > 0) and not Assigned(ItemFocused) then begin Selected := Items[0]; ItemFocused := Selected; end; end; function TInstantConnectionManagerForm.GetConnectionDefs: TInstantConnectionDefs; begin Result := FConnectionManager.ConnectionDefs; end; function TInstantConnectionManagerForm.GetCurrentConnectionDef: TInstantConnectionDef; begin with ConnectionView do if Assigned(Selected) and Assigned(Selected.Data) then Result := Selected.Data else Result := nil; end; function TInstantConnectionManagerForm.GetVisibleActions: TInstantConnectionManagerActionTypes; begin Result := []; if NewMenu.Visible then Include(Result, atNew); if EditAction.Visible then Include(Result, atEdit); if RenameAction.Visible then Include(Result, atRename); if DeleteAction.Visible then Include(Result, atDelete); if ConnectAction.Visible then Include(Result, atConnect); if DisconnectAction.Visible then Include(Result, atDisconnect); if BuildAction.Visible then Include(Result, atBuild); if FileOpenAction.Visible then Include(Result, atOpen); end; function TInstantConnectionManagerForm.IsConnected( ConnectionDef: TInstantConnectionDef): Boolean; begin Result := False; if Assigned(FOnIsConnected) then FOnIsConnected(Self, ConnectionDef, Result) else if Assigned(ConnectionManager.OnIsConnected) then ConnectionManager.OnIsConnected(ConnectionManager,ConnectionDef,Result); end; procedure TInstantConnectionManagerForm.NewMenuItemClick(Sender: TObject); var ConnectorClass: TInstantConnectorClass; ConnectionDef: TInstantConnectionDef; Item: TListItem; begin with Sender as TMenuItem do ConnectorClass := InstantConnectorClasses[Tag]; ConnectionDef := ConnectorClass.ConnectionDefClass.Create(ConnectionDefs); try ConnectionDef.Name := 'New Connection'; PopulateConnectionDefs; Item := ConnectionView.FindData(0, ConnectionDef, True, True); {$IFDEF MSWINDOWS} if Assigned(Item) then Item.EditCaption; {$ENDIF} {$IFDEF LINUX} EditItemCaption(Item); {$ENDIF} except ConnectionDef.Free; raise; end; end; procedure TInstantConnectionManagerForm.PopulateConnectionDefs; var CurrentDef, Def: TInstantConnectionDef; I: Integer; begin with ConnectionView.Items do begin BeginUpdate; try CurrentDef := CurrentConnectionDef; Clear; for I := 0 to Pred(ConnectionDefs.Count) do begin Def := ConnectionDefs[I]; if SupportConnector(Def.ConnectorClass) then with Add do begin if not Def.IsBuilt then ImageIndex := 0 else if IsConnected(Def) then ImageIndex := 2 else ImageIndex := 1; Caption := Def.Name; Data := Def; SubItems.Add(Def.ConnectionTypeName); SubItems.Add(AInstantStreamFormatStr[Def.BlobStreamFormat]); end; end; if Assigned(CurrentDef) then CurrentConnectionDef := CurrentDef; finally EndUpdate; end; end; end; procedure TInstantConnectionManagerForm.RenameActionExecute( Sender: TObject); begin with ConnectionView do if Assigned(Selected) then {$IFDEF MSWINDOWS} Selected.EditCaption; {$ENDIF} {$IFDEF LINUX} EditItemCaption(Selected); {$ENDIF} end; procedure TInstantConnectionManagerForm.SetCurrentConnectionDef( Value: TInstantConnectionDef); var Item: TListItem; begin Item := ConnectionView.FindData(0, Value, True, True); if Assigned(Item) then begin Item.Focused := True; Item.Selected := True; end; end; procedure TInstantConnectionManagerForm.SetFileName(const Value: string); begin FConnectionManager.FileName := Value; PopulateConnectionDefs; UpdateCaption; end; procedure TInstantConnectionManagerForm.SetOnSupportConnector( Value: TInstantConnectorClassEvent); begin if @Value <> @FOnSupportConnector then begin FOnSupportConnector := Value; UpdateMenu; end; end; procedure TInstantConnectionManagerForm.SetVisibleActions( Value: TInstantConnectionManagerActionTypes); begin NewMenu.Visible := atNew in Value; EditAction.Visible := atEdit in Value; RenameAction.Visible := atRename in Value; DeleteAction.Visible := atDelete in Value; ConnectAction.Visible := atConnect in Value; DisconnectAction.Visible := atDisconnect in Value; BuildAction.Visible := atBuild in Value; FileOpenAction.Visible := atOpen in Value; end; function TInstantConnectionManagerForm.SupportConnector( ConnectorClass: TInstantConnectorClass): Boolean; begin Result := True; if Assigned(FOnSupportConnector) then FOnSupportConnector(Self, ConnectorClass, Result); end; procedure TInstantConnectionManagerForm.UpdateMenu; var I: Integer; ConnectorClass: TInstantConnectorClass; ConnectorClassList: TStringList; Item: TMenuItem; begin ConnectorClassList := TStringList.Create; try for I := 0 to Pred(InstantConnectorClasses.Count) do begin ConnectorClass := InstantConnectorClasses[I]; if SupportConnector(ConnectorClass) then ConnectorClassList.AddObject( ConnectorClass.ConnectionDefClass.ConnectionTypeName + ' Connection', Pointer(I)); end; ConnectorClassList.Sort; NewMenu.Clear; for I := 0 to Pred(ConnectorClassList.Count) do begin Item := TMenuItem.Create(NewMenu); Item.Caption := ConnectorClassList[I]; Item.Tag := Integer(ConnectorClassList.Objects[I]); Item.OnClick := NewMenuItemClick; NewMenu.Add(Item); end; finally ConnectorClassList.Free; end; end; function TInstantConnectionManagerForm.GetFileName: string; begin Result := FConnectionManager.FileName; end; procedure TInstantConnectionManagerForm.UpdateCaption; begin if FileName <> '' then Caption := FTitle + ' - '+ ExtractFileName(FileName) else Caption := FTitle; end; procedure TInstantConnectionManagerForm.FormClose(Sender: TObject; var Action: TCloseAction); begin FConnectionManager.SaveConnectionDefs; end; procedure TInstantConnectionManagerForm.FileOpenActionBeforeExecute( Sender: TObject); begin FileOpenDialog.FileName := FileName; end; procedure TInstantConnectionManagerForm.SetConnectionManager( const Value: TInstantConnectionManager); begin if FConnectionManager <> Value then begin if Value.Caption <> '' then FTitle := Value.Caption else FTitle := Caption; FConnectionManager := Value; Model := Value.Model; OnSupportConnector := Value.OnSupportConnector; VisibleActions := Value.VisibleActions; OnBuild := Value.OnBuild; OnConnect := Value.OnConnect; OnDisconnect := Value.OnDisconnect; OnEdit := Value.OnEdit; OnIsConnected := Value.OnIsConnected; OnPrepare := Value.OnPrepare; FileName := Value.FileName; UpdateCaption; end; end; function TInstantConnectionManagerForm.GetOpenDialog: TOpenDialog; begin if not Assigned(FOpenDialog) then begin FOpenDialog := TOpenDialog.Create(self); FOpenDialog.Filter := SConnectionDefFilter; end; Result := FOpenDialog; end; procedure TInstantConnectionManagerForm.FileOpenActionExecute( Sender: TObject); begin FileOpenDialog.InitialDir := ExtractFilePath(FileName); if FileOpenDialog.Execute then FileName := FileOpenDialog.FileName; end; function TInstantConnectionManagerForm.IsManagerConnected: Boolean; begin Result := ConnectionManager.IsConnected; end; procedure TInstantConnectionManagerForm.ConnectActionUpdate( Sender: TObject); begin ConnectAction.Enabled := Assigned(CurrentConnectionDef) and not IsManagerConnected; end; procedure TInstantConnectionManagerForm.DisconnectActionUpdate(Sender: TObject); begin DisconnectAction.Enabled := IsManagerConnected; end; initialization RegisterConnectionManagerExecutor(DefaultConnectionManagerExecutor); finalization RegisterConnectionManagerExecutor(nil); end. --- NEW FILE: InstantDBBuilderFormUnit.dfm --- inherited InstantDBBuilderForm: TInstantDBBuilderForm Caption = 'Database Builder' OldCreateOrder = True PixelsPerInch = 96 TextHeight = 13 inherited ActionList: TActionList inherited ShowSequenceAction: TAction Caption = 'Show Build Sequence' end inherited BuildAction: TAction Caption = 'Build Database' end end object DBBuilder: TInstantDBBuilder Left = 272 Top = 96 end end |
From: Nando D. <na...@us...> - 2005-07-04 11:39:35
|
Update of /cvsroot/instantobjects/Source/Core/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22552/Core/D7 Modified Files: IOCore.dpk Log Message: finished TInstantDBBuilder; renamed InstantConnectionManagerForm Index: IOCore.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D7/IOCore.dpk,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** IOCore.dpk 28 Jun 2005 10:13:47 -0000 1.6 --- IOCore.dpk 4 Jul 2005 11:39:27 -0000 1.7 *************** *** 47,51 **** InstantPresentation in '..\InstantPresentation.pas', InstantAccessors in '..\InstantAccessors.pas', ! InstantConnectionManagerForm in '..\InstantConnectionManagerForm.pas' {InstantConnectionManagerForm}, InstantConnectionManager in '..\InstantConnectionManager.pas', InstantImageUtils in '..\InstantImageUtils.pas', --- 47,51 ---- InstantPresentation in '..\InstantPresentation.pas', InstantAccessors in '..\InstantAccessors.pas', ! InstantConnectionManagerFormUnit in '..\InstantConnectionManagerFormUnit.pas' {InstantConnectionManagerForm}, InstantConnectionManager in '..\InstantConnectionManager.pas', InstantImageUtils in '..\InstantImageUtils.pas', *************** *** 53,57 **** InstantDBBuild in '..\InstantDBBuild.pas', InstantDBEvolution in '..\InstantDBEvolution.pas', ! InstantDBEvolverForm in '..\InstantDBEvolverForm.pas' {InstantDBEvolverForm}; end. --- 53,59 ---- InstantDBBuild in '..\InstantDBBuild.pas', InstantDBEvolution in '..\InstantDBEvolution.pas', ! InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas', ! InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}, ! InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}; end. |
From: Nando D. <na...@us...> - 2005-07-04 11:37:32
|
Update of /cvsroot/instantobjects/Source/Core/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21648/Core/D6 Modified Files: IOCore.dpk Log Message: finished TInstantDBBuilder; renamed InstantConnectionManagerForm Index: IOCore.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D6/IOCore.dpk,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** IOCore.dpk 28 Jun 2005 10:13:46 -0000 1.6 --- IOCore.dpk 4 Jul 2005 11:37:21 -0000 1.7 *************** *** 48,52 **** InstantPresentation in '..\InstantPresentation.pas', InstantAccessors in '..\InstantAccessors.pas', - InstantConnectionManagerForm in '..\InstantConnectionManagerForm.pas' {InstantConnectionManagerForm}, InstantConnectionManager in '..\InstantConnectionManager.pas', InstantImageUtils in '..\InstantImageUtils.pas', --- 48,51 ---- *************** *** 54,58 **** InstantDBEvolution in '..\InstantDBEvolution.pas', InstantDBBuild in '..\InstantDBBuild.pas', ! InstantDBEvolverForm in '..\InstantDBEvolverForm.pas' {InstantDBEvolverForm}; end. --- 53,60 ---- InstantDBEvolution in '..\InstantDBEvolution.pas', InstantDBBuild in '..\InstantDBBuild.pas', ! InstantConnectionManagerFormUnit in '..\InstantConnectionManagerFormUnit.pas' {InstantConnectionManagerForm}, ! InstantCustomDBEvolverFormUnit in '..\InstantCustomDBEvolverFormUnit.pas' {InstantCustomDBEvolverForm}, ! InstantDBBuilderFormUnit in '..\InstantDBBuilderFormUnit.pas' {InstantDBBuilderForm}, ! InstantDBEvolverFormUnit in '..\InstantDBEvolverFormUnit.pas' {InstantDBEvolverForm}; end. |
From: Nando D. <na...@us...> - 2005-07-04 11:36:21
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21106/Core Modified Files: InstantDBEvolution.pas Log Message: refactored to support TInstantDBBuilder Index: InstantDBEvolution.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBEvolution.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** InstantDBEvolution.pas 28 Jun 2005 10:12:27 -0000 1.2 --- InstantDBEvolution.pas 4 Jul 2005 11:36:11 -0000 1.3 *************** *** 47,56 **** // evolve the database. procedure InternalBuildCommandSequence; override; - published - property AfterCommandSequenceExecute; - property AfterCommandExecute; - property BeforeCommandSequenceExecute; - property BeforeCommandExecute; - property OnCommandExecuteError; end; --- 47,50 ---- *************** *** 97,183 **** SourceFieldMetadata, TargetFieldMetadata: TInstantFieldMetadata; SourceIndexMetadata, TargetIndexMetadata: TInstantIndexMetadata; - - procedure AppendAddFieldCommand(const FieldMetadata: TInstantFieldMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctAddField); - Command.NewMetadata := FieldMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendAlterFieldCommand(const SourceFieldMetadata, - TargetFieldMetadata: TInstantFieldMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctAlterField); - Command.OldMetadata := SourceFieldMetadata; - Command.NewMetadata := TargetFieldMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendDropFieldCommand(const FieldMetadata: TInstantFieldMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctDropField); - Command.OldMetadata := FieldMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendAddIndexCommand(const IndexMetadata: TInstantIndexMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctAddIndex); - Command.NewMetadata := IndexMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendAlterIndexCommand(const SourceIndexMetadata, - TargetIndexMetadata: TInstantIndexMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctDropIndex); - Command.OldMetadata := SourceIndexMetadata; - // Enabled normally defaults to False for drop operations, but in this - // particular case it is more convenient to have it set to True, since the - // index is not really being dropped - it is being altered by recreating it. - Command.Enabled := True; - CommandSequence.Append(Command); - Command := Connector.Broker.CreateDBBuildCommand(ctAddIndex); - Command.NewMetadata := TargetIndexMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendDropIndexCommand(const IndexMetadata: TInstantIndexMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctDropIndex); - Command.OldMetadata := IndexMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendAddTableCommand(const TableMetadata: TInstantTableMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctAddTable); - Command.NewMetadata := TableMetadata; - CommandSequence.Append(Command); - end; - - procedure AppendDropTableCommand(const TableMetadata: TInstantTableMetadata); - var - Command: TInstantDBBuildCommand; - begin - Command := Connector.Broker.CreateDBBuildCommand(ctDropTable); - Command.OldMetadata := TableMetadata; - CommandSequence.Append(Command); - end; - begin // Upgrade tables. --- 91,94 ---- *************** *** 200,207 **** if (TargetFieldMetadata.DataType <> SourceFieldMetadata.DataType) or (TargetFieldMetadata.Size > SourceFieldMetadata.Size) then ! AppendAlterFieldCommand(SourceFieldMetadata, TargetFieldMetadata); end else ! AppendAddFieldCommand(TargetFieldMetadata); end; // Add missing indexes and recreate modified indexes --- 111,119 ---- if (TargetFieldMetadata.DataType <> SourceFieldMetadata.DataType) or (TargetFieldMetadata.Size > SourceFieldMetadata.Size) then ! AppendAlterFieldCommand(CommandSequence, SourceFieldMetadata, ! TargetFieldMetadata); end else ! AppendAddFieldCommand(CommandSequence, TargetFieldMetadata); end; // Add missing indexes and recreate modified indexes *************** *** 216,223 **** begin if not SourceIndexMetadata.Equals(TargetIndexMetadata) then ! AppendAlterIndexCommand(SourceIndexMetadata, TargetIndexMetadata); end else ! AppendAddIndexCommand(TargetIndexMetadata); end; end; --- 128,136 ---- begin if not SourceIndexMetadata.Equals(TargetIndexMetadata) then ! AppendAlterIndexCommand(CommandSequence, SourceIndexMetadata, ! TargetIndexMetadata); end else ! AppendAddIndexCommand(CommandSequence, TargetIndexMetadata); end; end; *************** *** 231,235 **** TargetIndexMetadata := TargetTableMetadata.FindIndexMetadata(AnsiUpperCase(SourceIndexMetadata.Name)); if not Assigned(TargetIndexMetadata) then ! AppendDropIndexCommand(SourceIndexMetadata); end; end; --- 144,148 ---- TargetIndexMetadata := TargetTableMetadata.FindIndexMetadata(AnsiUpperCase(SourceIndexMetadata.Name)); if not Assigned(TargetIndexMetadata) then ! AppendDropIndexCommand(CommandSequence, SourceIndexMetadata); end; end; *************** *** 241,249 **** TargetFieldMetadata := TargetTableMetadata.FindFieldMetadata(AnsiUpperCase(SourceFieldMetadata.Name)); if not Assigned(TargetFieldMetadata) then ! AppendDropFieldCommand(SourceFieldMetadata); end; end else ! AppendAddTableCommand(TargetTableMetadata); end; // Drop deleted tables. --- 154,162 ---- TargetFieldMetadata := TargetTableMetadata.FindFieldMetadata(AnsiUpperCase(SourceFieldMetadata.Name)); if not Assigned(TargetFieldMetadata) then ! AppendDropFieldCommand(CommandSequence, SourceFieldMetadata); end; end else ! AppendAddTableCommand(CommandSequence, TargetTableMetadata); end; // Drop deleted tables. *************** *** 254,258 **** CommandSequence.TargetScheme.FindTableMetadata(SourceTableMetadata.Name); if not Assigned(TargetTableMetadata) then ! AppendDropTableCommand(SourceTableMetadata); end; end; --- 167,171 ---- CommandSequence.TargetScheme.FindTableMetadata(SourceTableMetadata.Name); if not Assigned(TargetTableMetadata) then ! AppendDropTableCommand(CommandSequence, SourceTableMetadata); end; end; |
From: Nando D. <na...@us...> - 2005-07-04 11:35:17
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20444/Core Modified Files: InstantDBBuild.pas Log Message: support for multi-statement build commands in database evolutiuon; finished TInstantDBBuilder. Index: InstantDBBuild.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBBuild.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** InstantDBBuild.pas 28 Jun 2005 10:13:47 -0000 1.2 --- InstantDBBuild.pas 4 Jul 2005 11:35:07 -0000 1.3 *************** *** 112,120 **** private FTargetModel: TInstantModel; ! function GetTargetModel: TInstantModel; ! procedure SetTargetModel(const Value: TInstantModel); public // The reference Model. Default is InstantModel. property TargetModel: TInstantModel read GetTargetModel write SetTargetModel; end; --- 112,153 ---- private FTargetModel: TInstantModel; ! protected ! function GetTargetModel: TInstantModel; virtual; ! procedure SetTargetModel(const Value: TInstantModel); virtual; ! procedure AppendAddFieldCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const FieldMetadata: TInstantFieldMetadata); virtual; ! procedure AppendAddIndexCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const IndexMetadata: TInstantIndexMetadata); virtual; ! procedure AppendAddTableCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const TableMetadata: TInstantTableMetadata); virtual; ! procedure AppendAlterFieldCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const SourceFieldMetadata, ! TargetFieldMetadata: TInstantFieldMetadata); virtual; ! procedure AppendAlterIndexCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const SourceIndexMetadata, ! TargetIndexMetadata: TInstantIndexMetadata); virtual; ! procedure AppendDropFieldCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const FieldMetadata: TInstantFieldMetadata); virtual; ! procedure AppendDropIndexCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const IndexMetadata: TInstantIndexMetadata); virtual; ! function AppendDropTableCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const TableMetadata: TInstantTableMetadata): TInstantDBBuildCommand; virtual; public // The reference Model. Default is InstantModel. property TargetModel: TInstantModel read GetTargetModel write SetTargetModel; + published + property AfterCommandSequenceExecute; + property AfterCommandExecute; + property BeforeCommandSequenceExecute; + property BeforeCommandExecute; + property OnCommandExecuteError; end; *************** *** 123,134 **** // "classic" InstantObjects database building strategy. TInstantDBBuilder = class(TInstantCustomDBEvolver) protected procedure InternalBuildCommandSequence; override; ! published ! property AfterCommandSequenceExecute; ! property AfterCommandExecute; ! property BeforeCommandSequenceExecute; ! property BeforeCommandExecute; ! property OnCommandExecuteError; end; --- 156,167 ---- // "classic" InstantObjects database building strategy. TInstantDBBuilder = class(TInstantCustomDBEvolver) + private + // Adds to CommandSequence the steps needed to rebuild the database. + procedure GenerateCommandSequence(const CommandSequence: TInstantDBBuildCommandSequence); protected procedure InternalBuildCommandSequence; override; ! function AppendDropTableCommand( ! const CommandSequence: TInstantDBBuildCommandSequence; ! const TableMetadata: TInstantTableMetadata): TInstantDBBuildCommand; override; end; *************** *** 207,211 **** end; ! // Base class for all steps that work by executing a SQL statement or script. TInstantDBBuildSQLCommand = class(TInstantDBBuildCommand) private --- 240,245 ---- end; ! // Base class for all steps that work by executing one or more SQL statements ! // (that is, a script) each. TInstantDBBuildSQLCommand = class(TInstantDBBuildCommand) private *************** *** 214,218 **** protected function GetDescription: string; override; ! function GetSQLStatement: string; virtual; abstract; procedure InternalExecute; override; public --- 248,260 ---- protected function GetDescription: string; override; ! // Returns The number of statements that compound this script. The ! // predefined implementation returns 1. ! function GetSQLStatementCount: Integer; virtual; ! // Returns the nth SQL statement that is part of this script. Valid values ! // are in the range 0 to Pred(GetSQLStatementCount). The default ! // implementation, which should always be called through inherited at the ! // beginning of the overridden version, just returns '', or raises an ! // exception if Index is not in the allowed range. ! function GetSQLStatement(const Index: Integer): string; virtual; procedure InternalExecute; override; public *************** *** 226,230 **** function GetTableMetadata: TInstantTableMetadata; protected ! function GetSQLStatement: string; override; public property TableMetadata: TInstantTableMetadata read GetTableMetadata; --- 268,272 ---- function GetTableMetadata: TInstantTableMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property TableMetadata: TInstantTableMetadata read GetTableMetadata; *************** *** 236,240 **** function GetTableMetadata: TInstantTableMetadata; protected ! function GetSQLStatement: string; override; public property TableMetadata: TInstantTableMetadata read GetTableMetadata; --- 278,282 ---- function GetTableMetadata: TInstantTableMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property TableMetadata: TInstantTableMetadata read GetTableMetadata; *************** *** 246,250 **** function GetFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement: string; override; public property FieldMetadata: TInstantFieldMetadata read GetFieldMetadata; --- 288,292 ---- function GetFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property FieldMetadata: TInstantFieldMetadata read GetFieldMetadata; *************** *** 256,260 **** function GetFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement: string; override; public property FieldMetadata: TInstantFieldMetadata read GetFieldMetadata; --- 298,302 ---- function GetFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property FieldMetadata: TInstantFieldMetadata read GetFieldMetadata; *************** *** 267,271 **** function GetOldFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement: string; override; public property OldFieldMetadata: TInstantFieldMetadata read GetOldFieldMetadata; --- 309,313 ---- function GetOldFieldMetadata: TInstantFieldMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property OldFieldMetadata: TInstantFieldMetadata read GetOldFieldMetadata; *************** *** 278,282 **** function GetIndexMetadata: TInstantIndexMetadata; protected ! function GetSQLStatement: string; override; public property IndexMetadata: TInstantIndexMetadata read GetIndexMetadata; --- 320,324 ---- function GetIndexMetadata: TInstantIndexMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property IndexMetadata: TInstantIndexMetadata read GetIndexMetadata; *************** *** 288,298 **** function GetIndexMetadata: TInstantIndexMetadata; protected ! function GetSQLStatement: string; override; public property IndexMetadata: TInstantIndexMetadata read GetIndexMetadata; end; implementation { TInstantCustomDBBuilder } --- 330,357 ---- function GetIndexMetadata: TInstantIndexMetadata; protected ! function GetSQLStatement(const Index: Integer): string; override; public property IndexMetadata: TInstantIndexMetadata read GetIndexMetadata; end; + // Alters an index using a couple of SQL DROP INDEX and CREATE INDEX + // statements. + TInstantDBBuildAlterIndexSQLCommand = class(TInstantDBBuildSQLCommand) + private + function GetOldIndexMetadata: TInstantIndexMetadata; + function GetNewIndexMetadata: TInstantIndexMetadata; + protected + function GetSQLStatement(const Index: Integer): string; override; + function GetSQLStatementCount: Integer; override; + public + property OldIndexMetadata: TInstantIndexMetadata read GetOldIndexMetadata; + property NewIndexMetadata: TInstantIndexMetadata read GetNewIndexMetadata; + end; + implementation + uses + DB; + { TInstantCustomDBBuilder } *************** *** 410,424 **** end; ! procedure TInstantCustomDBEvolver.SetTargetModel( ! const Value: TInstantModel); begin FTargetModel := Value; end; { TInstantDBBuilder } procedure TInstantDBBuilder.InternalBuildCommandSequence; begin ! { TODO : Build a series of drop & create tables and indices. } end; --- 469,612 ---- end; ! procedure TInstantCustomDBEvolver.SetTargetModel(const Value: TInstantModel); begin FTargetModel := Value; end; + procedure TInstantCustomDBEvolver.AppendAddFieldCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const FieldMetadata: TInstantFieldMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctAddField); + Command.NewMetadata := FieldMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendAlterFieldCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const SourceFieldMetadata, TargetFieldMetadata: TInstantFieldMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctAlterField); + Command.OldMetadata := SourceFieldMetadata; + Command.NewMetadata := TargetFieldMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendDropFieldCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const FieldMetadata: TInstantFieldMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctDropField); + Command.OldMetadata := FieldMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendAddIndexCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const IndexMetadata: TInstantIndexMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctAddIndex); + Command.NewMetadata := IndexMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendAlterIndexCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const SourceIndexMetadata, TargetIndexMetadata: TInstantIndexMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctAlterIndex); + Command.OldMetadata := SourceIndexMetadata; + Command.NewMetadata := TargetIndexMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendDropIndexCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const IndexMetadata: TInstantIndexMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctDropIndex); + Command.OldMetadata := IndexMetadata; + CommandSequence.Append(Command); + end; + + procedure TInstantCustomDBEvolver.AppendAddTableCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const TableMetadata: TInstantTableMetadata); + var + Command: TInstantDBBuildCommand; + begin + Command := Connector.Broker.CreateDBBuildCommand(ctAddTable); + Command.NewMetadata := TableMetadata; + CommandSequence.Append(Command); + end; + + function TInstantCustomDBEvolver.AppendDropTableCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const TableMetadata: TInstantTableMetadata): TInstantDBBuildCommand; + begin + Result := Connector.Broker.CreateDBBuildCommand(ctDropTable); + Result.OldMetadata := TableMetadata; + CommandSequence.Append(Result); + end; + { TInstantDBBuilder } + function TInstantDBBuilder.AppendDropTableCommand( + const CommandSequence: TInstantDBBuildCommandSequence; + const TableMetadata: TInstantTableMetadata): TInstantDBBuildCommand; + begin + Result := inherited AppendDropTableCommand(CommandSequence, TableMetadata); + // This DB builder always drops tables by design, so we should better override + // the default setting of False for Enabled. + Result.Enabled := True; + end; + + procedure TInstantDBBuilder.GenerateCommandSequence( + const CommandSequence: TInstantDBBuildCommandSequence); + var + iTable, iIndex: Integer; + SourceTableMetadata, TargetTableMetadata: TInstantTableMetadata; + TargetIndexMetadata: TInstantIndexMetadata; + begin + // Recreate tables. + for iTable := 0 to CommandSequence.TargetScheme.TableMetadataCount - 1 do + begin + TargetTableMetadata := CommandSequence.TargetScheme.TableMetadatas[iTable]; + { TODO : This only works for case-insensitive object names! } + SourceTableMetadata := + CommandSequence.SourceScheme.FindTableMetadata(AnsiUpperCase(TargetTableMetadata.Name)); + if Assigned(SourceTableMetadata) then + begin + AppendDropTableCommand(CommandSequence, TargetTableMetadata); + AppendAddTableCommand(CommandSequence, TargetTableMetadata); + end; + // Add missing indexes and recreate modified indexes + for iIndex := 0 to TargetTableMetadata.IndexMetadataCount - 1 do + begin + TargetIndexMetadata := TargetTableMetadata.IndexMetadatas[iIndex]; + if not (ixPrimary in TargetIndexMetadata.Options) then + AppendAddIndexCommand(CommandSequence, TargetIndexMetadata); + end; + end; + end; + procedure TInstantDBBuilder.InternalBuildCommandSequence; begin ! CommandSequence.Clear; ! CommandSequence.SourceScheme := Connector.CreateScheme(TargetModel); ! CommandSequence.TargetScheme := Connector.CreateScheme(TargetModel); ! GenerateCommandSequence(CommandSequence); end; *************** *** 576,581 **** const Value: TInstantScheme); begin ! FreeAndNil(FSourceScheme); ! FSourceScheme := Value; end; --- 764,772 ---- const Value: TInstantScheme); begin ! if FSourceScheme <> Value then ! begin ! FreeAndNil(FSourceScheme); ! FSourceScheme := Value; ! end; end; *************** *** 583,588 **** const Value: TInstantScheme); begin ! FreeAndNil(FTargetScheme); ! FTargetScheme := Value; end; --- 774,782 ---- const Value: TInstantScheme); begin ! if FTargetScheme <> Value then ! begin ! FreeAndNil(FTargetScheme); ! FTargetScheme := Value; ! end; end; *************** *** 600,616 **** function TInstantDBBuildSQLCommand.GetDescription: string; begin ! Result := GetSQLStatement; end; procedure TInstantDBBuildSQLCommand.InternalExecute; begin ! Broker.Execute(GetSQLStatement()); end; { TInstantDBBuildAddTableSQLCommand } ! function TInstantDBBuildAddTableSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateCreateTableSQL(TableMetadata); end; --- 794,837 ---- function TInstantDBBuildSQLCommand.GetDescription: string; + var + iStatement: Integer; begin ! Result := ''; ! for iStatement := 0 to Pred(GetSQLStatementCount) do ! begin ! if Result <> '' then ! Result := Result + sLineBreak; ! Result := Result + GetSQLStatement(iStatement); ! end; ! end; ! ! function TInstantDBBuildSQLCommand.GetSQLStatement( ! const Index: Integer): string; ! begin ! if (Index < 0) or (Index >= GetSQLStatementCount) then ! raise EInstantDBBuildError.CreateFmt(SSQLStatementIndexOutOfBounds, ! [Index]); ! Result := ''; ! end; ! ! function TInstantDBBuildSQLCommand.GetSQLStatementCount: Integer; ! begin ! Result := 1; end; procedure TInstantDBBuildSQLCommand.InternalExecute; + var + iStatement: Integer; begin ! for iStatement := 0 to Pred(GetSQLStatementCount) do ! Broker.Execute(GetSQLStatement(iStatement)); end; { TInstantDBBuildAddTableSQLCommand } ! function TInstantDBBuildAddTableSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateCreateTableSQL(TableMetadata); end; *************** *** 628,633 **** end; ! function TInstantDBBuildAddFieldSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateAddFieldSQL(FieldMetadata); end; --- 849,856 ---- end; ! function TInstantDBBuildAddFieldSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateAddFieldSQL(FieldMetadata); end; *************** *** 640,645 **** end; ! function TInstantDBBuildDropFieldSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateDropFieldSQL(FieldMetadata); end; --- 863,870 ---- end; ! function TInstantDBBuildDropFieldSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateDropFieldSQL(FieldMetadata); end; *************** *** 647,652 **** { TInstantDBBuildDropTableSQLCommand } ! function TInstantDBBuildDropTableSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateDropTableSQL(TableMetadata); end; --- 872,879 ---- { TInstantDBBuildDropTableSQLCommand } ! function TInstantDBBuildDropTableSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateDropTableSQL(TableMetadata); end; *************** *** 669,674 **** end; ! function TInstantDBBuildAlterFieldSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateAlterFieldSQL(OldFieldMetadata, NewFieldMetadata); end; --- 896,903 ---- end; ! function TInstantDBBuildAlterFieldSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateAlterFieldSQL(OldFieldMetadata, NewFieldMetadata); end; *************** *** 681,686 **** end; ! function TInstantDBBuildAddIndexSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateCreateIndexSQL(IndexMetadata); end; --- 910,917 ---- end; ! function TInstantDBBuildAddIndexSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateCreateIndexSQL(IndexMetadata); end; *************** *** 693,700 **** end; ! function TInstantDBBuildDropIndexSQLCommand.GetSQLStatement: string; begin Result := Broker.Generator.GenerateDropIndexSQL(IndexMetadata); end; end. --- 924,960 ---- end; ! function TInstantDBBuildDropIndexSQLCommand.GetSQLStatement( ! const Index: Integer): string; begin + Result := inherited GetSQLStatement(Index); Result := Broker.Generator.GenerateDropIndexSQL(IndexMetadata); end; + { TInstantDBBuildAlterIndexSQLCommand } + + function TInstantDBBuildAlterIndexSQLCommand.GetOldIndexMetadata: TInstantIndexMetadata; + begin + Result := OldMetadata as TInstantIndexMetadata; + end; + + function TInstantDBBuildAlterIndexSQLCommand.GetNewIndexMetadata: TInstantIndexMetadata; + begin + Result := NewMetadata as TInstantIndexMetadata; + end; + + function TInstantDBBuildAlterIndexSQLCommand.GetSQLStatement( + const Index: Integer): string; + begin + Result := inherited GetSQLStatement(Index); + if Index = 0 then + Result := Broker.Generator.GenerateDropIndexSQL(OldIndexMetadata) + else + Result := Broker.Generator.GenerateCreateIndexSQL(NewIndexMetadata); + end; + + function TInstantDBBuildAlterIndexSQLCommand.GetSQLStatementCount: Integer; + begin + Result := 2; + end; + end. |
From: Nando D. <na...@us...> - 2005-07-04 11:34:33
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19712/Core Modified Files: InstantConsts.pas Log Message: support for multi-statement build commands in database evolutiuon Index: InstantConsts.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConsts.pas,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** InstantConsts.pas 1 Jul 2005 23:29:22 -0000 1.12 --- InstantConsts.pas 4 Jul 2005 11:34:05 -0000 1.13 *************** *** 131,134 **** --- 131,135 ---- SPersistentObjectNotAllowed = 'Persistent object %s(''%s'') not allowed.'; SSpecifierMissing = 'Specifier missing'; + SSQLStatementIndexOutOfBounds = 'SQL statement index out of bounds.'; STransactionInProgress = 'Transaction in progress'; STrueString = 'True'; |
From: Nando D. <na...@us...> - 2005-07-04 11:33:56
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19144/Core Modified Files: InstantPersistence.pas Log Message: support for altering indexes in database evolution Index: InstantPersistence.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantPersistence.pas,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** InstantPersistence.pas 19 Jun 2005 08:31:59 -0000 1.43 --- InstantPersistence.pas 4 Jul 2005 11:33:21 -0000 1.44 *************** *** 1493,1496 **** --- 1493,1499 ---- end; + TInstantConnectorEvent = procedure(Sender: TObject; + Connector: TInstantConnector) of object; + TInstantCacheNodeColor = (ncRed, ncBlack); *************** *** 1630,1634 **** TInstantDBBuildCommandType = (ctAddTable, ctDropTable, ctAddField, ctAlterField, ! ctDropField, ctAddIndex, ctDropIndex); EInstantDBBuildError = class(EInstantError); --- 1633,1637 ---- TInstantDBBuildCommandType = (ctAddTable, ctDropTable, ctAddField, ctAlterField, ! ctDropField, ctAddIndex, ctAlterIndex, ctDropIndex); EInstantDBBuildError = class(EInstantError); *************** *** 15170,15174 **** // depending on the CommandType. InstantDBBuildCommandEnabledDefaults: array[TInstantDBBuildCommandType] of Boolean = ! (True, False, True, True, True, True, False); begin inherited Create; --- 15173,15177 ---- // depending on the CommandType. InstantDBBuildCommandEnabledDefaults: array[TInstantDBBuildCommandType] of Boolean = ! (True, False, True, True, True, True, True, False); begin inherited Create; |
From: Nando D. <na...@us...> - 2005-07-04 11:33:10
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18877/Core Modified Files: InstantConnectionManager.pas Log Message: common declaration moved from InstantConnectionManager to InstantPersistence Index: InstantConnectionManager.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConnectionManager.pas,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** InstantConnectionManager.pas 30 Jun 2005 08:49:35 -0000 1.16 --- InstantConnectionManager.pas 4 Jul 2005 11:33:00 -0000 1.17 *************** *** 57,62 **** TInstantConnectionDefEvent = procedure(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean) of object; - TInstantConnectorEvent = procedure(Sender: TObject; - Connector: TInstantConnector) of object; TInstantConnectorClassEvent = procedure(Sender: TObject; ConnectorClass: TInstantConnectorClass; var Result: Boolean) of object; --- 57,60 ---- |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:32
|
Update of /cvsroot/instantobjects/Source/Brokers/DBX In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Brokers/DBX Modified Files: InstantDBX.pas Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. Index: InstantDBX.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Brokers/DBX/InstantDBX.pas,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** InstantDBX.pas 28 Jun 2005 10:02:56 -0000 1.6 --- InstantDBX.pas 1 Jul 2005 23:29:22 -0000 1.7 *************** *** 156,159 **** --- 156,160 ---- TInstantDBXMSSQLBroker = class(TInstantDBXBroker) protected + function CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; override; procedure AssignParam(SourceParam, TargetParam: TParam); override; function CreateResolver(Map: TInstantAttributeMap): TInstantSQLResolver; override; *************** *** 203,207 **** uses SysUtils, InstantDBXConnectionDefEdit, InstantUtils, InstantConsts, Math, ! InstantDBBuild, InstantIBFbCatalog; { TInstantDBXConnector } --- 204,208 ---- uses SysUtils, InstantDBXConnectionDefEdit, InstantUtils, InstantConsts, Math, ! InstantDBBuild, InstantIBFbCatalog, InstantMSSqlCatalog; { TInstantDBXConnector } *************** *** 554,557 **** --- 555,564 ---- end; + function TInstantDBXMSSQLBroker.CreateCatalog( + const AScheme: TInstantScheme): TInstantCatalog; + begin + Result := TInstantMSSqlCatalog.Create(AScheme, Self); + end; + function TInstantDBXMSSQLBroker.CreateResolver( Map: TInstantAttributeMap): TInstantSQLResolver; |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:32
|
Update of /cvsroot/instantobjects/Source/Catalogs/MSSql/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Catalogs/MSSql/D7 Added Files: IOMSSqlCatalog.cfg IOMSSqlCatalog.dof IOMSSqlCatalog.dpk IOMSSqlCatalog.res Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. --- NEW FILE: IOMSSqlCatalog.dpk --- package IOMSSqlCatalog; {$R *.res} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS ON} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'InstantObjects Catalog for MS-Sql'} {$LIBSUFFIX '_D7'} {$RUNONLY} {$IMPLICITBUILD OFF} requires rtl, IOCore; contains InstantMsSQLCatalog in '..\InstantMSSqlCatalog.pas'; end. --- NEW FILE: IOMSSqlCatalog.cfg --- -$A8 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T+ -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\programmi\borland\delphi7\Projects\Bpl" -LN"c:\programmi\borland\delphi7\Projects\Bpl" -Z -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST --- NEW FILE: IOMSSqlCatalog.dof --- [FileVersion] Version=7.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=1 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; NamespacePrefix= SymbolDeprecated=1 SymbolLibrary=1 SymbolPlatform=1 UnitLibrary=1 UnitPlatform=1 UnitDeprecated=1 HResultCompat=1 HidingMember=1 HiddenVirtual=1 Garbage=1 BoundsError=1 ZeroNilCompat=1 StringConstTruncated=1 ForLoopVarVarPar=1 TypedConstVarPar=1 AsgToTypedConst=1 CaseLabelRange=1 ForVariable=1 ConstructingAbstract=1 ComparisonFalse=1 ComparisonTrue=1 ComparingSignedUnsigned=1 CombiningSignedUnsigned=1 UnsupportedConstruct=1 FileOpen=1 FileOpenUnitSrc=1 BadGlobalSymbol=1 DuplicateConstructorDestructor=1 InvalidDirective=1 PackageNoLink=1 PackageThreadVar=1 ImplicitImport=1 HPPEMITIgnored=1 NoRetVal=1 UseBeforeDef=1 ForLoopVarUndef=1 UnitNameMismatch=1 NoCFGFileFound=1 MessageDirective=1 ImplicitVariants=1 UnicodeToLocale=1 LocaleToUnicode=1 ImagebaseMultiple=1 SuspiciousTypecast=1 PrivatePropAccessor=1 UnsafeType=0 UnsafeCode=0 UnsafeCast=0 [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription=InstantObjects Catalog for MS-Sql [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath= Packages=vcl;rtl;dbrtl;vcldb;ibxpress;IOCore;dbexpress;IODBX Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams=/nostart HostApplication= Launcher= UseLauncher=0 DebugCWD= [Language] ActiveLang= ProjectLang= RootDir=C:\Programmi\Borland\Delphi7\Bin\ [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1040 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlUnitAliases] Count=1 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; --- NEW FILE: IOMSSqlCatalog.res --- (This appears to be a binary file; contents omitted.) |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:32
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Core Modified Files: InstantConnectionManagerForm.pas InstantConsts.pas InstantDBEvolverForm.dfm Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. Index: InstantConsts.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConsts.pas,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** InstantConsts.pas 26 Jun 2005 14:28:20 -0000 1.11 --- InstantConsts.pas 1 Jul 2005 23:29:22 -0000 1.12 *************** *** 163,166 **** --- 163,167 ---- SUnsupportedType = 'Unsupported type: %s'; SUpdateConflict = 'Object %s(''%s'') was updated by another session'; + SUnsupportedColumnType = 'ColumnType %s not supported'; implementation Index: InstantConnectionManagerForm.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConnectionManagerForm.pas,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** InstantConnectionManagerForm.pas 28 Jun 2005 10:13:47 -0000 1.5 --- InstantConnectionManagerForm.pas 1 Jul 2005 23:29:22 -0000 1.6 *************** *** 395,398 **** --- 395,399 ---- DBEvolverForm := TInstantDBEvolverForm.Create(nil); try + DBEvolverForm.Caption := DBEvolverForm.Caption + ' - ' + ConnectionDef.Name; DBEvolverForm.Connector := Connector; DBEvolverForm.TargetModel := Model; Index: InstantDBEvolverForm.dfm =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBEvolverForm.dfm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** InstantDBEvolverForm.dfm 28 Jun 2005 10:13:47 -0000 1.1 --- InstantDBEvolverForm.dfm 1 Jul 2005 23:29:22 -0000 1.2 *************** *** 23,31 **** 0000C0070000C0070000C0070000C0070000E00F0000F83F0000FFFF0000} OldCreateOrder = False ShowHint = True OnCreate = FormCreate DesignSize = ( 593 ! 305) PixelsPerInch = 96 TextHeight = 13 --- 23,32 ---- 0000C0070000C0070000C0070000C0070000E00F0000F83F0000FFFF0000} OldCreateOrder = False + Position = poScreenCenter ShowHint = True OnCreate = FormCreate DesignSize = ( 593 ! 298) PixelsPerInch = 96 TextHeight = 13 *************** *** 127,134 **** --- 128,137 ---- object ShowSequenceAction: TAction Caption = 'Show Evolution Sequence' + Hint = 'Show Evolution Sequence' OnExecute = ShowSequenceActionExecute end object EvolveAction: TAction Caption = 'Evolve Database' + Hint = 'Evolve Database' OnExecute = EvolveActionExecute OnUpdate = EvolveActionUpdate *************** *** 136,139 **** --- 139,143 ---- object MoveCommandUpAction: TAction Caption = 'Move Command Up' + Hint = 'Move Command Up' OnExecute = MoveCommandUpActionExecute OnUpdate = MoveCommandUpActionUpdate *************** *** 141,144 **** --- 145,149 ---- object MoveCommandDownAction: TAction Caption = 'Move Command Down' + Hint = 'Move Command Down' OnExecute = MoveCommandDownActionExecute OnUpdate = MoveCommandDownActionUpdate *************** *** 146,149 **** --- 151,155 ---- object EnableAllCommandsAction: TAction Caption = 'Enable All Commands' + Hint = 'Enable All Commands' OnExecute = EnableAllCommandsActionExecute OnUpdate = EnableAllCommandsActionUpdate *************** *** 151,154 **** --- 157,161 ---- object DisableAllCommandsAction: TAction Caption = 'Disable All Commands' + Hint = 'Disable All Commands' OnExecute = DisableAllCommandsActionExecute OnUpdate = DisableAllCommandsActionUpdate |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:32
|
Update of /cvsroot/instantobjects/Source/Catalogs/MSSql In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Catalogs/MSSql Added Files: InstantMSSqlCatalog.pas Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. --- NEW FILE: InstantMSSqlCatalog.pas --- (* * InstantObjects DBEvolver Support * MS-SQL Catalog *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: InstantObjects DBEvolver Support * * The Initial Developer of the Original Code is: Carlo Barazzetta * * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) unit InstantMSSqlCatalog; interface uses InstantPersistence; type // A TInstantCatalog that reads catalog information from an MS-SQL server database. // Can be used with a SQL broker that accesses MS-SQL databases. TInstantMSSqlCatalog = class(TInstantSQLBrokerCatalog) private procedure AddFieldMetadatas(TableMetadata: TInstantTableMetadata); procedure AddIndexMetadatas(TableMetadata: TInstantTableMetadata); procedure AddTableMetadatas(TableMetadatas: TInstantTableMetadatas); function ColumnTypeToDataType(const ColumnType: string; const ColumnSubType, FieldScale: Integer): TInstantDataType; function GetSelectFieldsSQL(const ATableName: string): string; function GetSelectIndexesSQL(const ATableName: string): string; function GetSelectIndexFieldsSQL(const AIndexName: string): string; function GetSelectTablesSQL: string; public procedure InitTableMetadatas(ATableMetadatas: TInstantTableMetadatas); override; end; implementation uses SysUtils, Classes, DB, InstantConsts; { TInstantMSSqlCatalog } procedure TInstantMSSqlCatalog.AddIndexMetadatas( TableMetadata: TInstantTableMetadata); const IndexNonUnique = $0001; IndexUnique = $0002; IndexPrimaryKey = $0004; var IdxType: Integer; Indexes: TDataSet; IndexMetadata: TInstantIndexMetadata; function GetIndexFields(const IndexName: string): string; var IndexFieldList: TStrings; IndexFields: TDataSet; begin IndexFieldList := TStringList.Create; try IndexFields := Broker.AcquireDataSet(GetSelectIndexFieldsSQL(IndexName)); try IndexFields.Open; try while not IndexFields.Eof do begin IndexFieldList.Add(Trim(IndexFields.FieldByName('COLUMN_NAME').AsString)); IndexFields.Next; end; finally IndexFields.Close; end; finally Broker.ReleaseDataSet(IndexFields); end; Result := StringReplace(IndexFieldList.CommaText, ',', ';', [rfReplaceAll]); finally IndexFieldList.Free; end; end; begin Indexes := Broker.AcquireDataSet(GetSelectIndexesSQL(TableMetadata.Name)); try Indexes.Open; try while not Indexes.Eof do begin IndexMetadata := TableMetadata.IndexMetadatas.Add; IndexMetadata.Name := Trim(Indexes.FieldByName('INDEX_NAME').AsString); IndexMetadata.Fields := GetIndexFields(IndexMetadata.Name); IndexMetadata.Options := []; IdxType := Indexes.FieldByName('INDEX_TYPE').Value; if (IdxType and IndexPrimaryKey) = IndexPrimaryKey then IndexMetadata.Options := IndexMetadata.Options + [ixPrimary,ixUnique]; if (IdxType and IndexUnique) = IndexUnique then IndexMetadata.Options := IndexMetadata.Options + [ixUnique]; if Indexes.FieldByName('SORT_ORDER').Value = 'D' then IndexMetadata.Options := IndexMetadata.Options + [ixDescending]; { TODO : support other Options? } Indexes.Next; end; finally Indexes.Close; end; finally Broker.ReleaseDataSet(Indexes); end; end; procedure TInstantMSSqlCatalog.AddFieldMetadatas( TableMetadata: TInstantTableMetadata); var Fields: TDataSet; FieldMetadata: TInstantFieldMetadata; begin Fields := Broker.AcquireDataSet(GetSelectFieldsSQL(TableMetadata.Name)); try Fields.Open; try while not Fields.Eof do begin FieldMetadata := TableMetadata.FieldMetadatas.Add; FieldMetadata.Name := Trim(Fields.FieldByName('COLUMN_NAME').AsString); FieldMetadata.DataType := ColumnTypeToDataType( Trim(Fields.FieldByName('COLUMN_TYPENAME').AsString), Fields.FieldByName('COLUMN_SUBTYPE').AsInteger, Fields.FieldByName('COLUMN_SCALE').AsInteger); FieldMetadata.Options := []; if Fields.FieldByName('COLUMN_NULLABLE').AsInteger <> 1 then FieldMetadata.Options := FieldMetadata.Options + [foRequired]; if TableMetadata.IndexMetadatas.IsFieldIndexed(FieldMetadata) then FieldMetadata.Options := FieldMetadata.Options + [foIndexed]; { TODO : support ExternalTableName? } if FieldMetadata.DataType = dtString then FieldMetadata.Size := Fields.FieldByName('COLUMN_LENGTH').AsInteger else FieldMetadata.Size := Fields.FieldByName('COLUMN_LENGTH').AsInteger; Fields.Next; end; finally Fields.Close; end; finally Broker.ReleaseDataSet(Fields); end; end; procedure TInstantMSSqlCatalog.AddTableMetadatas( TableMetadatas: TInstantTableMetadatas); var Tables: TDataSet; TableMetadata: TInstantTableMetadata; begin Tables := Broker.AcquireDataSet(GetSelectTablesSQL()); try Tables.Open; try while not Tables.Eof do begin TableMetadata := TableMetadatas.Add; TableMetadata.Name := Trim(Tables.FieldByName('TABLE_NAME').AsString); // Call AddIndexMetadatas first, so that AddFieldMetadatas can see what // indexes are defined to correctly set the foIndexed option. AddIndexMetadatas(TableMetadata); AddFieldMetadatas(TableMetadata); Tables.Next; end; finally Tables.Close; end; finally Broker.ReleaseDataSet(Tables); end; end; function TInstantMSSqlCatalog.ColumnTypeToDataType(const ColumnType: string; const ColumnSubType, FieldScale: Integer): TInstantDataType; begin if SameText(ColumnType, 'int') then Result := dtInteger else if SameText(ColumnType, 'float') then Result := dtFloat else if SameText(ColumnType, 'money') then Result := dtCurrency else if SameText(ColumnType, 'bit') then Result := dtBoolean else if SameText(ColumnType, 'varchar') then Result := dtString else if SameText(ColumnType, 'text') then Result := dtMemo else if SameText(ColumnType, 'datetime') then Result := dtDateTime else if SameText(ColumnType, 'image') then Result := dtBlob else raise Exception.CreateFmt(SUnsupportedColumnType, [ColumnType]); end; function TInstantMSSqlCatalog.GetSelectFieldsSQL( const ATableName: string): string; begin Result := 'SELECT ' + ' c.name AS COLUMN_NAME, ' + ' c.isnullable AS COLUMN_NULLABLE, ' + ' t.name AS COLUMN_TYPENAME, ' + ' c.xtype AS COLUMN_SUBTYPE, ' + ' CASE ' + ' WHEN (d.oledb_data_type = 135) AND (c.xtype in (58, 61)) THEN 16' + ' WHEN (d.oledb_data_type = 6) THEN 8' + ' WHEN (d.oledb_data_type = 4) THEN 8' + ' WHEN (d.oledb_data_type = 20) THEN 34' + ' WHEN (d.oledb_data_type = 72) AND (c.xtype = 36) THEN 38' + ' ELSE c.length ' + ' END ' + ' AS COLUMN_LENGTH, ' + ' c.prec AS COLUMN_PRECISION, ' + ' CAST(c.scale AS SMALLINT) AS COLUMN_SCALE ' + 'FROM ' + ' sysobjects o, syscolumns c, systypes t, master.dbo.spt_provider_types d ' + 'WHERE ' + ' o.type in (''U'', ''V'', ''S'') ' + ' AND o.id = c.id ' + ' AND c.xusertype = t.xusertype ' + ' and c.xtype = d.ss_dtype ' + ' AND o.name = ''' + ATableName + ''' ' + ' ORDER BY c.colorder'; end; function TInstantMSSqlCatalog.GetSelectIndexesSQL( const ATableName: string): string; begin Result := 'SELECT DISTINCT ' + ' x.name AS INDEX_NAME, ' + ' (CASE WHEN x.status & 0x800 <> 0 THEN 4 ELSE 0 END) + ' + ' (CASE WHEN x.status & 0x2 <> 0 THEN 2 ELSE 1 END) ' + ' AS INDEX_TYPE, ' + ' (CASE WHEN indexkey_property(x.id, x.indid, 1, N''isdescending'') <> 0 THEN ''D'' ELSE ''A'' END) AS SORT_ORDER ' + 'FROM ' + ' sysobjects o, sysindexes x, syscolumns c, sysindexkeys xk ' + 'WHERE ' + ' o.id = x.id ' + ' and o.id = c.id ' + ' and o.id = xk.id ' + ' and x.indid = xk.indid ' + ' and c.colid = xk.colid ' + ' and xk.keyno <= x.keycnt ' + ' and o.xtype<>''S'' ' + ' and LEFT(x.name, 8) <> ''_WA_Sys_'' ' + ' AND o.name = ''' + ATableName + ''' ' + 'ORDER BY x.name'; end; function TInstantMSSqlCatalog.GetSelectIndexFieldsSQL( const AIndexName: string): string; begin Result := 'SELECT ' + ' c.name AS COLUMN_NAME ' + 'FROM ' + ' sysobjects o, sysindexes x, syscolumns c, sysindexkeys xk ' + 'WHERE ' + ' o.id = x.id ' + ' and o.id = c.id ' + ' and o.id = xk.id ' + ' and x.indid = xk.indid ' + ' and c.colid = xk.colid ' + ' and xk.keyno <= x.keycnt ' + ' and o.xtype<>''S'' ' + ' and LEFT(x.name, 8) <> ''_WA_Sys_'' ' + ' AND x.name = ''' + AIndexName + ''' ' + 'ORDER BY xk.keyno'; end; function TInstantMSSqlCatalog.GetSelectTablesSQL: string; begin Result := 'SELECT ' + ' name AS TABLE_NAME ' + 'FROM sysobjects ' + 'WHERE type = ''U'' ' + 'ORDER BY name'; end; procedure TInstantMSSqlCatalog.InitTableMetadatas( ATableMetadatas: TInstantTableMetadatas); begin ATableMetadatas.Clear; AddTableMetadatas(ATableMetadatas); end; (* COLUMN_NAME COLUMN_TYPENAMECOLUMN_POSITION COLUMN_TYPE COLUMN_DATATYPE COLUMN_SUBTYPE COLUMN_LENGTH COLUMN_PRECISION COLUMN_SCALE COLUMN_NULLABLE ----------------------------- ------------------------------ ----------- --------------- -------------- ------------- ---------------- ------------ --------------- Class varchar 1 0 129 167 32 32 NULL 0 Id varchar 2 0 129 167 32 32 NULL 0 UpdateCount int 3 0 3 56 4 10 0 1 StringAttr varchar 4 0 129 167 10 10 NULL 1 BlobAttr image 5 0 128 34 16 NULL NULL 1 BooleanAttr bit 6 0 11 104 1 1 0 1 CurrencyAttr money 7 0 6 60 8 19 4 1 DateTimeAttr datetime 8 0 135 61 16 23 3 1 FloatAttr float 9 0 5 62 8 53 NULL 1 GraphicAttr image 10 0 128 34 16 NULL NULL 1 IntegerAttr int 11 0 3 56 4 10 0 1 MemoAttr text 12 0 129 35 16 NULL NULL 1 ReferenceAttributeClass varchar 13 0 129 167 32 32 NULL 1 ReferenceAttributeId varchar 14 0 129 167 32 32 NULL 1 EmbeddedPartsAtttribute image 15 0 128 34 16 NULL NULL 1 EmbeddedPartAttribute image 16 0 128 34 16 NULL NULL 1 ExternalPartAttributeClass varchar 17 0 129 167 32 32 NULL 1 ExternalPartAttributeId varchar 18 0 129 167 32 32 NULL 1 EmbeddedReferencesAtttribute image 19 0 128 34 16 NULL NULL 1 *) end. |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:31
|
Update of /cvsroot/instantobjects/Source/Brokers/ADO In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Brokers/ADO Modified Files: InstantADO.pas Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. Index: InstantADO.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Brokers/ADO/InstantADO.pas,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** InstantADO.pas 17 Jun 2005 19:11:53 -0000 1.10 --- InstantADO.pas 1 Jul 2005 23:29:22 -0000 1.11 *************** *** 169,172 **** --- 169,173 ---- TInstantADOMSSQLBroker = class(TInstantSQLBroker) protected + function CreateCatalog(const AScheme: TInstantScheme): TInstantCatalog; override; function CreateResolver(Map: TInstantAttributeMap): TInstantSQLResolver; override; function GetSQLQuote: Char; override; *************** *** 174,177 **** --- 175,180 ---- procedure AssignDataSetParams(DataSet : TDataSet; AParams: TParams); override; public + function CreateDBBuildCommand( + const CommandType: TInstantDBBuildCommandType): TInstantDBBuildCommand; override; function CreateDataSet(const Statement: string; Params: TParams): TDataSet; override; function DataTypeToColumnType(DataType: TInstantDataType; Size: Integer): string; override; *************** *** 191,195 **** uses ADOInt, ComObj, InstantConsts, InstantUtils, InstantADOX, ! InstantADOConnectionDefEdit, InstantADOTools, Controls; const --- 194,198 ---- uses ADOInt, ComObj, InstantConsts, InstantUtils, InstantADOX, ! InstantADOConnectionDefEdit, InstantADOTools, Controls, InstantDBBuild, InstantMSSqlCatalog; const *************** *** 1037,1040 **** --- 1040,1049 ---- end; + function TInstantADOMSSQLBroker.CreateCatalog( + const AScheme: TInstantScheme): TInstantCatalog; + begin + Result := TInstantMSSqlCatalog.Create(AScheme, Self); + end; + function TInstantADOMSSQLBroker.CreateDataSet(const Statement: string; Params: TParams): TDataSet; *************** *** 1057,1060 **** --- 1066,1090 ---- end; + function TInstantADOMSSQLBroker.CreateDBBuildCommand( + const CommandType: TInstantDBBuildCommandType): TInstantDBBuildCommand; + begin + if CommandType = ctAddTable then + Result := TInstantDBBuildAddTableSQLCommand.Create(CommandType, Connector) + else if CommandType = ctDropTable then + Result := TInstantDBBuildDropTableSQLCommand.Create(CommandType, Connector) + else if CommandType = ctAddField then + Result := TInstantDBBuildAddFieldSQLCommand.Create(CommandType, Connector) + else if CommandType = ctAlterField then + Result := TInstantDBBuildAlterFieldSQLCommand.Create(CommandType, Connector) + else if CommandType = ctDropField then + Result := TInstantDBBuildDropFieldSQLCommand.Create(CommandType, Connector) + else if CommandType = ctAddIndex then + Result := TInstantDBBuildAddIndexSQLCommand.Create(CommandType, Connector) + else if CommandType = ctDropIndex then + Result := TInstantDBBuildDropIndexSQLCommand.Create(CommandType, Connector) + else + Result := inherited CreateDBBuildCommand(CommandType); + end; + function TInstantADOMSSQLBroker.CreateResolver( Map: TInstantAttributeMap): TInstantSQLResolver; |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:31
|
Update of /cvsroot/instantobjects/Source/Brokers/ADO/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Brokers/ADO/D7 Modified Files: IOADO.dpk Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. Index: IOADO.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Brokers/ADO/D7/IOADO.dpk,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** IOADO.dpk 17 Jun 2005 19:16:46 -0000 1.2 --- IOADO.dpk 1 Jul 2005 23:29:22 -0000 1.3 *************** *** 32,36 **** vcldb, adortl, ! IOCore; contains --- 32,37 ---- vcldb, adortl, ! IOCore, ! IOMSSqlCatalog; contains |
From: Carlo B. <car...@us...> - 2005-07-01 23:29:31
|
Update of /cvsroot/instantobjects/Source/Brokers/DBX/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1981/Source/Brokers/DBX/D7 Modified Files: IODBX.dpk Log Message: Added MS-SQL catalog support for dbevolver and changed DBX and ADO brokers to use it. Index: IODBX.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Brokers/DBX/D7/IODBX.dpk,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** IODBX.dpk 17 Jun 2005 19:55:19 -0000 1.2 --- IODBX.dpk 1 Jul 2005 23:29:22 -0000 1.3 *************** *** 34,38 **** dbexpress, IOCore, ! IOIBFbCatalog; contains --- 34,39 ---- dbexpress, IOCore, ! IOIBFbCatalog, ! IOMSSqlCatalog; contains |
From: Carlo B. <car...@us...> - 2005-07-01 23:28:05
|
Update of /cvsroot/instantobjects/Source/Catalogs/MSSql/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1251/D7 Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/MSSql/D7 added to the repository |
From: Carlo B. <car...@us...> - 2005-07-01 23:27:56
|
Update of /cvsroot/instantobjects/Source/Catalogs/MSSql In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1224/MSSql Log Message: Directory /cvsroot/instantobjects/Source/Catalogs/MSSql added to the repository |
Update of /cvsroot/instantobjects/Demos/EvolveTest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv716/Demos/EvolveTest Added Files: EvolveTest.cfg EvolveTest.dof EvolveTest.dpr EvolveTest.res FMainEvolveTest.dfm FMainEvolveTest.pas Model.pas Log Message: Added Demo to Test db evolver. --- NEW FILE: EvolveTest.dpr --- program EvolveTest; uses Forms, FMainEvolveTest in 'FMainEvolveTest.pas' {EvolverTestForm}, Model in 'Model.pas'; {$R *.res} {$R *.mdr} {Model} begin Application.Initialize; Application.CreateForm(TEvolverTestForm, EvolverTestForm); Application.Run; end. --- NEW FILE: Model.pas --- unit Model; interface uses InstantPersistence; type TEmbeddedPartClass = class; TEmbeddedPartsClass = class; TEmbeddedReferencesClass = class; TExternalPartClass = class; TExternalPartsClass = class; TExternalReferencesClass = class; TMasterClass = class; TReferenceClass = class; TMasterClass = class(TInstantObject) {IOMETADATA stored; StringAttribute: String(10) stored 'StringAttr'; BlobAttribute: Blob stored 'BlobAttr'; BooleanAttribute: Boolean stored 'BooleanAttr'; CurrencyAttribute: Currency stored 'CurrencyAttr'; DateTimeAttribute: DateTime stored 'DateTimeAttr'; FloatAttribute: Float stored 'FloatAttr'; GraphicAttribute: Graphic stored 'GraphicAttr'; IntegerAttribute: Integer stored 'IntegerAttr'; MemoAttribute: Memo stored 'MemoAttr'; ReferenceAttribute: Reference(TReferenceClass); EmbeddedPartsAtttribute: Parts(TEmbeddedPartsClass); ExternalPartsAttribute: Parts(TExternalPartsClass) external 'MC_ExtPartsAttr'; EmbeddedPartAttribute: Part(TEmbeddedPartClass); ExternalPartAttribute: Part(TExternalPartClass) external; EmbeddedReferencesAtttribute: References(TEmbeddedReferencesClass) stored 'EmbRefsAtttr'; ExternalReferencesAttributes: References(TExternalReferencesClass) external 'MC_ExtRefsAttr'; } _BlobAttribute: TInstantBlob; _BooleanAttribute: TInstantBoolean; _CurrencyAttribute: TInstantCurrency; _DateTimeAttribute: TInstantDateTime; _EmbeddedReferencesAtttribute: TInstantReferences; _ExternalPartAttribute: TInstantPart; _ExternalPartsAttribute: TInstantParts; _ExternalReferencesAttributes: TInstantReferences; _FloatAttribute: TInstantFloat; _GraphicAttribute: TInstantGraphic; _IntegerAttribute: TInstantInteger; _EmbeddedPartAttribute: TInstantPart; _EmbeddedPartsAtttribute: TInstantParts; _MemoAttribute: TInstantMemo; _StringAttribute: TInstantString; _ReferenceAttribute: TInstantReference; private function GetBlobAttribute: string; function GetBooleanAttribute: Boolean; function GetCurrencyAttribute: Currency; function GetDateTimeAttribute: TDateTime; function GetEmbeddedReferencesAtttribute(Index: Integer): TEmbeddedReferencesClass; function GetEmbeddedReferencesAtttributeCount: Integer; function GetExternalPartAttribute: TExternalPartClass; function GetExternalPartsAttribute(Index: Integer): TExternalPartsClass; function GetExternalPartsAttributeCount: Integer; function GetExternalReferencesAttributeCount: Integer; function GetExternalReferencesAttributes(Index: Integer): TExternalReferencesClass; function GetFloatAttribute: Double; function GetGraphicAttribute: string; function GetIntegerAttribute: Integer; function GetInternalPartsAtttributeCount: Integer; function GetEmbeddedPartAttribute: TEmbeddedPartClass; function GetEmbeddedPartsAtttribute(Index: Integer): TEmbeddedPartsClass; function GetMemoAttribute: string; function GetStringAttribute: string; function GetReferenceAttribute: TReferenceClass; procedure SetBlobAttribute(const Value: string); procedure SetBooleanAttribute(Value: Boolean); procedure SetCurrencyAttribute(Value: Currency); procedure SetDateTimeAttribute(Value: TDateTime); procedure SetEmbeddedReferencesAtttribute(Index: Integer; Value: TEmbeddedReferencesClass); procedure SetExternalPartAttribute(Value: TExternalPartClass); procedure SetExternalPartsAttribute(Index: Integer; Value: TExternalPartsClass); procedure SetExternalReferencesAttributes(Index: Integer; Value: TExternalReferencesClass); procedure SetFloatAttribute(Value: Double); procedure SetGraphicAttribute(const Value: string); procedure SetIntegerAttribute(Value: Integer); procedure SetEmbeddedPartAttribute(Value: TEmbeddedPartClass); procedure SetEmbeddedPartsAtttribute(Index: Integer; Value: TEmbeddedPartsClass); procedure SetMemoAttribute(const Value: string); procedure SetStringAttribute(const Value: string); procedure SetReferenceAttribute(Value: TReferenceClass); public function AddEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; function AddExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; function AddExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; function AddInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; procedure ClearEmbeddedPartsAtttribute; procedure ClearEmbeddedReferencesAtttribute; procedure ClearExternalPartsAttribute; procedure ClearExternalReferencesAttributes; procedure DeleteEmbeddedReferencesAtttribute(Index: Integer); procedure DeleteExternalPartsAttribute(Index: Integer); procedure DeleteExternalReferencesAttribute(Index: Integer); procedure DeleteInternalPartsAtttribute(Index: Integer); function IndexOfEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; function IndexOfExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; function IndexOfExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; function IndexOfInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; procedure InsertEmbeddedReferencesAtttribute(Index: Integer; EmbeddedReferencesAtttribute: TEmbeddedReferencesClass); procedure InsertExternalPartsAttribute(Index: Integer; ExternalPartsAttribute: TExternalPartsClass); procedure InsertExternalReferencesAttribute(Index: Integer; ExternalReferencesAttribute: TExternalReferencesClass); procedure InsertInternalPartsAtttribute(Index: Integer; InternalPartsAtttribute: TEmbeddedPartsClass); function RemoveEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; function RemoveExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; function RemoveExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; function RemoveInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; property EmbeddedReferencesAtttribute[Index: Integer]: TEmbeddedReferencesClass read GetEmbeddedReferencesAtttribute write SetEmbeddedReferencesAtttribute; property EmbeddedReferencesAtttributeCount: Integer read GetEmbeddedReferencesAtttributeCount; property ExternalPartsAttribute[Index: Integer]: TExternalPartsClass read GetExternalPartsAttribute write SetExternalPartsAttribute; property ExternalPartsAttributeCount: Integer read GetExternalPartsAttributeCount; property ExternalReferencesAttributeCount: Integer read GetExternalReferencesAttributeCount; property ExternalReferencesAttributes[Index: Integer]: TExternalReferencesClass read GetExternalReferencesAttributes write SetExternalReferencesAttributes; property InternalPartsAtttributeCount: Integer read GetInternalPartsAtttributeCount; property EmbeddedPartsAtttribute[Index: Integer]: TEmbeddedPartsClass read GetEmbeddedPartsAtttribute write SetEmbeddedPartsAtttribute; published property BlobAttribute: string read GetBlobAttribute write SetBlobAttribute; property BooleanAttribute: Boolean read GetBooleanAttribute write SetBooleanAttribute; property CurrencyAttribute: Currency read GetCurrencyAttribute write SetCurrencyAttribute; property DateTimeAttribute: TDateTime read GetDateTimeAttribute write SetDateTimeAttribute; property EmbeddedPartAttribute: TEmbeddedPartClass read GetEmbeddedPartAttribute write SetEmbeddedPartAttribute; property ExternalPartAttribute: TExternalPartClass read GetExternalPartAttribute write SetExternalPartAttribute; property FloatAttribute: Double read GetFloatAttribute write SetFloatAttribute; property GraphicAttribute: string read GetGraphicAttribute write SetGraphicAttribute; property IntegerAttribute: Integer read GetIntegerAttribute write SetIntegerAttribute; property MemoAttribute: string read GetMemoAttribute write SetMemoAttribute; property StringAttribute: string read GetStringAttribute write SetStringAttribute; property ReferenceAttribute: TReferenceClass read GetReferenceAttribute write SetReferenceAttribute; end; TReferenceClass = class(TInstantObject) {IOMETADATA stored; DescriptionAtttribute: String(20); } _DescriptionAtttribute: TInstantString; private function GetDescriptionAtttribute: string; procedure SetDescriptionAtttribute(const Value: string); published property DescriptionAtttribute: string read GetDescriptionAtttribute write SetDescriptionAtttribute; end; TEmbeddedPartsClass = class(TInstantObject) {IOMETADATA DescriptionAtttributes: String(20); } _DescriptionAtttributes: TInstantString; private function GetDescriptionAtttributes: string; procedure SetDescriptionAtttributes(const Value: string); published property DescriptionAtttributes: string read GetDescriptionAtttributes write SetDescriptionAtttributes; end; TExternalPartsClass = class(TInstantObject) {IOMETADATA stored; Description: String(20); } _Description: TInstantString; private function GetDescription: string; procedure SetDescription(const Value: string); published property Description: string read GetDescription write SetDescription; end; TEmbeddedPartClass = class(TInstantObject) {IOMETADATA Description: String(20); } _Description: TInstantString; private function GetDescription: string; procedure SetDescription(const Value: string); published property Description: string read GetDescription write SetDescription; end; TExternalPartClass = class(TInstantObject) {IOMETADATA stored; Description: String(20); } _Description: TInstantString; private function GetDescription: string; procedure SetDescription(const Value: string); published property Description: string read GetDescription write SetDescription; end; TEmbeddedReferencesClass = class(TInstantObject) {IOMETADATA stored; Description: String(20); } _Description: TInstantString; private function GetDescription: string; procedure SetDescription(const Value: string); published property Description: string read GetDescription write SetDescription; end; TExternalReferencesClass = class(TInstantObject) {IOMETADATA stored; Description: String(20); } _Description: TInstantString; private function GetDescription: string; procedure SetDescription(const Value: string); published property Description: string read GetDescription write SetDescription; end; implementation { TMasterClass } function TMasterClass.AddEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; begin Result := _EmbeddedReferencesAtttribute.Add(EmbeddedReferencesAtttribute); end; function TMasterClass.AddExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; begin Result := _ExternalPartsAttribute.Add(ExternalPartsAttribute); end; function TMasterClass.AddExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; begin Result := _ExternalReferencesAttributes.Add(ExternalReferencesAttribute); end; function TMasterClass.AddInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; begin Result := _EmbeddedPartsAtttribute.Add(InternalPartsAtttribute); end; procedure TMasterClass.ClearEmbeddedPartsAtttribute; begin _EmbeddedPartsAtttribute.Clear; end; procedure TMasterClass.ClearEmbeddedReferencesAtttribute; begin _EmbeddedReferencesAtttribute.Clear; end; procedure TMasterClass.ClearExternalPartsAttribute; begin _ExternalPartsAttribute.Clear; end; procedure TMasterClass.ClearExternalReferencesAttributes; begin _ExternalReferencesAttributes.Clear; end; procedure TMasterClass.DeleteEmbeddedReferencesAtttribute(Index: Integer); begin _EmbeddedReferencesAtttribute.Delete(Index); end; procedure TMasterClass.DeleteExternalPartsAttribute(Index: Integer); begin _ExternalPartsAttribute.Delete(Index); end; procedure TMasterClass.DeleteExternalReferencesAttribute(Index: Integer); begin _ExternalReferencesAttributes.Delete(Index); end; procedure TMasterClass.DeleteInternalPartsAtttribute(Index: Integer); begin _EmbeddedPartsAtttribute.Delete(Index); end; function TMasterClass.GetBlobAttribute: string; begin Result := _BlobAttribute.Value; end; function TMasterClass.GetBooleanAttribute: Boolean; begin Result := _BooleanAttribute.Value; end; function TMasterClass.GetCurrencyAttribute: Currency; begin Result := _CurrencyAttribute.Value; end; function TMasterClass.GetDateTimeAttribute: TDateTime; begin Result := _DateTimeAttribute.Value; end; function TMasterClass.GetEmbeddedReferencesAtttribute(Index: Integer): TEmbeddedReferencesClass; begin Result := _EmbeddedReferencesAtttribute[Index] as TEmbeddedReferencesClass; end; function TMasterClass.GetEmbeddedReferencesAtttributeCount: Integer; begin Result := _EmbeddedReferencesAtttribute.Count; end; function TMasterClass.GetExternalPartAttribute: TExternalPartClass; begin Result := _ExternalPartAttribute.Value as TExternalPartClass; end; function TMasterClass.GetExternalPartsAttribute(Index: Integer): TExternalPartsClass; begin Result := _ExternalPartsAttribute[Index] as TExternalPartsClass; end; function TMasterClass.GetExternalPartsAttributeCount: Integer; begin Result := _ExternalPartsAttribute.Count; end; function TMasterClass.GetExternalReferencesAttributeCount: Integer; begin Result := _ExternalReferencesAttributes.Count; end; function TMasterClass.GetExternalReferencesAttributes(Index: Integer): TExternalReferencesClass; begin Result := _ExternalReferencesAttributes[Index] as TExternalReferencesClass; end; function TMasterClass.GetFloatAttribute: Double; begin Result := _FloatAttribute.Value; end; function TMasterClass.GetGraphicAttribute: string; begin Result := _GraphicAttribute.Value; end; function TMasterClass.GetIntegerAttribute: Integer; begin Result := _IntegerAttribute.Value; end; function TMasterClass.GetInternalPartsAtttributeCount: Integer; begin Result := _EmbeddedPartsAtttribute.Count; end; function TMasterClass.GetEmbeddedPartAttribute: TEmbeddedPartClass; begin Result := _EmbeddedPartAttribute.Value as TEmbeddedPartClass; end; function TMasterClass.GetEmbeddedPartsAtttribute(Index: Integer): TEmbeddedPartsClass; begin Result := _EmbeddedPartsAtttribute[Index] as TEmbeddedPartsClass; end; function TMasterClass.GetMemoAttribute: string; begin Result := _MemoAttribute.Value; end; function TMasterClass.GetStringAttribute: string; begin Result := _StringAttribute.Value; end; function TMasterClass.GetReferenceAttribute: TReferenceClass; begin Result := _ReferenceAttribute.Value as TReferenceClass; end; function TMasterClass.IndexOfEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; begin Result := _EmbeddedReferencesAtttribute.IndexOf(EmbeddedReferencesAtttribute); end; function TMasterClass.IndexOfExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; begin Result := _ExternalPartsAttribute.IndexOf(ExternalPartsAttribute); end; function TMasterClass.IndexOfExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; begin Result := _ExternalReferencesAttributes.IndexOf(ExternalReferencesAttribute); end; function TMasterClass.IndexOfInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; begin Result := _EmbeddedPartsAtttribute.IndexOf(InternalPartsAtttribute); end; procedure TMasterClass.InsertEmbeddedReferencesAtttribute(Index: Integer; EmbeddedReferencesAtttribute: TEmbeddedReferencesClass); begin _EmbeddedReferencesAtttribute.Insert(Index, EmbeddedReferencesAtttribute); end; procedure TMasterClass.InsertExternalPartsAttribute(Index: Integer; ExternalPartsAttribute: TExternalPartsClass); begin _ExternalPartsAttribute.Insert(Index, ExternalPartsAttribute); end; procedure TMasterClass.InsertExternalReferencesAttribute(Index: Integer; ExternalReferencesAttribute: TExternalReferencesClass); begin _ExternalReferencesAttributes.Insert(Index, ExternalReferencesAttribute); end; procedure TMasterClass.InsertInternalPartsAtttribute(Index: Integer; InternalPartsAtttribute: TEmbeddedPartsClass); begin _EmbeddedPartsAtttribute.Insert(Index, InternalPartsAtttribute); end; function TMasterClass.RemoveEmbeddedReferencesAtttribute(EmbeddedReferencesAtttribute: TEmbeddedReferencesClass): Integer; begin Result := _EmbeddedReferencesAtttribute.Remove(EmbeddedReferencesAtttribute); end; function TMasterClass.RemoveExternalPartsAttribute(ExternalPartsAttribute: TExternalPartsClass): Integer; begin Result := _ExternalPartsAttribute.Remove(ExternalPartsAttribute); end; function TMasterClass.RemoveExternalReferencesAttribute(ExternalReferencesAttribute: TExternalReferencesClass): Integer; begin Result := _ExternalReferencesAttributes.Remove(ExternalReferencesAttribute); end; function TMasterClass.RemoveInternalPartsAtttribute(InternalPartsAtttribute: TEmbeddedPartsClass): Integer; begin Result := _EmbeddedPartsAtttribute.Remove(InternalPartsAtttribute); end; procedure TMasterClass.SetBlobAttribute(const Value: string); begin _BlobAttribute.Value := Value; end; procedure TMasterClass.SetBooleanAttribute(Value: Boolean); begin _BooleanAttribute.Value := Value; end; procedure TMasterClass.SetCurrencyAttribute(Value: Currency); begin _CurrencyAttribute.Value := Value; end; procedure TMasterClass.SetDateTimeAttribute(Value: TDateTime); begin _DateTimeAttribute.Value := Value; end; procedure TMasterClass.SetEmbeddedReferencesAtttribute(Index: Integer; Value: TEmbeddedReferencesClass); begin _EmbeddedReferencesAtttribute[Index] := Value; end; procedure TMasterClass.SetExternalPartAttribute(Value: TExternalPartClass); begin _ExternalPartAttribute.Value := Value; end; procedure TMasterClass.SetExternalPartsAttribute(Index: Integer; Value: TExternalPartsClass); begin _ExternalPartsAttribute[Index] := Value; end; procedure TMasterClass.SetExternalReferencesAttributes(Index: Integer; Value: TExternalReferencesClass); begin _ExternalReferencesAttributes[Index] := Value; end; procedure TMasterClass.SetFloatAttribute(Value: Double); begin _FloatAttribute.Value := Value; end; procedure TMasterClass.SetGraphicAttribute(const Value: string); begin _GraphicAttribute.Value := Value; end; procedure TMasterClass.SetIntegerAttribute(Value: Integer); begin _IntegerAttribute.Value := Value; end; procedure TMasterClass.SetEmbeddedPartAttribute(Value: TEmbeddedPartClass); begin _EmbeddedPartAttribute.Value := Value; end; procedure TMasterClass.SetEmbeddedPartsAtttribute(Index: Integer; Value: TEmbeddedPartsClass); begin _EmbeddedPartsAtttribute[Index] := Value; end; procedure TMasterClass.SetMemoAttribute(const Value: string); begin _MemoAttribute.Value := Value; end; procedure TMasterClass.SetStringAttribute(const Value: string); begin _StringAttribute.Value := Value; end; procedure TMasterClass.SetReferenceAttribute(Value: TReferenceClass); begin _ReferenceAttribute.Value := Value; end; { TReferenceClass } function TReferenceClass.GetDescriptionAtttribute: string; begin Result := _DescriptionAtttribute.Value; end; procedure TReferenceClass.SetDescriptionAtttribute(const Value: string); begin _DescriptionAtttribute.Value := Value; end; { TEmbeddedPartsClass } function TEmbeddedPartsClass.GetDescriptionAtttributes: string; begin Result := _DescriptionAtttributes.Value; end; procedure TEmbeddedPartsClass.SetDescriptionAtttributes(const Value: string); begin _DescriptionAtttributes.Value := Value; end; { TExternalPartsClass } function TExternalPartsClass.GetDescription: string; begin Result := _Description.Value; end; procedure TExternalPartsClass.SetDescription(const Value: string); begin _Description.Value := Value; end; { TEmbeddedPartClass } function TEmbeddedPartClass.GetDescription: string; begin Result := _Description.Value; end; procedure TEmbeddedPartClass.SetDescription(const Value: string); begin _Description.Value := Value; end; { TExternalPartClass } function TExternalPartClass.GetDescription: string; begin Result := _Description.Value; end; procedure TExternalPartClass.SetDescription(const Value: string); begin _Description.Value := Value; end; { TEmbeddedReferencesClass } function TEmbeddedReferencesClass.GetDescription: string; begin Result := _Description.Value; end; procedure TEmbeddedReferencesClass.SetDescription(const Value: string); begin _Description.Value := Value; end; { TExternalReferencesClass } function TExternalReferencesClass.GetDescription: string; begin Result := _Description.Value; end; procedure TExternalReferencesClass.SetDescription(const Value: string); begin _Description.Value := Value; end; initialization InstantRegisterClasses([ TEmbeddedPartClass, TEmbeddedPartsClass, TEmbeddedReferencesClass, TExternalPartClass, TExternalPartsClass, TExternalReferencesClass, TMasterClass, TReferenceClass ]); end. --- NEW FILE: FMainEvolveTest.pas --- unit FMainEvolveTest; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, InstantConnectionManager, Menus, ActnList, InstantPersistence, DB, InstantPresentation, Grids, DBGrids, DBActns, ImgList, ComCtrls, ToolWin; type TEvolverTestForm = class(TForm) connectionManager: TInstantConnectionManager; ActionList: TActionList; acntConnectionManager: TAction; MainMenu: TMainMenu; miFile: TMenuItem; ConnectionManager1: TMenuItem; MCSelector: TInstantSelector; MCDataSource: TDataSource; DBGrid1: TDBGrid; MCSelectorBlobAttribute: TBlobField; MCSelectorBooleanAttribute: TBooleanField; MCSelectorCurrencyAttribute: TBCDField; MCSelectorDateTimeAttribute: TDateTimeField; MCSelectorEmbeddedPartAttributeDescription: TStringField; MCSelectorEmbeddedPartsAtttribute: TDataSetField; MCSelectorEmbeddedReferencesAtttribute: TDataSetField; MCSelectorExternalPartAttributeDescription: TStringField; MCSelectorExternalPartsAttribute: TDataSetField; MCSelectorExternalReferencesAttributes: TDataSetField; MCSelectorFloatAttribute: TFloatField; MCSelectorGraphicAttribute: TBlobField; MCSelectorIntegerAttribute: TIntegerField; MCSelectorMemoAttribute: TMemoField; MCSelectorReferenceAttributeDescriptionAtttribute: TStringField; MCSelectorStringAttribute: TStringField; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ImageList: TImageList; DataSetFirst1: TDataSetFirst; DataSetPrior1: TDataSetPrior; DataSetNext1: TDataSetNext; DataSetLast1: TDataSetLast; DataSetInsert1: TDataSetInsert; DataSetDelete1: TDataSetDelete; DataSetEdit1: TDataSetEdit; DatasetPost1: TDataSetPost; DataSetCancel1: TDataSetCancel; DataSetRefresh1: TDataSetRefresh; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton9: TToolButton; ToolButton10: TToolButton; ToolButton11: TToolButton; ToolButton12: TToolButton; ToolButton13: TToolButton; Edit1: TMenuItem; Insert1: TMenuItem; Edit2: TMenuItem; Delete1: TMenuItem; N1: TMenuItem; Store1: TMenuItem; Cancel1: TMenuItem; Move1: TMenuItem; First1: TMenuItem; Prior1: TMenuItem; Next1: TMenuItem; Last1: TMenuItem; procedure acntConnectionManagerExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure connectionManagerConnect(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); procedure connectionManagerDisconnect(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); procedure connectionManagerIsConnected(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); private FConnectionDef: TInstantConnectionDef; FConnector: TInstantConnector; procedure OpenData; procedure CloseData; public procedure Connect; procedure Disconnect; end; var EvolverTestForm: TEvolverTestForm; implementation {$R *.dfm} uses InstantIBX, InstantUIB, InstantDBX, InstantADO, InstantConnectionManagerForm; var BusySaveCursor: TCursor; BusyCount: Integer; procedure BeginBusy; begin if BusyCount = 0 then begin BusySaveCursor := Screen.Cursor; Screen.Cursor := crHourglass; end; Inc(BusyCount); end; procedure EndBusy; begin if BusyCount > 0 then begin Dec(BusyCount); if BusyCount = 0 then Screen.Cursor := BusySaveCursor; end; end; procedure TEvolverTestForm.acntConnectionManagerExecute(Sender: TObject); begin ConnectionManager.Execute; end; procedure TEvolverTestForm.FormCreate(Sender: TObject); begin ConnectionManager.FileName := ChangeFileExt(Application.ExeName,'.con'); end; procedure TEvolverTestForm.connectionManagerConnect(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); begin Application.ProcessMessages; Disconnect; FConnector := ConnectionDef.CreateConnector(Self); try FConnector.IsDefault := True; FConnectionDef := ConnectionDef; Connect; Result := True; except FConnectionDef := nil; FreeAndNil(FConnector); raise; end; end; procedure TEvolverTestForm.connectionManagerDisconnect(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); begin Disconnect; Result := True; end; procedure TEvolverTestForm.connectionManagerIsConnected(Sender: TObject; var ConnectionDef: TInstantConnectionDef; var Result: Boolean); begin Result := ConnectionDef = FConnectionDef; end; procedure TEvolverTestForm.Connect; begin if not Assigned(FConnector) then Exit; BeginBusy; try FConnector.Connect; OpenData; finally EndBusy; end; end; procedure TEvolverTestForm.Disconnect; begin BeginBusy; try if Assigned(FConnector) then begin CloseData; FConnector.Disconnect; FreeAndNil(FConnector); end; FConnectionDef := nil; finally EndBusy; end; end; procedure TEvolverTestForm.CloseData; begin MCSelector.Close; end; procedure TEvolverTestForm.OpenData; begin MCSelector.Open; end; end. --- NEW FILE: EvolveTest.dof --- [FileVersion] Version=7.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=0 P=1 Q=1 R=1 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases= NamespacePrefix= SymbolDeprecated=1 SymbolLibrary=1 SymbolPlatform=1 UnitLibrary=1 UnitPlatform=1 UnitDeprecated=1 HResultCompat=1 HidingMember=1 HiddenVirtual=1 Garbage=1 BoundsError=1 ZeroNilCompat=1 StringConstTruncated=1 ForLoopVarVarPar=1 TypedConstVarPar=1 AsgToTypedConst=1 CaseLabelRange=1 ForVariable=1 ConstructingAbstract=1 ComparisonFalse=1 ComparisonTrue=1 ComparingSignedUnsigned=1 CombiningSignedUnsigned=1 UnsupportedConstruct=1 FileOpen=1 FileOpenUnitSrc=1 BadGlobalSymbol=1 DuplicateConstructorDestructor=1 InvalidDirective=1 PackageNoLink=1 PackageThreadVar=1 ImplicitImport=1 HPPEMITIgnored=1 NoRetVal=1 UseBeforeDef=1 ForLoopVarUndef=1 UnitNameMismatch=1 NoCFGFileFound=1 MessageDirective=1 ImplicitVariants=1 UnicodeToLocale=1 LocaleToUnicode=1 ImagebaseMultiple=1 SuspiciousTypecast=1 PrivatePropAccessor=1 UnsafeType=0 UnsafeCode=0 UnsafeCast=0 [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription=*** CBVCL Package Delphi 7: VCL components *** [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath=$(DELPHI)\Lib\Debug Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclaxserver;rbTDBC61;rbRCL66;rbCIDE66;rbIDE66;rbBDE66;rbRIDE66;rbRAP66;rbDBDE66;rbDAD66;rbDIDE66;rbUSER66;rbDB66;rbADO66;rbDBE66;rbIBE66;dxEdtrD6;dxcomnd6;EQTLD6;ECQDBCD6;EQDBTLD6;EQGridD6;dxGrEdD6;dxExELD6;dxELibD6;ioibx60;iobde60;ioado60;vclactnband;libxml2D7;CBLiscor;rbRCL77;dxEdtrD7;rbDB77;dxComnD7;CBBde2Dbx;IOCore;IOXML;IOUIB;IOIBX;IODBX;IOBDE;IOADO;DBXLISCOR70CL;DBXLSFORMS70CL Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication= Launcher= UseLauncher=0 DebugCWD= [Language] ActiveLang= ProjectLang= RootDir=C:\Programmi\Borland\Delphi7\Bin\ [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1040 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright=Carlo Barazzetta LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Excluded Packages] C:\Programmi\Borland\Delphi7\Projects\Bpl\DclIOUIB_D7.bpl=InstantObjects UIB Design-Time Support (Delphi 7) c:\programmi\borland\delphi7\Projects\Bpl\CBXslFop70.bpl=*** XSLFOP Package Delphi 7: XSL & FOP utilities *** C:\Programmi\Borland\Delphi7\Projects\Bpl\CBCommon70.bpl=*** CB common Package Delphi 7: multi-platform components *** C:\Programmi\Borland\Delphi7\Projects\Bpl\CBVCL70.bpl=*** CBVCL Package Delphi 7: VCL components *** c:\programmi\borland\delphi7\Projects\Bpl\dclInstantBDExpress.bpl=* Ethea-InstantBDExpress components-DesignTime Package * c:\programmi\borland\delphi7\Projects\Bpl\CBCLX70.bpl=*** CBCLX Package Delphi 7: CLX components *** c:\programmi\borland\delphi7\Projects\Bpl\CBRBuilderVCL.bpl=*** CBRBuilderVCL ReportBuilder VCL Support *** c:\programmi\borland\delphi7\Projects\Bpl\OOoPackage70.bpl=* Ethea - OpenOffice.org Components * c:\programmi\borland\delphi7\Projects\Bpl\CBDesign70.bpl=*** Design-time property-editors Delphi 7 per CBVCL *** C:\WINDOWS\system32\rbIBE77.bpl=ReportBuilder Data Access for Interbase Express [HistoryLists\hlSearchPath] Count=1 Item0=$(DELPHI)\Lib\Debug --- NEW FILE: EvolveTest.res --- (This appears to be a binary file; contents omitted.) --- NEW FILE: FMainEvolveTest.dfm --- object EvolverTestForm: TEvolverTestForm Left = 513 Top = 187 Width = 631 Height = 460 Caption = 'Evolve Test' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Menu = MainMenu OldCreateOrder = False Position = poScreenCenter OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid [...2049 lines suppressed...] F80F0000FC7F8FFFFF8F8001FE7FFFFF81FFFFFFFFFFFFFF801F1F9FC1FF8000 800F008F801F8000800700078003800080070003800380008007000080018000 8003000180018000800300038000800080030001800080008001000180008000 800000008007800083C30000C0078000FFC3000FE01F8000FC07000FF03F8000 FC0FC03FFFFF8000FF3FFFFFFFFFFFFFFFFFFFFFF93FFFFFFF9FF9FFE007C001 FF0FF0FFC0018001FE0FF07F80018001FC0FF03F80038001F80FF01F80038001 F00FF00F80038001E00FF00780038001E00FF00780038001E00FF007E0078001 F00FF00FE01F8001F80FF01FE03F8001FC0FF03FE03F8001FE0FF07FC03F8003 FF0FF0FFC07FFFFFFF9FF9FF807FFFFFFFFFF801FFFF8003E001F801FC018003 8001F801C00180038001F801800180038001800180018003C001800180018003 E001800180018003E001800180018003E001800180018003E001800180018003 E001800180038003E001800380078003E001803F80078003E001803F80078003 E003803FC0078007E007807FF83FFFFFFFFFFFFFFFFFFFFF0FFFC003C003C003 07FFC003C003C00003FFC003C003800081FFC003C0038000C1FFC003C0038003 E003C003C003C003F001C003C003C003F801C003C003C003F801C003C003C003 F801C003C003C003F801C003C003C003F801C003C003C003F801C003C0038003 F801C003C0038003FC03C007C007800700000000000000000000000000000000 000000000000} end end --- NEW FILE: EvolveTest.cfg --- -$A8 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O- -$P+ -$Q+ -$R+ -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\programmi\borland\delphi7\Projects\Bpl" -LN"c:\programmi\borland\delphi7\Projects\Bpl" -U"c:\programmi\borland\delphi7\Lib\Debug" -O"c:\programmi\borland\delphi7\Lib\Debug" -I"c:\programmi\borland\delphi7\Lib\Debug" -R"c:\programmi\borland\delphi7\Lib\Debug" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST |
From: Carlo B. <car...@us...> - 2005-07-01 23:25:24
|
Update of /cvsroot/instantobjects/Demos/EvolveTest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32410/EvolveTest Log Message: Directory /cvsroot/instantobjects/Demos/EvolveTest added to the repository |
From: Nando D. <na...@us...> - 2005-06-30 08:49:44
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32480/Core Modified Files: InstantConnectionManager.pas Log Message: Ability to customize loading and saving connectiondefs: retouch Index: InstantConnectionManager.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConnectionManager.pas,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** InstantConnectionManager.pas 26 Jun 2005 14:28:20 -0000 1.15 --- InstantConnectionManager.pas 30 Jun 2005 08:49:35 -0000 1.16 *************** *** 82,87 **** function GetConnectionDefs: TInstantConnectionDefs; function GetModel: TInstantModel; - procedure SetFileName(const Value: string); procedure SetFileFormat(const Value: TInstantStreamFormat); procedure SetModel(Value: TInstantModel); procedure SetOnBuild(Value: TInstantConnectionDefEvent); --- 82,87 ---- function GetConnectionDefs: TInstantConnectionDefs; function GetModel: TInstantModel; procedure SetFileFormat(const Value: TInstantStreamFormat); + procedure SetFileName(const Value: string); procedure SetModel(Value: TInstantModel); procedure SetOnBuild(Value: TInstantConnectionDefEvent); *************** *** 96,99 **** --- 96,109 ---- function GetDefsFileName: string; protected + // Sets FileFormat based on FileName. + procedure SetFileFormatFromFileName; + // Called when FileName changes. The default implementation calls + // SetFileFormatFromFileName and LoadConnectionDefs to auto-load the + // connection definitions. + // This method may be overridden to skip auto-loading in cases where + // more than just the file name is needed in order to call + // LoadConnectionDefs. + procedure AfterFileNameChange; virtual; + // Fully qualified FileName. property DefsFileName: string read GetDefsFileName; // Creates and returns a stream to read the connectiondefs data from. *************** *** 181,193 **** if Value <> FFileName then begin - if SameText(ExtractFileExt(Value), '.xml') then - FFileFormat := sfXML - else - FFileFormat := sfBinary; FFileName := Value; ! LoadConnectionDefs; end; end; procedure TInstantConnectionManager.SetFileFormat( const Value: TInstantStreamFormat); --- 191,213 ---- if Value <> FFileName then begin FFileName := Value; ! AfterFileNameChange; end; end; + procedure TInstantConnectionManager.SetFileFormatFromFileName; + begin + if SameText(ExtractFileExt(FFileName), '.xml') then + FFileFormat := sfXML + else + FFileFormat := sfBinary; + end; + + procedure TInstantConnectionManager.AfterFileNameChange; + begin + SetFileFormatFromFileName; + LoadConnectionDefs; + end; + procedure TInstantConnectionManager.SetFileFormat( const Value: TInstantStreamFormat); |
From: Nando D. <na...@us...> - 2005-06-28 10:13:58
|
Update of /cvsroot/instantobjects/Source/Core/D7 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7153/Core/D7 Modified Files: IOCore.cfg IOCore.dof IOCore.dpk Log Message: Design time support for database evolution Index: IOCore.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D7/IOCore.dpk,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** IOCore.dpk 18 Jun 2005 09:49:08 -0000 1.5 --- IOCore.dpk 28 Jun 2005 10:13:47 -0000 1.6 *************** *** 31,35 **** vcl, vcldb, ! rtl; contains --- 31,36 ---- vcl, vcldb, ! rtl, ! dbrtl; contains *************** *** 51,55 **** InstantPump in '..\InstantPump.pas', InstantDBBuild in '..\InstantDBBuild.pas', ! InstantDBEvolution in '..\InstantDBEvolution.pas'; end. --- 52,57 ---- InstantPump in '..\InstantPump.pas', InstantDBBuild in '..\InstantDBBuild.pas', ! InstantDBEvolution in '..\InstantDBEvolution.pas', ! InstantDBEvolverForm in '..\InstantDBEvolverForm.pas' {InstantDBEvolverForm}; end. Index: IOCore.cfg =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D7/IOCore.cfg,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** IOCore.cfg 18 Jun 2005 09:49:53 -0000 1.3 --- IOCore.cfg 28 Jun 2005 10:13:46 -0000 1.4 *************** *** 35,36 **** --- 35,39 ---- -LN"c:\programmi\borland\delphi7\Projects\Bpl" -Z + -w-UNSAFE_TYPE + -w-UNSAFE_CODE + -w-UNSAFE_CAST Index: IOCore.dof =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D7/IOCore.dof,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** IOCore.dof 18 Jun 2005 09:49:53 -0000 1.6 --- IOCore.dof 28 Jun 2005 10:13:46 -0000 1.7 *************** *** 77,83 **** SuspiciousTypecast=1 PrivatePropAccessor=1 ! UnsafeType=1 ! UnsafeCode=1 ! UnsafeCast=1 [Linker] MapFile=0 --- 77,83 ---- SuspiciousTypecast=1 PrivatePropAccessor=1 ! UnsafeType=0 ! UnsafeCode=0 ! UnsafeCast=0 [Linker] MapFile=0 |
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7153/Core Modified Files: InstantConnectionManagerForm.dfm InstantConnectionManagerForm.pas InstantDBBuild.pas Added Files: InstantDBEvolverForm.dfm InstantDBEvolverForm.pas Log Message: Design time support for database evolution Index: InstantConnectionManagerForm.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConnectionManagerForm.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** InstantConnectionManagerForm.pas 25 Feb 2005 17:17:45 -0000 1.4 --- InstantConnectionManagerForm.pas 28 Jun 2005 10:13:47 -0000 1.5 *************** *** 24,28 **** * the Initial Developer. All Rights Reserved. * ! * Contributor(s): Carlo Barazzetta * * ***** END LICENSE BLOCK ***** *) --- 24,28 ---- * the Initial Developer. All Rights Reserved. * ! * Contributor(s): Carlo Barazzetta, Nando Dessena * * ***** END LICENSE BLOCK ***** *) *************** *** 80,83 **** --- 80,86 ---- N2: TMenuItem; Open1: TMenuItem; + EvolveAction: TAction; + EvolveButton: TButton; + EvolveItem: TMenuItem; procedure ActionListUpdate(Action: TBasicAction; var Handled: Boolean); procedure BuildActionExecute(Sender: TObject); *************** *** 103,106 **** --- 106,110 ---- procedure ConnectActionUpdate(Sender: TObject); procedure DisconnectActionUpdate(Sender: TObject); + procedure EvolveActionExecute(Sender: TObject); private FModel: TInstantModel; *************** *** 137,140 **** --- 141,145 ---- procedure Disconnect(ConnectionDef: TInstantConnectionDef); function Edit(ConnectionDef: TInstantConnectionDef): Boolean; + procedure Evolve(ConnectionDef: TInstantConnectionDef); function DoConnect(ConnectionDef: TInstantConnectionDef): Boolean; virtual; function DoDisconnect(ConnectionDef: TInstantConnectionDef): Boolean; virtual; *************** *** 146,152 **** property ConnectionDefs: TInstantConnectionDefs read GetConnectionDefs; property FileOpenDialog: TOpenDialog read GetOpenDialog; public function IsManagerConnected: Boolean; - function DoBuild(ConnectionDef: TInstantConnectionDef): Boolean; virtual; property CurrentConnectionDef: TInstantConnectionDef read GetCurrentConnectionDef write SetCurrentConnectionDef; property FileName: string read GetFileName write SetFileName; --- 151,158 ---- property ConnectionDefs: TInstantConnectionDefs read GetConnectionDefs; property FileOpenDialog: TOpenDialog read GetOpenDialog; + function DoBuild(ConnectionDef: TInstantConnectionDef): Boolean; virtual; + function DoEvolve(ConnectionDef: TInstantConnectionDef): Boolean; virtual; public function IsManagerConnected: Boolean; property CurrentConnectionDef: TInstantConnectionDef read GetCurrentConnectionDef write SetCurrentConnectionDef; property FileName: string read GetFileName write SetFileName; *************** *** 160,164 **** property OnPrepare: TInstantConnectorEvent read FOnPrepare write FOnPrepare; property OnSupportConnector: TInstantConnectorClassEvent read FOnSupportConnector write SetOnSupportConnector; ! property ConnectionManager : TInstantConnectionManager read FConnectionManager write SetConnectionManager; end; --- 166,170 ---- property OnPrepare: TInstantConnectorEvent read FOnPrepare write FOnPrepare; property OnSupportConnector: TInstantConnectorClassEvent read FOnSupportConnector write SetOnSupportConnector; ! property ConnectionManager: TInstantConnectionManager read FConnectionManager write SetConnectionManager; end; *************** *** 169,185 **** uses ! InstantImageUtils, InstantConsts; ! procedure DefaultConnectionManagerExecutor(ConnectionManager : TInstantConnectionManager); var ! ConnManagerForm : TInstantConnectionManagerForm; begin ! ConnManagerForm := TInstantConnectionManagerForm.Create(nil); ! Try ! ConnManagerForm.ConnectionManager := ConnectionManager; ! ConnManagerForm.ShowModal; ! Finally ! ConnManagerForm.Free; ! End; end; --- 175,191 ---- uses ! InstantImageUtils, InstantConsts, InstantDBEvolverForm; ! procedure DefaultConnectionManagerExecutor(ConnectionManager: TInstantConnectionManager); var ! ConnectionManagerForm: TInstantConnectionManagerForm; begin ! ConnectionManagerForm := TInstantConnectionManagerForm.Create(nil); ! try ! ConnectionManagerForm.ConnectionManager := ConnectionManager; ! ConnectionManagerForm.ShowModal; ! finally ! ConnectionManagerForm.Free; ! end; end; *************** *** 205,208 **** --- 211,215 ---- EnableAction(DeleteAction, HasItem and not Connected); EnableAction(BuildAction, HasItem and not Connected); + EnableAction(EvolveAction, HasItem and not Connected); EnableAction(ConnectAction, HasItem and not Connected); EnableAction(DisconnectAction, HasItem and Connected); *************** *** 215,219 **** end; ! procedure TInstantConnectionManagerForm.Build(ConnectionDef: TInstantConnectionDef); begin try --- 222,227 ---- end; ! procedure TInstantConnectionManagerForm.Build( ! ConnectionDef: TInstantConnectionDef); begin try *************** *** 227,230 **** --- 235,245 ---- end; + procedure TInstantConnectionManagerForm.Evolve( + ConnectionDef: TInstantConnectionDef); + begin + DoEvolve(ConnectionDef); + PopulateConnectionDefs; + end; + procedure TInstantConnectionManagerForm.BuildActionExecute(Sender: TObject); begin *************** *** 232,237 **** end; ! function TInstantConnectionManagerForm.ConfirmDlg( ! const Text: string): Boolean; begin Result := MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; --- 247,256 ---- end; ! procedure TInstantConnectionManagerForm.EvolveActionExecute(Sender: TObject); ! begin ! Evolve(CurrentConnectionDef); ! end; ! ! function TInstantConnectionManagerForm.ConfirmDlg(const Text: string): Boolean; begin Result := MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; *************** *** 345,353 **** Connector.BuildDatabase(Model); Connector.Connect; ! Try DoPrepare(Connector); ! Finally Connector.Disconnect; ! End; finally Screen.Cursor := SaveCursor; --- 364,372 ---- Connector.BuildDatabase(Model); Connector.Connect; ! try DoPrepare(Connector); ! finally Connector.Disconnect; ! end; finally Screen.Cursor := SaveCursor; *************** *** 360,363 **** --- 379,410 ---- end; + + function TInstantConnectionManagerForm.DoEvolve( + ConnectionDef: TInstantConnectionDef): Boolean; + var + Connector: TInstantConnector; + DBEvolverForm: TInstantDBEvolverForm; + begin + if not Assigned(ConnectionDef) then + begin + Result := False; + Exit; + end; + Connector := ConnectionDef.CreateConnector(nil); + try + DBEvolverForm := TInstantDBEvolverForm.Create(nil); + try + DBEvolverForm.Connector := Connector; + DBEvolverForm.TargetModel := Model; + DBEvolverForm.Execute; + Result := True; + finally + DBEvolverForm.Free; + end; + finally + Connector.Free; + end; + end; + function TInstantConnectionManagerForm.DoConnect( ConnectionDef: TInstantConnectionDef): Boolean; *************** *** 668,672 **** FTitle := Value.Caption else ! FTitle := self.Caption; FConnectionManager := Value; Model := Value.Model; --- 715,719 ---- FTitle := Value.Caption else ! FTitle := Caption; FConnectionManager := Value; Model := Value.Model; *************** *** 713,718 **** end; ! procedure TInstantConnectionManagerForm.DisconnectActionUpdate( ! Sender: TObject); begin DisconnectAction.Enabled := IsManagerConnected; --- 760,764 ---- end; ! procedure TInstantConnectionManagerForm.DisconnectActionUpdate(Sender: TObject); begin DisconnectAction.Enabled := IsManagerConnected; Index: InstantConnectionManagerForm.dfm =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantConnectionManagerForm.dfm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** InstantConnectionManagerForm.dfm 25 Feb 2005 17:17:45 -0000 1.2 --- InstantConnectionManagerForm.dfm 28 Jun 2005 10:13:47 -0000 1.3 *************** *** 1,5 **** object InstantConnectionManagerForm: TInstantConnectionManagerForm ! Left = 327 ! Top = 305 Width = 350 Height = 281 --- 1,5 ---- object InstantConnectionManagerForm: TInstantConnectionManagerForm ! Left = 396 ! Top = 280 Width = 350 Height = 281 *************** *** 34,38 **** Top = 0 Width = 342 ! Height = 215 Align = alClient Columns = < --- 34,38 ---- Top = 0 Width = 342 ! Height = 222 Align = alClient Columns = < *************** *** 52,56 **** object BottomPanel: TPanel Left = 0 ! Top = 215 Width = 342 Height = 32 --- 52,56 ---- object BottomPanel: TPanel Left = 0 ! Top = 222 Width = 342 Height = 32 *************** *** 92,95 **** --- 92,103 ---- end end + object EvolveButton: TButton + Left = 82 + Top = 4 + Width = 75 + Height = 25 + Action = EvolveAction + TabOrder = 2 + end end object ConnectionImages: TImageList *************** *** 118,121 **** --- 126,132 ---- Action = BuildAction end + object EvolveItem: TMenuItem + Action = EvolveAction + end object ConnectItem: TMenuItem Action = ConnectAction *************** *** 153,156 **** --- 164,172 ---- OnExecute = DeleteActionExecute end + object EvolveAction: TAction + Caption = 'E&volve' + Hint = 'Evolve' + OnExecute = EvolveActionExecute + end object BuildAction: TAction Caption = '&Build' Index: InstantDBBuild.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBBuild.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** InstantDBBuild.pas 18 Jun 2005 09:47:24 -0000 1.1 --- InstantDBBuild.pas 28 Jun 2005 10:13:47 -0000 1.2 *************** *** 27,30 **** --- 27,31 ---- * * ***** END LICENSE BLOCK ***** *) + unit InstantDBBuild; *************** *** 395,398 **** --- 396,400 ---- if Assigned(FConnector) then FConnector.FreeNotification(Self); + FCommandSequence.Connector := FConnector; end; end; --- NEW FILE: InstantDBEvolverForm.pas --- (* * InstantObjects * Database evolution Form *) (* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is: InstantObjects database evolver form * * The Initial Developer of the Original Code is: Nando Dessena * * Portions created by the Initial Developer are Copyright (C) 2005 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) unit InstantDBEvolverForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, InstantPersistence, ComCtrls, InstantDBBuild, InstantDBEvolution, InstantPresentation, ActnList; type TInstantDBEvolverForm = class(TForm) ShowSequenceButton: TButton; SequenceListView: TListView; EvolveButton: TButton; MoveCommandUpButton: TButton; MoveCommandDownButton: TButton; EvolutionLogMemo: TMemo; Label1: TLabel; DBEvolver: TInstantDBEvolver; EnableAllButton: TButton; DisableAllButton: TButton; ActionList: TActionList; ShowSequenceAction: TAction; EvolveAction: TAction; MoveCommandUpAction: TAction; MoveCommandDownAction: TAction; EnableAllCommandsAction: TAction; DisableAllCommandsAction: TAction; procedure ShowSequenceButtonClick(Sender: TObject); procedure DBEvolverBeforeCommandExecute(const Sender: TObject; const ACommand: TInstantDBBuildCommand); procedure DBEvolverCommandExecuteError(const Sender: TObject; const ACommand: TInstantDBBuildCommand; const Error: Exception; var RaiseError: Boolean); procedure ShowSequenceActionExecute(Sender: TObject); procedure EvolveActionExecute(Sender: TObject); procedure EvolveActionUpdate(Sender: TObject); procedure MoveCommandUpActionExecute(Sender: TObject); procedure MoveCommandDownActionExecute(Sender: TObject); procedure EnableAllCommandsActionExecute(Sender: TObject); procedure DisableAllCommandsActionExecute(Sender: TObject); procedure MoveCommandUpActionUpdate(Sender: TObject); procedure MoveCommandDownActionUpdate(Sender: TObject); procedure EnableAllCommandsActionUpdate(Sender: TObject); procedure DisableAllCommandsActionUpdate(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure SequenceToScreen; procedure ScreenToSequence; procedure Log(const ALogStr: string); function GetConnector: TInstantConnector; procedure SetConnector(const Value: TInstantConnector); function ConfirmDlg(const Text: string): Boolean; function GetTargetModel: TInstantModel; procedure SetTargetModel(const Value: TInstantModel); public // Assign a connector before calling the Execute method, otherwise the // default connector is used. property Connector: TInstantConnector read GetConnector write SetConnector; // Assign a target model before calling the Execute method, otherwise the // default model is used. property TargetModel: TInstantModel read GetTargetModel write SetTargetModel; // Shows the form modally. procedure Execute; end; implementation {$R *.dfm} procedure TInstantDBEvolverForm.ShowSequenceButtonClick(Sender: TObject); begin DBEvolver.BuildCommandSequence; SequenceToScreen; end; procedure TInstantDBEvolverForm.SequenceToScreen; var i: Integer; begin SequenceListView.Clear; for i := 0 to DBEvolver.CommandSequence.Count - 1 do begin with SequenceListView.Items.Add do begin Caption := DBEvolver.CommandSequence[i].Description; Checked := DBEvolver.CommandSequence[i].Enabled; Data := DBEvolver.CommandSequence[i]; end; end; end; procedure TInstantDBEvolverForm.ScreenToSequence; var i: Integer; begin for i := 0 to SequenceListView.Items.Count - 1 do TInstantDBBuildCommand(SequenceListView.Items[i].Data).Enabled := SequenceListView.Items[i].Checked; end; procedure TInstantDBEvolverForm.Log(const ALogStr: string); begin EvolutionLogMemo.Lines.Add(ALogStr); end; procedure TInstantDBEvolverForm.DBEvolverBeforeCommandExecute( const Sender: TObject; const ACommand: TInstantDBBuildCommand); begin if ACommand.Enabled then Log('Executing: ' + ACommand.Description) else Log('Skipping: ' + ACommand.Description); end; procedure TInstantDBEvolverForm.DBEvolverCommandExecuteError( const Sender: TObject; const ACommand: TInstantDBBuildCommand; const Error: Exception; var RaiseError: Boolean); begin Log('Error: ' + Error.Message); end; procedure TInstantDBEvolverForm.Execute; begin ShowModal; end; function TInstantDBEvolverForm.GetConnector: TInstantConnector; begin Result := DBEvolver.Connector; end; procedure TInstantDBEvolverForm.SetConnector(const Value: TInstantConnector); begin DBEvolver.Connector := Value; end; function TInstantDBEvolverForm.ConfirmDlg(const Text: string): Boolean; begin Result := MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; end; procedure TInstantDBEvolverForm.ShowSequenceActionExecute(Sender: TObject); var OldScreenCursor: TCursor; begin OldScreenCursor := Screen.Cursor; Screen.Cursor := crHourglass; try DBEvolver.BuildCommandSequence; SequenceToScreen; finally Screen.Cursor := OldScreenCursor; end; end; procedure TInstantDBEvolverForm.EvolveActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := DBEvolver.CommandSequence.Count > 0; end; procedure TInstantDBEvolverForm.EvolveActionExecute(Sender: TObject); begin if ConfirmDlg('Evolve database?') then begin ScreenToSequence; EvolutionLogMemo.Lines.Clear; DBEvolver.CommandSequence.Execute; ShowMessage('Database evolved without errors.'); ShowSequenceAction.Execute; end; end; procedure TInstantDBEvolverForm.MoveCommandUpActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := Assigned(SequenceListView.Selected) and (SequenceListView.Selected.Index > 0); end; procedure TInstantDBEvolverForm.MoveCommandUpActionExecute(Sender: TObject); begin ScreenToSequence; DBEvolver.CommandSequence.MoveItem( TInstantDBBuildCommand(SequenceListView.Selected.Data), -1); SequenceToScreen; end; procedure TInstantDBEvolverForm.MoveCommandDownActionUpdate(Sender: TObject); begin (Sender as TAction).Enabled := Assigned(SequenceListView.Selected) and (SequenceListView.Selected.Index < Pred(SequenceListView.Items.Count)); end; procedure TInstantDBEvolverForm.MoveCommandDownActionExecute( Sender: TObject); begin ScreenToSequence; DBEvolver.CommandSequence.MoveItem( TInstantDBBuildCommand(SequenceListView.Selected.Data), 1); SequenceToScreen; end; procedure TInstantDBEvolverForm.EnableAllCommandsActionUpdate( Sender: TObject); begin (Sender as TAction).Enabled := SequenceListView.Items.Count > 0; end; procedure TInstantDBEvolverForm.EnableAllCommandsActionExecute( Sender: TObject); var i: Integer; begin for i := 0 to Pred(SequenceListView.Items.Count) do SequenceListView.Items[i].Checked := True; ScreenToSequence; end; procedure TInstantDBEvolverForm.DisableAllCommandsActionUpdate( Sender: TObject); begin (Sender as TAction).Enabled := SequenceListView.Items.Count > 0; end; procedure TInstantDBEvolverForm.DisableAllCommandsActionExecute( Sender: TObject); var i: Integer; begin for i := 0 to Pred(SequenceListView.Items.Count) do SequenceListView.Items[i].Checked := False; ScreenToSequence; end; function TInstantDBEvolverForm.GetTargetModel: TInstantModel; begin Result := DBEvolver.TargetModel; end; procedure TInstantDBEvolverForm.SetTargetModel(const Value: TInstantModel); begin DBEvolver.TargetModel := Value; end; procedure TInstantDBEvolverForm.FormCreate(Sender: TObject); begin Constraints.MinWidth := Width; Constraints.MinHeight := Height; end; end. --- NEW FILE: InstantDBEvolverForm.dfm --- object InstantDBEvolverForm: TInstantDBEvolverForm Left = 439 Top = 273 Width = 601 Height = 332 Caption = 'Database Evolution' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Icon.Data = { 0000010001001010100000000000280100001600000028000000100000002000 00000100040000000000C0000000000000000000000000000000000000000000 000000008000008000000080800080000000800080008080000080808000C0C0 C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 00000000000000000000070444000000088FF844444000077888F44444440007 888FF444444400077888F44F44440007888FFF44444000077888F8F444000007 888FFF88700000077888F8870000000780000087000000000FFFFF000000000F FFFFFFFF000000000FFFFF00000000000000000000000000000000000000FFFF 0000F8230000E0010000C0000000C0000000C0000000C0010000C0030000C007 0000C0070000C0070000C0070000C0070000E00F0000F83F0000FFFF0000} OldCreateOrder = False ShowHint = True OnCreate = FormCreate DesignSize = ( 593 305) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 8 Top = 176 Width = 61 Height = 13 Anchors = [akLeft, akBottom] Caption = 'Evolution log' end object ShowSequenceButton: TButton Left = 8 Top = 8 Width = 145 Height = 25 Action = ShowSequenceAction TabOrder = 0 end object SequenceListView: TListView Left = 8 Top = 40 Width = 441 Height = 129 Anchors = [akLeft, akTop, akRight, akBottom] Checkboxes = True Columns = < item Caption = 'Evolution sequence' Width = 400 end> TabOrder = 1 ViewStyle = vsReport end object EvolveButton: TButton Left = 160 Top = 8 Width = 145 Height = 25 Action = EvolveAction TabOrder = 2 end object MoveCommandUpButton: TButton Left = 456 Top = 40 Width = 129 Height = 25 Action = MoveCommandUpAction Anchors = [akTop, akRight] TabOrder = 3 end object MoveCommandDownButton: TButton Left = 456 Top = 72 Width = 129 Height = 25 Action = MoveCommandDownAction Anchors = [akTop, akRight] TabOrder = 4 end object EvolutionLogMemo: TMemo Left = 8 Top = 192 Width = 577 Height = 105 Anchors = [akLeft, akRight, akBottom] ReadOnly = True ScrollBars = ssBoth TabOrder = 5 WordWrap = False end object EnableAllButton: TButton Left = 456 Top = 112 Width = 129 Height = 25 Action = EnableAllCommandsAction Anchors = [akTop, akRight] TabOrder = 6 end object DisableAllButton: TButton Left = 456 Top = 144 Width = 129 Height = 25 Action = DisableAllCommandsAction Anchors = [akTop, akRight] TabOrder = 7 end object DBEvolver: TInstantDBEvolver BeforeCommandExecute = DBEvolverBeforeCommandExecute OnCommandExecuteError = DBEvolverCommandExecuteError Left = 264 Top = 96 end object ActionList: TActionList Left = 320 Top = 96 object ShowSequenceAction: TAction Caption = 'Show Evolution Sequence' OnExecute = ShowSequenceActionExecute end object EvolveAction: TAction Caption = 'Evolve Database' OnExecute = EvolveActionExecute OnUpdate = EvolveActionUpdate end object MoveCommandUpAction: TAction Caption = 'Move Command Up' OnExecute = MoveCommandUpActionExecute OnUpdate = MoveCommandUpActionUpdate end object MoveCommandDownAction: TAction Caption = 'Move Command Down' OnExecute = MoveCommandDownActionExecute OnUpdate = MoveCommandDownActionUpdate end object EnableAllCommandsAction: TAction Caption = 'Enable All Commands' OnExecute = EnableAllCommandsActionExecute OnUpdate = EnableAllCommandsActionUpdate end object DisableAllCommandsAction: TAction Caption = 'Disable All Commands' OnExecute = DisableAllCommandsActionExecute OnUpdate = DisableAllCommandsActionUpdate end end end |
From: Nando D. <na...@us...> - 2005-06-28 10:13:57
|
Update of /cvsroot/instantobjects/Source/Core/D6 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7153/Core/D6 Modified Files: IOCore.dpk Log Message: Design time support for database evolution Index: IOCore.dpk =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/D6/IOCore.dpk,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** IOCore.dpk 18 Jun 2005 09:48:14 -0000 1.5 --- IOCore.dpk 28 Jun 2005 10:13:46 -0000 1.6 *************** *** 53,57 **** InstantPump in '..\InstantPump.pas', InstantDBEvolution in '..\InstantDBEvolution.pas', ! InstantDBBuild in '..\InstantDBBuild.pas'; end. --- 53,58 ---- InstantPump in '..\InstantPump.pas', InstantDBEvolution in '..\InstantDBEvolution.pas', ! InstantDBBuild in '..\InstantDBBuild.pas', ! InstantDBEvolverForm in '..\InstantDBEvolverForm.pas' {InstantDBEvolverForm}; end. |
From: Nando D. <na...@us...> - 2005-06-28 10:12:38
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6440/Core Modified Files: InstantDBEvolution.pas Log Message: retouch Index: InstantDBEvolution.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantDBEvolution.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** InstantDBEvolution.pas 18 Jun 2005 09:47:24 -0000 1.1 --- InstantDBEvolution.pas 28 Jun 2005 10:12:27 -0000 1.2 *************** *** 17,21 **** * License. * ! * The Original Code is: InstantObjects Database builder * * The Initial Developer of the Original Code is: Nando Dessena --- 17,21 ---- * License. * ! * The Original Code is: InstantObjects Database evolver * * The Initial Developer of the Original Code is: Nando Dessena *************** *** 27,30 **** --- 27,31 ---- * * ***** END LICENSE BLOCK ***** *) + unit InstantDBEvolution; |