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

Comparing ibx/trunk/design/ibgeneratoreditor.pas (file contents):
Revision 79 by tony, Sat Jul 18 12:30:52 2015 UTC vs.
Revision 80 by tony, Mon Jan 1 11:31:07 2018 UTC

# Line 15 | Line 15
15   *
16   *  The Initial Developer of the Original Code is Tony Whyman.
17   *
18 < *  The Original Code is (C) 2011 Tony Whyman, MWA Software
18 > *  The Original Code is (C) 2011-17 Tony Whyman, MWA Software
19   *  (http://www.mwasoftware.co.uk).
20   *
21   *  All Rights Reserved.
# Line 31 | Line 31 | unit IBGeneratorEditor;
31   interface
32  
33   uses
34 <  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
35 <  ExtCtrls, StdCtrls, ComCtrls, IBDatabase, IBCustomDataSet, IBSystemTables;
34 >  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
35 >  StdCtrls, ComCtrls, db, IBDatabase, IBCustomDataSet, IBQuery, IBSQL,
36 >  IBLookupComboEditBox, IB;
37  
38   type
39  
# Line 42 | Line 43 | type
43      Bevel1: TBevel;
44      Button1: TButton;
45      Button2: TButton;
46 <    GeneratorNames: TComboBox;
47 <    FieldNames: TComboBox;
48 <    IBTransaction1: TIBTransaction;
46 >    GeneratorSource: TDataSource;
47 >    GeneratorQuery: TIBQuery;
48 >    GeneratorNames: TIBLookupComboEditBox;
49 >    FieldNames: TIBLookupComboEditBox;
50 >    IdentifyStatementSQL: TIBSQL;
51      IncrementBy: TEdit;
52      Label1: TLabel;
53      Label2: TLabel;
54      Label3: TLabel;
55      OnNewRecord: TRadioButton;
56      OnPost: TRadioButton;
57 +    PrimaryKeys: TIBQuery;
58 +    PrimaryKeySource: TDataSource;
59 +    SQLTransaction: TIBTransaction;
60      UpDown1: TUpDown;
61      procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
62      procedure FormShow(Sender: TObject);
63 +    procedure PrimaryKeysBeforeOpen(DataSet: TDataSet);
64    private
65      FGenerator: TIBGenerator;
59    FTableName: string;
60    FIBSystemTables: TIBSystemTables;
66      { private declarations }
67 <    procedure LoadGenerators;
63 <    procedure LoadFieldNames;
64 <    function GetPrimaryKey: string;
67 >    function GetTableName: string;
68      procedure SetGenerator(const AValue: TIBGenerator);
69 <    procedure SetDatabase(ADatabase: TIBDatabase; ATransaction: TIBTransaction);
69 >    procedure SetDatabase(aDatabase: TIBDatabase);
70    public
71      { public declarations }
69    constructor Create(TheOwner: TComponent); override;
70    destructor Destroy; override;
72      property Generator: TIBGenerator read FGenerator write SetGenerator;
73    end;
74  
# Line 75 | Line 76 | function EditGenerator(AGenerator: TIBGe
76  
77   implementation
78  
78 uses IBQuery;
79  
80   {$R *.lfm}
81  
# Line 111 | Line 111 | end;
111  
112   procedure TGeneratorEditor.FormShow(Sender: TObject);
113   begin
114 <  LoadGenerators;
115 <  LoadFieldNames;
114 >  SQLTransaction.Active := true;
115 >  PrimaryKeys.Active := true;
116 >  GeneratorQuery.Active := true;
117    if Generator.Generator <> '' then
118 <    GeneratorNames.ItemIndex := GeneratorNames.Items.IndexOf(Generator.Generator);
118 >    GeneratorQuery.Locate('RDB$GENERATOR_NAME',Generator.Generator,[]);
119    if Generator.Field <> '' then
120 <    FieldNames.ItemIndex := FieldNames.Items.IndexOf(UpperCase(Generator.Field))
120 <  else
121 <    FieldNames.ItemIndex := FieldNames.Items.IndexOf(GetPrimaryKey);
122 <
123 <  if FieldNames.ItemIndex = -1 then
124 <    FieldNames.Text := Generator.Field;
120 >    PrimaryKeys.Locate('ColumnName',UpperCase(Generator.Field),[]);
121  
122    if Generator.ApplyOnEvent = gaeOnNewRecord then
123      OnNewRecord.Checked := true
# Line 130 | Line 126 | begin
126    IncrementBy.Text := IntToStr(Generator.Increment);
127   end;
128  
129 + procedure TGeneratorEditor.PrimaryKeysBeforeOpen(DataSet: TDataSet);
130 + begin
131 +  PrimaryKeys.ParamByName('RDB$RELATION_NAME').AsString := GetTableName;
132 + end;
133 +
134 + function TGeneratorEditor.GetTableName: string;
135 + begin
136 +  Result := '';
137 +  with IdentifyStatementSQL do
138 +  begin
139 +    Transaction.Active := true;
140 +    if FGenerator.Owner is TIBQuery then
141 +      SQL.Assign((FGenerator.Owner as TIBQuery).SQL)
142 +    else
143 +      SQL.Assign((FGenerator.Owner as TIBDataset).SelectSQL);
144 +    try
145 +      Prepare;
146 +      if (SQLStatementType = SQLSelect) and (MetaData.Count > 0) then
147 +        Result := MetaData[0].GetRelationName;
148 +    except on E:EIBError do
149 +  //      ShowMessage(E.Message);
150 +    end;
151 +  end;
152 + end;
153 +
154   procedure TGeneratorEditor.FormClose(Sender: TObject;
155    var CloseAction: TCloseAction);
156   begin
# Line 146 | Line 167 | begin
167    end;
168   end;
169  
149 procedure TGeneratorEditor.LoadGenerators;
150 begin
151  FIBSystemTables.GetGenerators(GeneratorNames.Items);
152  if GeneratorNames.Items.Count > 0 then
153    GeneratorNames.ItemIndex := 0
154 end;
155
156 procedure TGeneratorEditor.LoadFieldNames;
157 begin
158  if FGenerator.Owner is TIBDataSet then
159    FIBSystemTables.GetTableAndColumns((FGenerator.Owner as TIBDataSet).SelectSQL.Text,FTableName,FieldNames.Items)
160  else
161  if FGenerator.Owner is TIBQuery then
162    FIBSystemTables.GetTableAndColumns((FGenerator.Owner as TIBQuery).SQL.Text,FTableName,FieldNames.Items)
163  else
164    raise Exception.CreateFmt('Don''t know how to edit a %s',[FGenerator.Owner.ClassName])
165 end;
166
167 function TGeneratorEditor.GetPrimaryKey: string;
168 var Keys: TStringList;
169 begin
170  Result := '';
171  Keys := TStringList.Create;
172  try
173    FIBSystemTables.GetPrimaryKeys(FTableName,Keys);
174    if Keys.Count > 0 then
175      Result := Keys[0];
176  finally
177    Keys.Free
178  end;
179 end;
180
170   procedure TGeneratorEditor.SetGenerator(const AValue: TIBGenerator);
171   begin
172    FGenerator := AValue;
173 <  IBTransaction1.DefaultDatabase := Generator.Owner.Database;
185 <  SetDatabase(Generator.Owner.Database,IBTransaction1);
173 >  SetDatabase(Generator.Owner.Database);
174   end;
175  
176 < procedure TGeneratorEditor.SetDatabase(ADatabase: TIBDatabase; ATransaction: TIBTransaction);
176 > procedure TGeneratorEditor.SetDatabase(aDatabase: TIBDatabase);
177   begin
178    if not assigned(ADatabase) then
179      raise Exception.Create('A Database must be assigned');
180 <  if not assigned(ATransaction) then
181 <    raise Exception.Create('A Transaction must be assigned');
182 <  FIBSystemTables.SelectDatabase( ADatabase,ATransaction)
183 < end;
196 <
197 < constructor TGeneratorEditor.Create(TheOwner: TComponent);
198 < begin
199 <  inherited Create(TheOwner);
200 <  FIBSystemTables := TIBSystemTables.Create
201 < end;
202 <
203 < destructor TGeneratorEditor.Destroy;
204 < begin
205 <  if assigned(FIBSystemTables) then FIBSystemTables.Free;
206 <  inherited Destroy;
180 >  PrimaryKeys.Database := aDatabase;
181 >  GeneratorQuery.Database := aDatabase;
182 >  IdentifyStatementSQL.Database := aDatabase;
183 >  SQLTransaction.DefaultDatabase := aDatabase;
184   end;
185  
186   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines