ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/ibupdatesqleditor.pas
Revision: 33
Committed: Sat Jul 18 12:30:52 2015 UTC (8 years, 8 months ago) by tony
Content type: text/x-pascal
File size: 8764 byte(s)
Log Message:
Committing updates for Release R1-3-1

File Contents

# Content
1 (*
2 * IBX For Lazarus (Firebird Express)
3 *
4 * The contents of this file are subject to the Initial Developer's
5 * Public License Version 1.0 (the "License"); you may not use this
6 * file except in compliance with the License. You may obtain a copy
7 * of the License here:
8 *
9 * http://www.firebirdsql.org/index.php?op=doc&id=idpl
10 *
11 * Software distributed under the License is distributed on an "AS
12 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
13 * implied. See the License for the specific language governing rights
14 * and limitations under the License.
15 *
16 * The Initial Developer of the Original Code is Tony Whyman.
17 *
18 * The Original Code is (C) 2011 Tony Whyman, MWA Software
19 * (http://www.mwasoftware.co.uk).
20 *
21 * All Rights Reserved.
22 *
23 * Contributor(s): ______________________________________.
24 *
25 *)
26 unit IBUpdateSQLEditor;
27
28 {$mode objfpc}{$H+}
29
30 interface
31
32 uses
33 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
34 ComCtrls, StdCtrls, ExtCtrls, IBSystemTables, IBUpdateSQL, IBDatabase;
35
36 type
37
38 { TIBUpdateSQLEditorForm }
39
40 TIBUpdateSQLEditorForm = class(TForm)
41 GenerateParams: TCheckBox;
42 TestBtn: TButton;
43 CancelButton: TButton;
44 FieldsPage: TTabSheet;
45 GenerateBtn: TButton;
46 GroupBox1: TGroupBox;
47 IBTransaction1: TIBTransaction;
48 IncludePrimaryKeys: TCheckBox;
49 PrimaryKeyList: TListBox;
50 Label1: TLabel;
51 Label2: TLabel;
52 Label3: TLabel;
53 Label4: TLabel;
54 OkButton: TButton;
55 PageControl: TPageControl;
56 QuoteFields: TCheckBox;
57 SQLMemo: TMemo;
58 SQLPage: TTabSheet;
59 StatementType: TRadioGroup;
60 FieldList: TListBox;
61 TableNamesCombo: TComboBox;
62 procedure TestBtnClick(Sender: TObject);
63 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
64 procedure FormShow(Sender: TObject);
65 procedure GenerateBtnClick(Sender: TObject);
66 procedure SQLMemoChange(Sender: TObject);
67 procedure SQLPageShow(Sender: TObject);
68 procedure StatementTypeClick(Sender: TObject);
69 procedure TableNamesComboCloseUp(Sender: TObject);
70 private
71 { private declarations }
72 FUpdateObject: TIBUpdateSQL;
73 FIBSystemTables: TIBSystemTables;
74 FDirty: boolean;
75 FCurrentStatement: integer;
76 FModifySQL: TStringList;
77 FInsertSQL: TStringList;
78 FDeleteSQL: TStringList;
79 FRefreshSQL: TStringList;
80 procedure UpdateSQLMemo;
81 public
82 { public declarations }
83 constructor Create(TheOwner: TComponent); override;
84 destructor Destroy; override;
85 procedure SetUpdateObject(AObject: TIBUpdateSQL);
86 end;
87
88 var
89 IBUpdateSQLEditorForm: TIBUpdateSQLEditorForm;
90
91 function EditIBUpdateSQL(UpdateObject: TIBUpdateSQL): boolean;
92
93 implementation
94
95 uses IBQuery;
96
97 {$R *.lfm}
98
99 function EditIBUpdateSQL(UpdateObject: TIBUpdateSQL): boolean;
100 begin
101 Result := false;
102 if assigned(UpdateObject.DataSet) and assigned(UpdateObject.DataSet.Database) then
103 try
104 UpdateObject.DataSet.Database.Connected := true;
105 except on E: Exception do
106 ShowMessage(E.Message)
107 end;
108
109 with TIBUpdateSQLEditorForm.Create(Application) do
110 try
111 SetUpdateObject(UpdateObject);
112 if assigned(UpdateObject.DataSet) then
113 GenerateParams.Checked := UpdateObject.DataSet.GenerateParamNames;
114 Result := ShowModal = mrOK;
115 if Result and assigned(UpdateObject.DataSet) then
116 UpdateObject.DataSet.GenerateParamNames := GenerateParams.Checked
117 finally
118 Free
119 end;
120
121 end;
122
123 { TIBUpdateSQLEditorForm }
124
125 procedure TIBUpdateSQLEditorForm.FormShow(Sender: TObject);
126 var TableName: string;
127 begin
128 GenerateBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
129 TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
130 PageControl.ActivePage := FieldsPage;
131 FModifySQL.Assign(FUpdateObject.ModifySQL);
132 FInsertSQL.Assign(FUpdateObject.InsertSQL);
133 FDeleteSQL.Assign(FUpdateObject.DeleteSQL);
134 FRefreshSQL.Assign(FUpdateObject.RefreshSQL);
135 FCurrentStatement := -1;
136 TableNamesCombo.Items.Clear;
137 FIBSystemTables.GetTableNames(TableNamesCombo.Items);
138 if TableNamesCombo.Items.Count > 0 then
139 begin
140 TableNamesCombo.ItemIndex := 0;
141 if assigned(FUpdateObject.DataSet) and (FUpdateObject.DataSet is TIBQuery) and
142 ((FUpdateObject.DataSet as TIBQuery).SQL.Text <> '') then
143 try
144 FIBSystemTables.GetTableAndColumns((FUpdateObject.DataSet as TIBQuery).SQL.Text,TableName,nil);
145 TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName);
146 except //ignore
147 end;
148 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false);
149 FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
150 end;
151 end;
152
153 procedure TIBUpdateSQLEditorForm.FormClose(Sender: TObject;
154 var CloseAction: TCloseAction);
155 begin
156 if ModalResult = mrOK then
157 begin
158 UpdateSQLMemo;
159 FUpdateObject.ModifySQL.Assign(FModifySQL);
160 FUpdateObject.InsertSQL.Assign(FInsertSQL);
161 FUpdateObject.DeleteSQL.Assign(FDeleteSQL);
162 FUpdateObject.RefreshSQL.Assign(FRefreshSQL);
163 end;
164 end;
165
166 procedure TIBUpdateSQLEditorForm.TestBtnClick(Sender: TObject);
167 begin
168 if SQLMemo.Lines.Text <> '' then
169 FIBSystemTables.TestSQL(SQLMemo.Lines.Text,GenerateParams.Checked);
170 end;
171
172 procedure TIBUpdateSQLEditorForm.GenerateBtnClick(Sender: TObject);
173 var FieldNames: TStringList;
174 I: integer;
175 begin
176 FieldNames := TStringList.Create;
177 try
178 FUpdateObject.RefreshSQL.Clear;
179 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames);
180 FIBSystemTables.GenerateRefreshSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FRefreshSQL);
181 FIBSystemTables.GenerateDeleteSQL(TableNamesCombo.Text,QuoteFields.Checked,FDeleteSQL);
182 FieldNames.Clear;
183 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames,true,false);
184 FIBSystemTables.GenerateInsertSQL(TableNamesCombo.Text,QuoteFields.Checked,
185 FieldNames,FInsertSQL);
186 if FieldList.SelCount = 0 then
187 begin
188 FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked,
189 FieldList.Items,FModifySQL);
190
191 end
192 else
193 begin
194 FieldNames.Clear;
195 for I := 0 to FieldList.Items.Count - 1 do
196 if FieldList.Selected[I] then
197 FieldNames.Add(FieldList.Items[I]);
198 FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked,
199 FieldNames,FModifySQL);
200 end;
201 FDirty := false;
202 PageControl.ActivePage := SQLPage;
203 finally
204 FieldNames.Free
205 end;
206 end;
207
208 procedure TIBUpdateSQLEditorForm.SQLMemoChange(Sender: TObject);
209 begin
210 FDirty := true
211 end;
212
213 procedure TIBUpdateSQLEditorForm.SQLPageShow(Sender: TObject);
214 begin
215 UpdateSQLMemo
216 end;
217
218 procedure TIBUpdateSQLEditorForm.StatementTypeClick(Sender: TObject);
219 begin
220 UpdateSQLMemo
221 end;
222
223 procedure TIBUpdateSQLEditorForm.TableNamesComboCloseUp(Sender: TObject);
224 begin
225 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false);
226 FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
227 end;
228
229 procedure TIBUpdateSQLEditorForm.UpdateSQLMemo;
230 begin
231 if FDirty then
232 case FCurrentStatement of
233 0: //Modify
234 FModifySQL.Assign(SQLMemo.Lines);
235 1: //Insert
236 FInsertSQL.Assign(SQLMemo.Lines);
237 2: // Delete
238 FDeleteSQL.Assign(SQLMemo.Lines);
239 3: //Refresh
240 FRefreshSQL.Assign(SQLMemo.Lines);
241 end;
242 FDirty := false;
243 case StatementType.ItemIndex of
244 0: // Modify
245 SQLMemo.Lines.Assign(FModifySQL) ;
246 1: //Insert
247 SQLMemo.Lines.Assign(FInsertSQL) ;
248 2: // Delete
249 SQLMemo.Lines.Assign(FDeleteSQL) ;
250 3: //Refresh
251 SQLMemo.Lines.Assign(FRefreshSQL) ;
252 end;
253 FCurrentStatement := StatementType.ItemIndex;
254 end;
255
256 constructor TIBUpdateSQLEditorForm.Create(TheOwner: TComponent);
257 begin
258 inherited Create(TheOwner);
259 FIBSystemTables := TIBSystemTables.Create;
260 FModifySQL := TStringList.Create;
261 FInsertSQL := TStringList.Create;
262 FDeleteSQL := TStringList.Create;
263 FRefreshSQL := TStringList.Create;
264 end;
265
266 destructor TIBUpdateSQLEditorForm.Destroy;
267 begin
268 if assigned(FIBSystemTables) then FIBSystemTables.Free;
269 if assigned(FModifySQL) then FModifySQL.Free;
270 if assigned(FInsertSQL) then FInsertSQL.Free;
271 if assigned(FDeleteSQL) then FDeleteSQL.Free;
272 if assigned(FRefreshSQL) then FRefreshSQL.Free;
273 inherited Destroy;
274 end;
275
276 procedure TIBUpdateSQLEditorForm.SetUpdateObject(AObject: TIBUpdateSQL);
277 begin
278 FUpdateObject := AObject;
279 if assigned(FUpdateObject.DataSet) then
280 begin
281 IBTransaction1.DefaultDatabase := FUpdateObject.DataSet.Database;
282 FIBSystemTables.SelectDatabase(FUpdateObject.DataSet.Database,IBTransaction1);
283 end;
284 end;
285
286
287 end.